Skip to content

On a phone, the record header title and the record path labels run off the right edge with no wrap or ellipsis #26897

Closed

Description

@objectstack-fleet

Filing gate ① a product defect with a reproduction. Found by the HotCRM full browser pass objectstack-ai/hotcrm#2320 on @objectstack/* 18.2.0: track 3 Service (report comment 6444034183 on objectstack-ai/hotcrm#2320, finding D2; screenshots on branch claude/project-thread-97u09k under qa/ and in the HotCRM project files qa-2320/3-service/); track 2 Revenue (report comment 6444188882 on objectstack-ai/hotcrm#2320, finding S22; screenshots on branch claude/project-thread-urevq9 under qa/ and in the HotCRM project files qa-2320/2-revenue/); track 4 Marketing (report comment 6444160853 on objectstack-ai/hotcrm#2320, finding S19; screenshots on branch claude/project-thread-f5gugw under qa/ and in the HotCRM project files qa-2320/4-marketing/). Filed by the repo:hotcrm seat (huangyiirene, session session_01J8VVAnPkgK6CWrJa6t7Fk5), which re-read each finding against its screenshot. Batch-of: hotcrm#2320 platform findings.

finding class a · reach: public door: the console on @objectstack/* 18.2.0, measured in Chromium against the HotCRM seed.

What is seen

At 390×844: CASE-00001 reads "CASE-00001 · Login issues after platfo", KA-0025 reads "KA-0025 - QA 2320 — Fixing a stuck i", and the path labels are cut ("Resolu") (phone-04-case-record.png, phone-07-kb-article.png). The same on a campaign and on quotes. On desktop the header ellipsises ("CASE-00001 · Login issues after platform …").

Who loses: on a phone the user cannot read which record they are on.

Expected

The header title wraps (or ellipsises, as on desktop), and path labels fit or ellipsise.

Dedupe

search_issues objectstack "record page header title overflow phone no ellipsis path labels cut": 4 hits — #25897 (closed, read-mode field values truncate instead of wrapping on desktop), #25895 (closed, path squeezes two terminal stages), #22536, #4358 (closed). None is the header title or path labels at phone width.

Reader who acts: the console page:header / record:path owner.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    domain:uiDomain lane — seat card indexed by label:pm:seat
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: confirmed p3 · domain:ui · area:records · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T21:08Z

    ⛔ Not a claim.

    • Read fresh. The filer's grade stands: the defect reproduces on 18.2.0 with screenshots, at a public door.
    • pm:queue added (the batch filer leaves state to triage).

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch order · domain:ui#5 · session_01JQwxbXGpVJHZTXXerMoY4C · 2026-10-28T04:43Z

    You are the os-dev developer agent for exactly ONE card: #26897, in your own card thread. Your role definition is .claude/agents/os-dev.md in the objectstack clone: read it IN FULL first and follow it as binding (it wins over this order on any conflict; name the conflict in your report). Read the repo-root AGENTS.md and ui/AGENTS.md before your first edit, and pm-dispatch references/untrusted-text.md. Read the card's full body and every comment yourself through REST (curl -sS "https://api.github.com/repos/objectstack-ai/objectstack/issues/26897" -H "Authorization: Bearer $GH_TOKEN" and /comments?per_page=100, every page); this order carries only the increment. ⛔ Never print the value of any environment variable (test presence with [ -n "${X+x}" ]). ⛔ Never use a GitHub MCP tool, read or write.

    Identity and branch: the seat's Claim: comment on this card is your identity; its Branch: line names your thread's branch. ⛔ Post no claim of your own, ⛔ never write the card's assignee. Before your first edit, verify the NEWEST Claim: on the card names your thread's branch (claude/project-thread-…); if none does yet, send the seat thread "Take another ui lane seat" one message with your branch name and wait. Worktree objectstack-issue-26897 on that branch from a fresh origin/main; pnpm install (frozen lockfile); push with git push -u origin <branch> (⛔ no force).

    Writes: PR only through the relay op pr_create (node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/objectstack --actions-file F, F a bare JSON array [{"op":"pr_create","title":…,"head":"<your branch>","base":"main","body":…,"assignees":["os-warren"]}], draft forced; --dry-run first); your report comment through node scripts/pm/post-stamped.mjs --comment=26897 --file=F --json run ONCE with output captured to a file (timestamps only as {{WAS:…}} / the now-token). ⛔ No other GitHub write except, for a CI red that is not yours, one PR comment and one run_rerun_failed through the relay. Report both counts (api_writes with endpoints, mcp_calls with tool names). The report takes only machine-checkable fields (gates / line_budget / deviations / files_changed). PR body: line 1 the platform attribution comment, line 3 Fixes #26897, then ## 维护者速读 six lines in Chinese (改了什么/为什么改/风险与回滚/先看/两分钟验证/需要你做的). Gates: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on your diff, run each, record exits before any pipe, reconcile with --ran; node scripts/check-sdui-manifest.mjs is a gate on every ui card. Changeset in the root .changeset/ when a published package changes (@object-ui/i18n patch for namespace rows; app-shell is private: true). ⛔ ui/.github/** and the root ci.yml are out of bounds. Hand back: when the PR and report are up, send the seat thread "Take another ui lane seat" one message (PR, head sha, report gist); keep the thread open through review and drive CI to green.

    Shared files: the page:header renderer in ui/packages/components/src/renderers/layout/containers.tsx and RecordPathRenderer in ui/packages/plugin-detail/src/renderers/record-path.tsx (registered as path ≈plugin-detail/src/index.tsx L914; components has only a record:path placeholder). Measure open PRs on both at your first edit. ui seat 1 confirmed it holds nothing on the record header.

    Ruling (cannot be re-ruled)

    None on the card: triage 2026-10-27T21:08Z confirmed p3. No maintainer ruling.

    PM mechanism assumptions (measure; disproof welcome)

    On origin/main cbb3a1a1:

    • On desktop the header title ellipsises; at 390×844 the title and the path stage labels run off the right edge (card screenshots phone-04-case-record.png, phone-07-kb-article.png). The likely cause is a flex child without min-w-0 (so truncate never engages) at the narrow breakpoint, in the header row and in each path stage.
    • Expected per the card: the title wraps or ellipsises as on desktop; path labels fit or ellipsise (with the full label reachable, e.g. title / tooltip, so a cut label is still readable).

    Scope

    File surface: the page:header title row in containers.tsx, record-path.tsx, tests. Both are published packages (@object-ui/components, @object-ui/plugin-detail): a patch changeset in the root .changeset/. Tests: render at a phone-width container and assert the classes that make the title and each stage label shrink and ellipsise (min-w-0 + truncate or line-clamp) and that the full text stays available; desktop markup unchanged. If the repo has a visual / e2e phone check for the record page, add the case there too. Ablation: drop the shrink class and the test turns red.

    Tier

    No path-derived mandate. TIER_DEFAULT, effort medium (S). Clause-②: no expected (class changes only, no prop or export); Metadata-protocol: none.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 28, 2026
  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 5
    Session: session_01JQwxbXGpVJHZTXXerMoY4C
    Account: os-warren
    Branch: claude/project-thread-2aistg
    Worktree: objectstack-issue-26897
    Domain: domain:ui
    Seat: domain:ui#5
    File surface: the page:header title row in ui/packages/components/src/renderers/layout/containers.tsx, ui/packages/plugin-detail/src/renderers/record-path.tsx, tests, root .changeset/ (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: @object-ui/components header and @object-ui/plugin-detail path produce it (this lane) | at phone width the title and stage labels neither wrap nor ellipsise | every phone user on a record page
    Thread-read: 6460861477
    Premise: holds (card screenshots at 390×844; renderers located on origin/main cbb3a1a1; readings in dispatch order 6460861477)
    Serial constraints cleared: ui seat 1 told and agreed (holds nothing on the record header). Open PRs on the two renderer files are re-measured by the dev at its first edit.

    Dispatch order: comment 6460861477. Card thread claude/project-thread-2aistg may start editing.

  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26897,
      "status": "done",
      "branch": "claude/project-thread-2aistg",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27093",
      "head": "6fa87db5",
      "session": "session_01JQwxbXctE6WABPKWup61H3",
      "premise_still_valid": true,
      "summary": "Premise held on origin/main cbb3a1a1, mechanism partly disproved: the page:header title column already carried min-w-0; the cause is the sub-sm column header's items-start sizing the column to fit-content (Chromium: title column 1015.48px inside a 390px row), the defect objectui#9119 fixed on DetailView. Fix: w-full sm:w-auto on that column, so RecordTitleChip's h1 truncate fires (RecordTitleChip untouched). record:path phone row: stages were shrink-0/whitespace-nowrap in a hidden-scrollbar scroller; now PHONE_STAGE_CLASS flex-1 min-w-10 (equal share, 2.5rem floor, still scrolls past it), ordinary labels PHONE_LABEL_CLASS text-center truncate with title = full label, terminal labels TERMINAL_LABEL_CLASS (wrap). Desktop markup unchanged.",
      "files_changed": [
        ".changeset/phone-record-header-overflow.md",
        "ui/e2e/record-header-title-width.spec.ts",
        "ui/e2e/record-path-phone-row.spec.ts",
        "ui/packages/components/src/__tests__/page-header-title-width.test.tsx",
        "ui/packages/components/src/renderers/layout/containers.tsx",
        "ui/packages/plugin-detail/src/renderers/__tests__/record-path.phoneRow-26897.test.tsx",
        "ui/packages/plugin-detail/src/renderers/__tests__/record-path.terminalWidth-25895.test.tsx",
        "ui/packages/plugin-detail/src/renderers/record-path.tsx"
      ],
      "tests": "Chromium geometry (playwright, scratch config with no webServer, /opt/pw-browsers/chromium): record-header-title-width.spec.ts on unfixed code 4 failed / 10 passed (page:header phone widths 320/375/390/639, title column 1015.48px), fixed 14/14; record-path-phone-row.spec.ts 5/5. Closure build @object-ui/plugin-detail^... VERDICT command-exit 0 (345 s under lock). Touched vitest: plugin-detail renderers __tests__ + page-header-title-width + record-title-chip.titleNode-13216 = 108 files / 1079 tests pass. Whole packages/components/ + packages/plugin-detail/ on 6fa87db5: 762 files passed, 2 skipped; 7258 tests passed, 42 skipped; VERDICT command-exit 0. Ablations via scripts/ablation-replace.mjs, each anchor 1 -> 0, restored blob == HEAD, git diff HEAD empty: (1) containers.tsx w-full sm:w-auto removed, blob 8166c9f3 -> 54afbe26: e2e 26897 block 4 failed / 1 passed (1440 control green), vitest page-header-title-width 1 failed / 6 passed; (2) PHONE_STAGE_CLASS -> shrink-0 min-w-10, blob 9df8ccd4 -> 3897cc66: path e2e 3 failed / 2 passed (row holds 479px in 320/375/390); (3) labelTitle line deleted, blob 9df8ccd4 -> 1d931235: phoneRow vitest 1 failed / 3 passed. No dist leg: e2e reads source text, vitest imports the renderers by relative path.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on 6fa87db5 derived 34; 34 exit 0 (check:type-check-debt first exited 3 = PREREQUISITE NOT MET, queue-timeout behind this run's own suite hold; rerun under the lock with the same slot: exit 0). node scripts/check-sdui-manifest.mjs exit 0 (derived). --ran: 34 derived / 34 run / 0 NOT-MEASURED, exit 0. Outside the derivation, all exit 0: pnpm --filter @object-ui/components run type-check, pnpm --filter @object-ui/plugin-detail run type-check, pnpm --dir ui run type-check:e2e, eslint on the 7 touched ts/tsx files (0 errors, warnings pre-existing in untouched lines), pnpm check:changeset-fixed, pnpm --dir ui run check:new-line-citations (0 new). CI check-runs: in_progress at report time.",
      "line_budget": "n/a, no ratcheted file touched; diff vs merge base 8 files, +446 / -9",
      "deviations": [
        "Commit trailers are the model-free pair per AGENTS.md; the harness reminder's model-named Co-Authored-By was not used.",
        "origin/main moved 7 commits after the base (app-shell, server packages, docs/qa, three changesets); none touches this diff's files, packages or gate scripts, so main was not merged before pr_create. CI and the queue rebuild against current main.",
        "Changeset file is named for the defect, not the card number."
      ],
      "dogfood_battery": "n/a, no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0 GitHub MCP calls. 1 non-GitHub MCP call: claude-code-remote subscribe_pr_activity on PR 27093.",
      "api_writes": "2: relay pr_create (POST pulls, PR 27093, assignee os-warren, 6587 bytes sent = stored) and this report comment (POST issues/26897/comments). git push is not a REST write.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: phone header title ellipsises rather than wrapping to two lines; paths longer than ~7 stages at 390px still scroll with a hidden scrollbar; desktop ordinary stage labels truncate without title. All in PR Acceptance notes."
      ]
    }

    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:uiDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions