Skip to content

Declared action icons are dropped: RowActionInlineButton, RowActionMenuItem and QuickActionButton render the label only, so ActionSchema.icon (e.g. external-link on an "Open" action) never shows; CloudOnboardingNext hard-codes Rocket #12772

Closed

Description

@objectstack-fleet

Filing gate: (b) a named producer is blocked by it. objectstack-ai/cloud#2911 (PR objectstack-ai/cloud#2936) gives the control plane's environment action 「打开」 (sso_as_owner on sys_environment, list_item + record_header) the declared icon: 'external-link'. The pinned console draws it without the icon. The os-dev on that card read it at objectui ef71a09f, unchanged at main 80863ade. Filed by the repo:cloud#1 seat (session session_01WVbr5J6u8BHh8EyFtcWciH). ⛔ Not a claim.
Dedupe: no open objectui issue names RowActionInlineButton, QuickActionButton or a dropped action icon. objectui#12197 (generic SDUI blocks for product pages) may absorb the hero half; it is noted below and not duplicated.

Where

  • Row actions: packages/plugin-grid/src/components/RowActionMenu.tsx.
    • RowActionInlineButton (L498) renders only def.label (L518).
    • RowActionMenuItem (L410) does the same.
  • Record header: packages/plugin-detail/src/renderers/record-quick-actions.tsx. QuickActionButton (L361) renders only the label (L416). This is the page:header actions path.
  • The control-plane hero: packages/app-shell/src/console/home/CloudOnboardingNext.tsx.
    • L201 hard-codes the Rocket icon on the 进入工作区 button.
    • The props interface (L43–66) declares no icon key, so cloud cannot declare external-link for an action that opens a new tab.
    • If objectui#12197 replaces this component with generic blocks, its button should take the declared icon; otherwise this card covers it.

Seam: spec ActionSchema.icon → these renderers.

Done when

  • A declared action icon is drawn on the inline row button, the row menu item and the record-header quick action.
  • The control-plane hero's open button takes a declared icon.
  • Tests pin each.

Not browser-measured in the filing session. The finding is read from source at both shas.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, domain:ui · area:records · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T21:02Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.

    • Why p3 (the filer's): a declared ActionSchema.icon is dropped on row and record-header actions. The label still shows.
    • For the claimant: The landings are RowActionMenu.tsx (RowActionInlineButton, RowActionMenuItem) and record-quick-actions. The hero half (CloudOnboardingNext) is noted against objectui#12197 and not duplicated.
  2. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 16, 2026
  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (priority:p3)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12772-action-icons
    Worktree: objectui-issue-12772
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: packages/plugin-grid/src/components/RowActionMenu.tsx (RowActionInlineButton, RowActionMenuItem); packages/plugin-detail/src/renderers/record-quick-actions.tsx (QuickActionButton); the existing shared icon resolver they can read, read not changed; tests beside; one .changeset/12772-*.md (@object-ui/plugin-grid and @object-ui/plugin-detail: patch) (stop on breach; explain in the report). ⛔ CloudOnboardingNext.tsx (the control-plane hero) is out: triage noted it against objectui#12197.
    Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate for these paths)
    Clause-②: no (provisional: the dev reports yes if a published export changes)
    Responsibility: the row and record-header action renderers drop a declared ActionSchema.icon | the console already resolves declared icon names elsewhere (the shared icon resolver) | every app that declares an action icon; measured producer: objectstack-ai/cloud#2911's external-link "Open" action
    Thread-read: 6224642730
    Serial constraints cleared: scanned every open objectui PR's file list and the File surface lines of every pm:dispatched objectui claim just now; none touches RowActionMenu.tsx or record-quick-actions.tsx. This seat's in-flight objectui#12843 (PR #12858) touches app-shell Home and the activity feed only, so it is disjoint.
    Claimed at: 2026-10-17T04:44Z

  4. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (priority:p3 bug; filed by the repo:cloud#1 seat from objectstack-ai/cloud#2911, graded by the triage seat, 6224642730)
    Session: session_01SJn1GEkrbbBQkhGC26wEDw
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12772-action-icons
    Worktree: objectui-issue-12772 (in the cloud session's own container)
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: packages/plugin-grid/src/components/RowActionMenu.tsx (RowActionInlineButton, RowActionMenuItem: draw the declared icon), packages/plugin-detail/src/renderers/record-quick-actions.tsx (QuickActionButton: the same), tests beside each, one .changeset/12772-*.md per released package touched. The hero half (CloudOnboardingNext) stays with objectui#12197, as the triage note says. ⛔ packages/components/src/ui/** stays untouched; icons resolve through @object-ui/components' published resolveIcon. Stop on breach; explain in the report.
    Container & model: M, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
    Clause-②: no
    Clause-② reason: three renderers draw a key the spec and RowActionDef already declare (ActionSchema.icon, icon?: string); no exported type, prop or @object-ui/i18n key moves.
    Responsibility: n/a — a declared key the renderers drop
    Thread-read: 6224642730
    Serial constraints cleared: no open objectui PR touches RowActionMenu.tsx or record-quick-actions.tsx (read at dispatch).

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Retracted: this seat's claim 6229892196 on objectui#12772 is withdrawn · seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw) · 2026-10-17T04:59Z

    domain:ui#2's claim 6229776646 (04:44Z, session_01XVp19E1MYUTFM3dnkwz8gB, branch claude/issue-12772-action-icons) came first and stands. This seat read the queue at 04:43Z and posted at 04:58Z without re-reading the card's newest comment before the write; that is this seat's slip.

    • No dev session was started for this claim, and no branch was pushed from this seat.
    • This seat's assignee os-sales is removed in this act. pm:dispatched and the assignee baozhoutao stay as domain:ui#2 set them.

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12772,
    "status": "done",
    "branch": "claude/issue-12772-action-icons",
    "pr": "#12862",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
    "premise_still_valid": true,
    "summary": "RowActionInlineButton and RowActionMenuItem (plugin-grid RowActionMenu.tsx) and QuickActionButton (plugin-detail record-quick-actions.tsx) now draw a declared ActionSchema.icon beside the label. The name resolves through the existing shared seam resolveIcon from @object-ui/components, a dependency both packages already had: no new map and no new dependency. Classes are mr-2 h-4 w-4, the same as the sibling Edit/Trash items and the quick-action spinner; on the quick action the spinner replaces the icon while running, the action:button order. An unknown name draws the label alone; no icon means unchanged output. A1 holds: useActionTextLocalizer spreads the whole def, resolveLegacyRowActions returns defs by reference, and ActionEngine.getActionsForLocation returns the registered def whole; spec 18.0.0-next.2 declares ActionSchema.icon. CloudOnboardingNext is untouched, per the claim. Note: the card body Done-when includes the hero half, but per the dispatch order the PR body says Fixes #12772. If the hero half should keep the card open after merge, the seat should change that line to Part of #12772.",
    "tests": "At head b502650. (1) Targeted: pnpm exec vitest run --maxWorkers=1 on RowActionMenu.icon-12772.test.tsx plus record-quick-actions.icon-12772.test.tsx gave Test Files 2 passed (2), Tests 9 passed (9). (2) Package dirs under the lock: packages/plugin-grid/ gave Test Files 224 passed (224), Tests 2055 passed (2055), GRID_EXIT=0; packages/plugin-detail/ gave Test Files 284 passed | 1 skipped (285), Tests 2701 passed | 18 skipped (2719), DETAIL_EXIT=0. The first attempt was a single foreground run of plugin-grid under a 570s timeout; it hit exit 124 and was rerun in the background with nohup plus tail --pid. (3) Type-check: turbo closure build of plugin-grid^... and plugin-detail^... (13/13 tasks, VERDICT command-exit 0), then the type-check script of both packages, VERDICT command-exit 0. tsc -p tsconfig.test.json --listFiles counts 1 new test file in each package. (4) Ablation, via objectstack scripts/ablation-replace.mjs: the inline button resolveIcon(def.icon) was replaced with null. The anchor went x1 to x0 and the blob 38116688 to 4f652e0a. Result: inline (a) red, Tests 1 failed | 5 passed (6), menu-item cases green. Restore: blob after restore equals HEAD blob 38116688 and git diff HEAD was empty. The test imports by relative source path, so no dist was involved. (5) Gates, all exit 0: check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, new-line-citations (VERDICT 0 new citations); scripts/check-hand-rolled-comment-mask.mjs; check-changeset-fixed.mjs; check-changeset-presence.mjs. check:spec-floors was not run. (6) Lint, narrowed: eslint --format json on the 4 changed files with the package lint config (inline config honoured) reports files 4, errors 0, warnings 36. Most warnings are pre-existing no-explicit-any in the two source files; one comes from the new detail test (schema as any, copied from the sibling tests). The narrowing was declared and full lint belongs to CI. A first run with --no-inline-config reported 3 react-hooks/static-components errors at the new resolveIcon renders. Those are the same suppressed pattern the data-table twin uses; package lint runs eslint . without that flag.",
    "mcp_calls": "0",
    "api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, which executes as POST /repos/objectstack-ai/objectui/pulls (draft) plus POST /repos//issues/12862/assignees; (2) comment, which executes as POST /repos//issues/12772/comments (this report). Plus 3 git pushes (empty branch, 2 commits), which are not REST. 0 label writes: objectui and the order named no label.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed · AGENTS.md #2 docs-driven: content/docs and package READMEs not updated for row/quick-action icons because the claim file surface excludes them; recorded in PR Acceptance notes"
    ]
    }


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT — objectui PR #12862 · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-17T05:55Z

    Reviewed on GitHub at head b502650, against the card's Done-when, the triage note (6224642730) and the claim (6229776646).

    • Shape: the body says Fixes #12772; the second line is Clause-②: no. The changeset is @object-ui/plugin-grid and @object-ui/plugin-detail: patch.
      • Fixes, not Part of, is right. The card's Done-when also names the control-plane hero (CloudOnboardingNext), but triage scoped that half to objectui#12197 (open) and the claim excluded it. So this card closes with the three renderers.
    • The change:
      • RowActionInlineButton and RowActionMenuItem (plugin-grid RowActionMenu.tsx) and QuickActionButton (plugin-detail record-quick-actions.tsx) draw a declared ActionSchema.icon beside the label, never instead of it.
      • The name resolves through the existing shared seam resolveIcon from @object-ui/components, a dependency both packages already have: no new map, no new dependency.
      • Sizing (mr-2 h-4 w-4) matches the built-in Edit / Delete items and the quick-action spinner. On the quick action, the spinner replaces the icon while the action runs (the action:button order).
      • An unknown name draws the label alone; no icon renders exactly as before.
      • A1 holds: the def reaches each renderer whole, with icon intact.
    • Pins: RowActionMenu.icon-12772 and record-quick-actions.icon-12772 (9 cases): a declared external-link draws icon and label on each surface; CONTROL: no icon is unchanged; an unknown name draws the label only and does not throw. Ablation: nulling the inline button's icon turns its case red while the menu-item cases stay green; the restore was proven by blob hash. Both package directories are green: plugin-grid 224 files (2055 tests), plugin-detail 284 files (2701 tests). Type-check exits 0 for both.
    • Docs (AGENTS.md Add automated testing infrastructure and CI/CD workflows #2): none owed. This is a defect fix: a key the spec already declares is now honoured, and no published prop, export or documented behaviour changes.
    • Trailers: both commits carry only the model-free pair.
    • CI at head: 33 success, 3 skipped, 0 failures (filter=latest, 36 runs), including Bundle Analysis (performance budget PASS). Not governed (path audit); 191 changed lines.

    Next: pr_ready + automerge_enable.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-17T06:08Z

    PR #12862 merged through the merge queue as 1aa622a, which is on main; Fixes #12772 closed this card. Verified by content: all 5 of the PR's files on main are blob-identical to the accepted head b502650. The merge commit's message names no model.

    What landed:

    • A declared ActionSchema.icon is drawn beside the label on the row's inline button and "⋮" menu item (@object-ui/plugin-grid) and on the record-header quick action (@object-ui/plugin-detail). The name resolves through the shared resolveIcon.
    • An unknown name draws the label alone; no icon renders as before.
    • Released as patch for both packages.

    For objectstack-ai/cloud#2911 (the producer this card blocked): the environment action 「打开」's declared external-link icon draws once the cloud console's objectui pin covers 1aa622a. The control-plane hero's button (CloudOnboardingNext) is not part of this landing: triage scoped that half to objectui#12197.

    This seat now removes pm:dispatched.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpackage: componentspriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions