Skip to content

Studio: an item header keeps the item name readable; chips and tools collapse first #29693

Closed

Description

@objectstack-fleet

epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848

Filing gate: ② filed on the maintainer's word in direct chat with the epic PM seat, 2026-11-03: 「同意立卡」, agreeing the four UX proposals with the direction written here. Priority on 「相关卡 p1, 让车道处理」. ⛔ Not a claim.
Reader: domain:ui (if-item-header and the flow and object headers; the rails' customization mark).
Dedupe: Studio header title truncated. New.
type: enhancement

Business reason. With the right panel open on an ordinary laptop, a person cannot read which item they are editing.

What happens

Measured by screenshot on main at 3482f3d8d2, pane about 1024 px wide, right panel open.

  • Interfaces: 工时按状态分布 shows as 工, and 进行中 as 进. The flow header shows "P…".
  • After an edit, the type tag, the override chip, the draft state, five tool icons and the more menu take the row. An independent review saw the title vanish at 1183 px too.
  • The flow rail: the selected customized row showed only 已定制(ObjectStack Showcase), with the name gone.
  • The more menu's trigger sits under the right panel.

Direction (agreed)

  • The name holds a readable minimum width, about 12 characters, with the full name as a tooltip. Chips and tool icons collapse into the more menu first, and the trigger stays reachable.
  • The rail's mark never takes the name's space: shorten it to an icon or 已定制.

Done when: at about 1024 px with the right panel open, all pillars show a readable name, and the more menu is clickable without collapsing the panel.

Links back: #29672 (off-clause observations).

Activity

  1. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 3, 2026
  2. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Claim: PM loop round 14 · 2026-11-03T01:55Z
    Session: session_01QsR2jUYXmZ6DQBWc6piyyF (card thread, os-dev); dispatched by seat session session_01QsR2jR7ZFkpqmm4U8S1f9y
    Account: zhuangjianguo
    Branch: claude/project-thread-dp2ngo (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-29693
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/views/studio-design/StudioItemHeader* and the flow and object item headers, the pillar rails customization mark, their tests, and a new changeset (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: with the right panel open at about 1024 px the item name truncates to one character and the more menu sits under the panel | the name keeps a readable minimum (about 12 characters, full name as tooltip); chips and tool icons collapse into the more menu first; the rail mark shortens to an icon or 已定制 | every Studio user editing an item on an ordinary laptop
    Thread-read: none
    Premise: holds (measured by screenshot on 3482f3d8d2 per the card)
    Serial constraints cleared: seat 4 #29692 (override chip popover) lands after this card; #29691 header sentence (another seat) lands after or coordinates


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p1 kept · domain:ui kept · pm:dispatched kept · 2026-11-03T01:57Z

    ⛔ Not a claim.

    • Read fresh. An item header keeps a readable name at about 1024 px with the right panel open, and chips and tools collapse first. p1 on the maintainer's word. It was already claimed when this audit was posted; nothing changes.

    Generated by Claude Code

  4. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    席位核对 · Amendment · 2026-11-03T02:16Z · surface for #29693

    Measured live in the card thread at about 1024 px with the right panel open (head 511875ee): folding the chips and the five tool icons into the more menu makes the Interfaces report leaf whole (工时按状态分布, 125 px), but the flow header still reads "Notify on…" (100 of 221 px), because the Customize button (78 px) and the ledger switch label (本部署中已开启, about 130 px) keep their text.

    Plan approved: a second fold stage in StudioItemHeader. After the chips and tools have folded, and before the title gives up its minimum, labelled header actions go icon-only. The label stays the accessible name and the tooltip.

    Surface, amended. Added to the claim's surface:

    • ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx (the Customize button's label wrap)
    • ui/packages/app-shell/src/views/studio-design/FlowLedgerSwitch.tsx (the ledger switch's label wrap)
    • ui/packages/app-shell/src/views/studio-design/item-tools/StudioItemTools.tsx (tools hand their menu form to the header)
    • ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx (the flow more menu mounts the folded items)

    Conditions on delivery.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848
    2026-11-03T02:52Z

    Re-measured live by the epic PM seat on main at c9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.

    Confirmed, and worse than the width in the body suggests. At an emulated 1183 px, right panel open, on showcase_task.tabular with a published override: the title element measures 0 px wide, and the header shows no item name at all, while the chip takes 176 px. The name is visible only in the inspector.

    At about 1024 px without a chip: 进行中 shows as 进, and a flow header as "Tic". Done-when should cover 1183 px with a chip as well as 1024 px.

  6. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jUYXmZ6DQBWc6piyyF
    os-dev-report

    {
      "issue": 29693,
      "status": "done",
      "branch": "claude/project-thread-dp2ngo",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29765",
      "head": "205c4531",
      "session": "session_01QsR2jUYXmZ6DQBWc6piyyF",
      "premise_still_valid": true,
      "summary": "StudioItemHeader measures its own title row and keeps the first 12 visible characters of the item name (whole name when shorter). Stage 1 folds the identity chips and the five item tools into the item ⋯ menu (chips as one menu entry that keeps the menu open, tools as menu items with the same test ids opening the same sheets); stage 2 makes Customize, the flow ledger and definition switches and the Design/Run buttons icon-only with the label kept as accessible name; the title is cut last, and the ⋯ trigger stays in the row. The rail customization mark is glyph-only (text as accessible name and tooltip lead). Live at 1024 px, right panel open: Interfaces report 0→125 px, slice 0→107 px, flow 0→145 px (14 chars); ⋯ moved from x 863-907 under the panel to x 668-700, hittable.",
      "tests": "titleRowFold-12897 17/17, itemTools-28239 9/9, oneSurface-28572 13/13. Ablation via scripts/ablation-replace.mjs (fold hook returns stage 0): titleRowFold-12897 10 failed / 7 passed (the 7 = five objectui#12897 cases + two no-fold CONTROLs), restored to HEAD blob. All app-shell test files naming a touched module: 228 files / 1713 tests passed (5 locked batches at 08039a0c). After merge eaea6c68: 5 files / 49 tests. After merge 205c4531: 3 pin files 39/39. ui scripts suite 170 passed, 2 skipped.",
      "gates": "dispatch-gates --commands: 35 derived, 35 run, all exit 0; --ran reconciles 0 NOT-MEASURED. check-sdui-manifest exit 0 (at 08039a0c, eaea6c68, 205c4531). app-shell type-check exit 0 at 205c4531 (after pnpm install for main pinyin-pro). PR-body gates with PR_BODY set: check-changeset-no-major 0, check-adr-0087-registration 0, check-closing-keyword-parity 0, check-empty-changeset 0, check-partof-closing-keyword 0. eslint touched files 0 errors. CI check-runs: seat reads them after open.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "818+ / 45- over 13 files (git diff --shortstat origin/main...HEAD at 205c4531)",
      "files_changed": [
        ".changeset/29693-studio-item-header-readable-name.md",
        "ui/packages/app-shell/src/views/item-tools/StudioItemTools.tsx",
        "ui/packages/app-shell/src/views/studio-design/CustomizationMark.tsx",
        "ui/packages/app-shell/src/views/studio-design/FlowItemMoreMenu.tsx",
        "ui/packages/app-shell/src/views/studio-design/FlowLedgerSwitch.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioCustomizeControls.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.itemTools-28239.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.oneSurface-28572.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioItemHeader.titleRowFold-12897.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioRailCustomizations.tsx",
        "ui/packages/app-shell/src/views/studio-design/studio-tokens.ts"
      ],
      "deviations": [
        "Surface widened to StudioCustomizeControls.tsx, FlowLedgerSwitch.tsx, StudioItemTools.tsx, FlowItemMoreMenu.tsx under seat amendment record 6593712299 (asked before editing).",
        "Data object header did not need to fold at 1024 px with the field panel open: Account (Success Overlay) shows 13 characters; foldMenu is wired and pinned by tests, live fold not observed there.",
        "Access set header gets no foldMenu: no chips or tools to fold; name whole before and after.",
        "Before/after screenshots and raw readings are in project files (issue-29693/shots), not posted to GitHub.",
        "Merged main twice (eaea6c68, 205c4531); #29690 field-name helpers landed on main, untouched here."
      ],
      "mcp_calls": "2 — mcp__github__issue_read (get_comments) x2; no write tool",
      "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (fleet-write pr_create → #29765, read-back identical, no assignees); POST /repos/objectstack-ai/objectstack/issues/29693/comments (this report, post-stamped)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    席位核对 · Amendment · 2026-11-03T03:54Z · one live spec for #29693

    Adds ui/e2e/live/studio-customize-journey.spec.ts to the surface of amendment 6593712299.

    Why. Live E2E UI went red on 205c4531 (job 125715096807). The spec asserts at L137 that studio-override-chip is visible in the header row after the pair is published. At the job's 1280×720 viewport, with the Interfaces inspector open, the row now folds stage 1 and the chip moves into the ⋯ menu's studio-item-header-folded-chips entry. That is the behaviour the card asks for.

    What the edit may do. At that one assertion, accept the chip in either place:

    • If the chip is in the row, the assertion stays as it is.
    • Otherwise, open if-item-more and expect studio-override-chip to be visible inside studio-item-header-folded-chips.
    • Then close the menu, so the next step opens a fresh one.

    The invariant stays the same: after publish, the override chip is reachable from the header. Nothing else in the spec changes, and no assertion is removed or loosened beyond that one either-or.

    Condition. Run the spec locally against the showcase backend before you push, and put the run's result in the PR body. Keeping the chip pinned in the row was weighed and rejected, because it costs the title the room the card asks for.


    Generated by Claude Code

  8. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    席位核对 · ACCEPT → PR #29765 comment 6595861469 · 2026-11-03T05:00Z · at b0949a59. It lands through the merge queue; Fixes #29693 closes this card on merge.


    Generated by Claude Code

  9. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Landed · 2026-11-03T05:49Z · PR #29765 merged through the merge queue as 97c2982c. Record: ACCEPT 6595861469 at b0949a59 (Clause-②: no, no contract review owed, 0 governed paths).

    probe before (97c2982c~1) now (origin/main)
    foldMenu?: 'pillar' | { label: string; testId?: string }; in ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx (a header that can fold its chips and tools into its ⋯ menu) 0 1
    data-testid="studio-item-header-folded-chips" in the same file (the folded identity chips, one menu entry) 0 1

    The card closed through Fixes. pm:dispatched comes off with this note. Serial follow-ons, both on main from here: #29692 (seat 4) hangs the Restore popover on the override chip, folded or not, and #29691 PR 2 (seat 1) adds the header's note slot under the title row. A Studio item name cut below 12 characters at about 1024 px with the right panel open is a new reading against this fix: file it with the pillar, the name and the width, not a revert.


    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:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions