Repository navigation
[objectui half] Consume the declared nav runAction slot — retire the private ?runAction= string convention (#4848 follow-up) #7250
Description
Activity
Triage:
repo:objectui+pm:blocked; machine-readableBlocked-by: #7253line 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 therepo:*label rather than transferring. ⚠️ Premise correction, on the record: the body says the spec half "landed" — it has NOT merged. The spec half is PR feat(spec,lint): declare the SDUI deep-link "navigate = run action" as a validatable navrunActionreference (#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.- Landing (consumer face) verified @ objectui
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. - 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).
本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- Seam card (multi-repo rule 1, exception B): downstream half of a contract-first chain — the spec slot (
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 commented
on Aug 18, 2026 CollaboratorMore actionsMoved 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.
⚠️ Three things that matter to this repo, because they are cross-repo machinery: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.- 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_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
Blocked-by: #7253
Follow-up consumer card for #4848 (spec half landed by the
claude/issue-4848-runaction-contractPR — 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): anobjectnav 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+recordIdis parse-rejected. Ledgeredplanned+authorWarnuntil a shell consumes the declared slot.What objectui needs to do
objectnav item carriesrunAction, land on the list surface and auto-run the declared action once (same semanticsEnvironmentListToolbar.tsx'suseAutoRunCreategives the raw?runAction=query param today — consume-once,autoTriggerthe matching toolbar action).CloudOnboardingNext.tsx: stop hand-concatenating${envsRoute}?runAction=create_environment; drive the deep link from declared metadata via the slot.?runAction=<actionName>)要不要升格为 spec 声明的正式契约 #4848's 2026-08-06 on-hold comment suggested: concatenation side and consumer side asserting the same constant).app.json→apps.navigation.children.runActionfromplanned/authorWarntolivewith 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.Refs: #4848 (ruling comment 5203605940), cloud#844, cloud#1048.
Generated by Claude Code