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
{{ message }}
Repository navigation
[objectui half] Consume the declared nav runAction slot — retire the private ?runAction= string convention (#4848 follow-up) #7250
Follow-up consumer card for #4848 (spec half landed by the claude/issue-4848-runaction-contract PR — filed unassigned/unrouted; the target surface is objectui, outside this card's filing repo, so route per cross-shard convention like #4848 itself was).
What the spec half now declares
ObjectNavItemSchema.runAction (optional): an object nav item declares the action to auto-run once on arrival at the object's list surface. The reference is validated (defineStack cross-reference walk + validate-action-name-refs, error severity, did-you-mean). runAction + recordId is parse-rejected. Ledgered planned + authorWarn until a shell consumes the declared slot.
What objectui needs to do
NavigationRenderer / shell: when an object nav item carries runAction, land on the list surface and auto-run the declared action once (same semantics EnvironmentListToolbar.tsx's useAutoRunCreate gives the raw ?runAction= query param today — consume-once, autoTrigger the matching toolbar action).
CloudOnboardingNext.tsx: stop hand-concatenating ${envsRoute}?runAction=create_environment; drive the deep link from declared metadata via the slot.
Decide whether the URL query param remains the wire encoding of the declared slot (likely yes — the slot then owns the param name in ONE place) and pin the param name pair-wise (the transitional hardening [决策] SDUI 深链「导航即运行动作」(?runAction=<actionName>)要不要升格为 spec 声明的正式契约 #4848's 2026-08-06 on-hold comment suggested: concatenation side and consumer side asserting the same constant).
After landing: flip the framework liveness ledger row app.json → apps.navigation.children.runAction from planned/authorWarn to live with a NavigationRenderer evidence pointer (noted in the row itself).
Transitional guard
cloud#1048's comment + pin test (cloud welcome.page.test.ts) keeps guarding the cloud-owned names (ENVIRONMENTS_ROUTE, create_environment) until this lands. Do not remove it before.
Triage: repo:objectui + pm:blocked; machine-readable Blocked-by: #7253 line added to the body.
Seam card (multi-repo rule 1, exception B): downstream half of a contract-first chain — the spec slot (ObjectNavItemSchema.runAction) and the ordering against that objectstack artifact are the card's substance, so it stays in the main backlog with the repo:* label rather than transferring.
Landing (consumer face) verified @ objectui origin/mainbd863fe: packages/app-shell/src/console/home/CloudOnboardingNext.tsx:164 still hand-concatenates ?runAction=create_environment, and EnvironmentListToolbar.tsx carries the consume-once useAutoRunCreate semantics the declared slot must generalize.
Dedup: no open objectui-side shadow (repo-scoped search; the objectui backlog window at 04:19Z scan was fully pre-labeled and contains no runAction card).
Dispatch-time check for the repo:objectui seat (pin lag is this card's blind spot): confirm objectui's resolved@objectstack/spec release actually declares ObjectNavItemSchema.runAction before dispatching — #7253 merged to objectstack main on 2026-08-10; whether it shipped in 17.0.0-rc.6 (published later that day) or needs the next release is a read, not an assumption. If the resolved install lacks the slot, park again on the named condition "next spec release reaching objectui's resolved install" (the #7100-style condition this seat already patrols).
The cloud#1048 transitional pin stays in place until this lands, per the #4848 ruling quoted on the card; #7251 (cloud half) unlocks only after this card.
Moved to objectstack-ai/objectui#5216 — closing as moved, not resolved. Still blocked, still unfixed.
Provenance: whose instruction — the maintainer's; verbatim — 「转」; where — said directly to the repo:objectui PM seat in session session_01RV6yuVCxymHYE16PL9vQkE, 2026-08-18, under the standing direct-dispatch authorisation.
Why: file-at-destination. The title says "[objectui half]" and the filing note says the target surface is objectui, "outside this card's filing repo" — it was filed here only because its spec half lived here. Consumer halves of a contract-first split belong in the consuming repo.
⚠️ Three things that matter to this repo, because they are cross-repo machinery:
pm:blocking did not carry over, deliberately. It is a cache the triage sweep derives from the Blocked-by: reverse index, ⛔ not hand-hung, so I did not hand-hang it on the destination. Until the next sweep runs, this work's unlock fan-out is under-counted in priority ordering on both sides.
Step 4 stays in this repo. The liveness-ledger flip (app.json → apps.navigation.children.runAction, planned/authorWarn → live) is framework-side. So the objectui card cannot fully close itself — when the consumer work lands, the ledger flip comes back here. That row is how the platform knows the slot is inert; leaving it stale would re-create exactly the declared-but-unread shape this contract was built to close.
Unaffected and still binding: cloud#1048's comment + pin test guarding ENVIRONMENTS_ROUTE / create_environment stays until the consumer half lands. ⛔ Do not remove it early.
The 2 comments here were not copied and stay readable. Anyone tracking this: follow objectstack-ai/objectui#5216.
Activity
claude commentedon Aug 10, 2026
Triage:
repo:objectui+pm:blocked; machine-readableBlocked-by: #7253line added to the body.ObjectNavItemSchema.runAction) and the ordering against that objectstack artifact are the card's substance, so it stays in the main backlog with therepo:*label rather than transferring.runActionreference (#4848) #7253, open at triage time (04:2xZ). Hencepm:blocked. On unlock, re-verify the slot's final shape at the merged ref before dispatch — the PR may still change under review.origin/mainbd863fe:packages/app-shell/src/console/home/CloudOnboardingNext.tsx:164still hand-concatenates?runAction=create_environment, andEnvironmentListToolbar.tsxcarries the consume-onceuseAutoRunCreatesemantics the declared slot must generalize.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
hotlong commentedon Aug 14, 2026
Unlock scan:
pm:blocked→pm:queue, andpm:blockingadded (derived cache: open downstream dependent #7251 carriesBlocked-by: #7250).Blocker discharged: #7253 — the spec half declaring
ObjectNavItemSchema.runAction— MERGED 2026-08-10T05:27Z.Dispatch-time check for the
repo:objectuiseat (pin lag is this card's blind spot): confirm objectui's resolved@objectstack/specrelease actually declaresObjectNavItemSchema.runActionbefore dispatching — #7253 merged to objectstack main on 2026-08-10; whether it shipped in17.0.0-rc.6(published later that day) or needs the next release is a read, not an assumption. If the resolved install lacks the slot, park again on the named condition "next spec release reaching objectui's resolved install" (the #7100-style condition this seat already patrols).The cloud#1048 transitional pin stays in place until this lands, per the #4848 ruling quoted on the card; #7251 (cloud half) unlocks only after this card.
本评论来自分诊座位 Routine。
Generated by Claude Code
os-support-ai commentedon Aug 18, 2026
Moved to
objectstack-ai/objectui#5216— closing asmoved, not resolved. Still blocked, still unfixed.Provenance: whose instruction — the maintainer's; verbatim — 「转」; where — said directly to the
repo:objectuiPM seat in sessionsession_01RV6yuVCxymHYE16PL9vQkE, 2026-08-18, under the standing direct-dispatch authorisation.Why: file-at-destination. The title says "[objectui half]" and the filing note says the target surface is objectui, "outside this card's filing repo" — it was filed here only because its spec half lived here. Consumer halves of a contract-first split belong in the consuming repo.
Blocked-by: #7253was rewritten toBlocked-by: objectstack-ai/objectstack#7253. A bare#7253would, after the move, resolve to objectui's feat(spec,lint): declare the SDUI deep-link "navigate = run action" as a validatable navrunActionreference (#4848) #7253 — a different issue entirely. That is the sharpest hazard in transferring a blocked card, and it is handled; noting it here so the next transfer does not miss it.pm:blockingdid not carry over, deliberately. It is a cache the triage sweep derives from theBlocked-by:reverse index, ⛔ not hand-hung, so I did not hand-hang it on the destination. Until the next sweep runs, this work's unlock fan-out is under-counted in priority ordering on both sides.app.json→apps.navigation.children.runAction,planned/authorWarn→live) is framework-side. So the objectui card cannot fully close itself — when the consumer work lands, the ledger flip comes back here. That row is how the platform knows the slot is inert; leaving it stale would re-create exactly the declared-but-unread shape this contract was built to close.Unaffected and still binding: cloud#1048's comment + pin test guarding
ENVIRONMENTS_ROUTE/create_environmentstays until the consumer half lands. ⛔ Do not remove it early.The 2 comments here were not copied and stay readable. Anyone tracking this: follow
objectstack-ai/objectui#5216.Generated by Claude Code