You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#325 covers the broader backend member model work.
This issue is narrower on purpose:
it isolates the backend contract gaps that specifically block #340 feat(console-web): Member-first Invoke flow and Studio closeout from reaching a 100% pure member-first outcome on the current frontend deadline.
In other words:
#340 can still ship a meaningful frontend closeout on top of the current legacy runtime/binding APIs
but #340cannot honestly become fully member-first end-to-end without the backend pieces below
本 issue 的 deadline 仅通过 GitHub Milestone due date 管理。
Current frontend reality
Today Studio Invoke/Observe still ultimately rely on:
scopeId + serviceId + endpointId for invoke
scopeId + serviceId + runId for runs / observe
scope binding state as the main source of published contract truth
That means frontend can improve framing, navigation, handoff, and lifecycle continuity, but it still cannot make memberId the real authority of bind / invoke / observe.
1. No authoritative memberId -> publishedServiceId mapping
Frontend currently has no backend-owned truth for:
which published service belongs to the current member
whether that mapping is stable across rename / rebuild / rebind
Without this mapping, frontend must keep using legacy serviceId semantics in places where product semantics want memberId.
2. No member-centric binding API
Missing backend APIs such as:
GET /api/scopes/{scopeId}/members/{memberId}/binding
PUT /api/scopes/{scopeId}/members/{memberId}/binding
Without these, Bind cannot truly mean:
publish the current member revision to that member's stable published service
Frontend must keep reading/writing scope/service binding state instead.
3. No member-centric invoke API
Missing backend APIs such as:
POST /api/scopes/{scopeId}/members/{memberId}/invoke/{endpointId}
POST /api/scopes/{scopeId}/members/{memberId}/invoke/{endpointId}:stream
Without these, Invoke can only call runtime through legacy scope/service routes.
That means Studio can look member-first, but the real invoke target is still resolved via service-level runtime semantics.
4. No member-centric runs / observe query API
Missing backend APIs such as:
GET /api/scopes/{scopeId}/members/{memberId}/runs
GET /api/scopes/{scopeId}/members/{memberId}/runs/{runId}
Without these, Observe cannot truly answer:
show me the runtime facts for the current member
It can only continue to interpret runs through legacy service/runtime paths.
5. No backend member roster / detail truth for Studio routing
Missing backend member-centric list/detail APIs mean frontend still has to infer or bridge member focus from workflow / script / published service facts.
That keeps route semantics unstable:
route memberId cannot yet be the fully honest primary key
deep link continuity across Build -> Bind -> Invoke -> Observe remains partly compatibility-driven
If the backend items above are not available before the current #322 closeout milestone due date, frontend #340 can still finish a strong closeout, but only with a reduced truth level:
Frontend can still finish
member-first Invoke page framing
stable Bind -> Invoke handoff
lifecycle gating fixes
Team entry / Studio deep-link cleanup
member-first Observe framing and staged empty states
main regression coverage
Frontend cannot honestly claim
route memberId is the true authority for invoke
Bind is fully member-owned instead of scope/service-backed
Observe is querying member-owned runtime history
Studio no longer depends on legacy service-level runtime semantics
Practical risk to the deadline
If backend contract work slips, the likely outcome is:
GET /api/scopes/{scopeId}/members/{memberId}/binding
PUT /api/scopes/{scopeId}/members/{memberId}/binding
member-centric invoke route or equivalent backend resolver that lets frontend invoke by memberId
member-centric runs query path for Observe
Acceptance for this blocker issue
Backend contract gaps impacting pure member-first #340 are explicitly tracked in one place
#340 can reference this issue to distinguish frontend closeout from backend semantic blockers
team alignment is explicit on what can ship by the current closeout milestone due date vs. what still depends on backend
One-line outcome
If this issue is unresolved, #340 should be treated as a frontend closeout on top of legacy scope/service runtime semantics, not the final fully pure member-first backend truth.
Related
Why this issue exists
#325 covers the broader backend member model work.
This issue is narrower on purpose:
it isolates the backend contract gaps that specifically block
#340 feat(console-web): Member-first Invoke flow and Studio closeoutfrom reaching a 100% pure member-first outcome on the current frontend deadline.In other words:
#340can still ship a meaningful frontend closeout on top of the current legacy runtime/binding APIs#340cannot honestly become fully member-first end-to-end without the backend pieces belowCurrent frontend reality
Today Studio Invoke/Observe still ultimately rely on:
scopeId + serviceId + endpointIdfor invokescopeId + serviceId + runIdfor runs / observeThat means frontend can improve framing, navigation, handoff, and lifecycle continuity, but it still cannot make
memberIdthe real authority of bind / invoke / observe.Hard blockers for pure member-first #340
1. No authoritative
memberId -> publishedServiceIdmappingFrontend currently has no backend-owned truth for:
Without this mapping, frontend must keep using legacy
serviceIdsemantics in places where product semantics wantmemberId.2. No member-centric binding API
Missing backend APIs such as:
GET /api/scopes/{scopeId}/members/{memberId}/bindingPUT /api/scopes/{scopeId}/members/{memberId}/bindingWithout these, Bind cannot truly mean:
Frontend must keep reading/writing scope/service binding state instead.
3. No member-centric invoke API
Missing backend APIs such as:
POST /api/scopes/{scopeId}/members/{memberId}/invoke/{endpointId}POST /api/scopes/{scopeId}/members/{memberId}/invoke/{endpointId}:streamWithout these, Invoke can only call runtime through legacy scope/service routes.
That means Studio can look member-first, but the real invoke target is still resolved via service-level runtime semantics.
4. No member-centric runs / observe query API
Missing backend APIs such as:
GET /api/scopes/{scopeId}/members/{memberId}/runsGET /api/scopes/{scopeId}/members/{memberId}/runs/{runId}Without these, Observe cannot truly answer:
It can only continue to interpret runs through legacy service/runtime paths.
5. No backend member roster / detail truth for Studio routing
Missing backend member-centric list/detail APIs mean frontend still has to infer or bridge member focus from workflow / script / published service facts.
That keeps route semantics unstable:
memberIdcannot yet be the fully honest primary keyBuild -> Bind -> Invoke -> Observeremains partly compatibility-drivenDeadline impact on frontend #340
This is the critical part.
If the backend items above are not available before the current #322 closeout milestone due date, frontend
#340can still finish a strong closeout, but only with a reduced truth level:Frontend can still finish
Bind -> InvokehandoffFrontend cannot honestly claim
memberIdis the true authority for invokePractical risk to the deadline
If backend contract work slips, the likely outcome is:
This is important because otherwise frontend may appear visually done while still carrying semantic debt that blocks final closure of #322.
Minimum backend deliverables that would unblock pure closeout
The minimum useful backend slice for
#340is smaller than the full #325 scope:memberId -> publishedServiceIdread pathGET /api/scopes/{scopeId}/members/{memberId}/bindingPUT /api/scopes/{scopeId}/members/{memberId}/bindingmemberIdAcceptance for this blocker issue
#340are explicitly tracked in one place#340can reference this issue to distinguish frontend closeout from backend semantic blockersOne-line outcome
If this issue is unresolved,
#340should be treated as a frontend closeout on top of legacy scope/service runtime semantics, not the final fully pure member-first backend truth.