Skip to content

[objectui half] Consume the declared nav runAction slot — retire the private ?runAction= string convention (#4848 follow-up) #7250

Description

@os-zhuang

Blocked-by: #7253

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

  1. 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).
  2. CloudOnboardingNext.tsx: stop hand-concatenating ${envsRoute}?runAction=create_environment; drive the deep link from declared metadata via the slot.
  3. 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).
  4. After landing: flip the framework liveness ledger row app.jsonapps.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.

Refs: #4848 (ruling comment 5203605940), cloud#844, cloud#1048.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions