You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Record edit mode: the highlight strip expands to six narrow columns — a lookup shows one letter of the owner while the reader edits #28913
Filed by the record-page epic seat from a second console review under epic #26676. An independent reviewer walked the console on mainbdb19ca6d9, with examples/app-crm as the backend, at 1440 and 390 px. The seat then re-read the evidence. The maintainer approved the seat's checked list: 「Fable 评估(核对后) 同意立卡」 (2026-11-02). Code readings below are on main5e1b9b0a77. No domain:* label is set: triage routes this card.
Observed
Double-click a field on a lead, in the maximized pane at 1440 px. The whole record goes into edit mode. The strip grows from the fields that have a value to all six, including empty ones, in six columns. The owner lookup shows only 「D」, and the phone and email inputs are squeezed.
line 109: editing ? fields : fields.filter(hasValue), so edit mode draws every strip field, which it needs in order to fill an empty one;
line 127: @3xl:grid-cols-6, which puts all six in one row.
#28868 removes the derived strip, but a declared strip can still hold six fields, so this stays reachable. The two cards touch the same component: run them one after the other.
Target
The strip's edit face caps at a column count where a lookup and its buttons keep a usable width. The fields wrap to a second row. The seat suggests 3 or 4 columns, and the claiming seat measures and names the number in the PR.
Edit mode still draws empty strip fields, since they must stay fillable.
The read face is unchanged.
No new key and no new option. Whether a double-click should edit the whole record is not part of this card.
Acceptance
With six declared strip fields in the maximized pane at 1440 px and in the pane at 720 px, every lookup shows the full chosen name, or truncates with the name available on hover, and its buttons do not overlap the value.
Claim: PM loop round 10 · 2026-11-02T05:20Z
Session: session_01QsR2jU1A8SyDJ4Lxe7A9Kd (card thread, os-dev); dispatched by seat session session_01QsR2jR7ZFkpqmm4U8S1f9y
Account: zhuangjianguo
Branch: claude/project-thread-87mrud (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-28913
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/packages/plugin-detail/src/HeaderHighlight.tsx (the edit face's grid columns), its tests, and a changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: default
Clause-②: no
Metadata-protocol: none
Responsibility: in record edit mode the highlight strip draws six narrow columns, so a lookup shows one letter of the owner while the reader edits | the strip already wraps its read face at the container widths | every user who edits a record whose object declares five or six highlight fields
Thread-read: 6569579470
Premise: holds (at origin/main8bb2417a, HeaderHighlight.tsx:109 draws every field while editing and the grid face is @3xl:grid-cols-6)
Serial constraints cleared: #28868 landed as 8bb2417a; none in flight on this file
{
"issue": 28913,
"status": "done",
"branch": "claude/project-thread-87mrud",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29055",
"session": "session_01QsR2jU1A8SyDJ4Lxe7A9Kd",
"premise_still_valid": true,
"summary": "On the default record page the highlight strip's grid adds @3xl:grid-cols-6 only while reading; while editing it stops at three columns, so six fields edit in two rows of three and empty fields still draw. Measured in the real Console (app-crm, six strip fields declared locally on a lead, not committed): in the maximized pane at 1440 px (1088 px strip) main gave 168 px cells and cut the account lookup to 10 px ('I...') and assigned_to to 52 px; cap 4 gives 260 px cells and about 102 px of name room, which cuts a 23-letter account name (149 px); cap 3 gives 352 px cells and about 194 px of room and shows it whole, so the cap is 3. The pane at a 1440 px viewport (about 720 px wide, 623 px strip) is below @3xl and draws 3 columns on main, cap 4 and cap 3 alike. Save and cancel checked live: read 6, edit 3, cancel 6, save persisted and back to 6.",
"tests": "head 3e7948b2: pnpm --dir ui exec vitest run packages/plugin-detail/ (locked, maxWorkers 2) Test Files 363 passed, 1 skipped; Tests 3209 passed, 18 skipped. New file HeaderHighlight.editGridCap-28913.test.tsx 3/3. Ablation via scripts/ablation-replace.mjs: anchor \"!editing && '@3xl:grid-cols-6',\" replaced by \"(editing || true) && '@3xl:grid-cols-6',\" (anchor 1 -> 0, blob 0f0dee71 -> 348a2aef): 1 failed / 2 passed (the edit-face case); restore blob == HEAD, git diff HEAD empty. plugin-detail is src-aliased in ui vitest, so no dist leg. After merging main (head 4ea64784): the four strip files incl. main's RecordMetaFooter.drawnStrip-28909 re-ran 31/31.",
"gates": "node scripts/pm/dispatch-gates.mjs --ran: 34 derived, 34 run, 0 NOT-MEASURED, all exit 0 (incl. check-sdui-manifest and --self-test, ui vitest run scripts/ 169 files passed 2 skipped, check:type-check-debt locked). PR-body gates on the final body: check-changeset-no-major, check-closing-keyword-parity, check-adr-0087-registration, check-empty-changeset, check-partof-closing-keyword all exit 0. pnpm --filter @object-ui/plugin-detail run type-check exit 0; eslint --no-inline-config on both changed files exit 0; ui check:new-line-citations 0 new. CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"line_budget": "3 files, +103 -1 = 104 changed lines (source 10, test 84, changeset 10); far under 3000",
"files_changed": [
".changeset/28913-edit-strip-column-cap.md",
"ui/packages/plugin-detail/src/HeaderHighlight.tsx",
"ui/packages/plugin-detail/src/__tests__/HeaderHighlight.editGridCap-28913.test.tsx"
],
"deviations": [
"720 px (pane) read as the record pane at a 1440 px viewport, which is about 720 px wide (623 px strip); a 720 px viewport was also measured: it is the phone layout, whose strip carries no account field, and assigned_to showed whole before and after.",
"Measured on the Vite console dev server (source-aliased) against an app-crm --fresh backend rather than a console:build; before = origin/main's HeaderHighlight.tsx written into the tree, restored from HEAD (git diff HEAD empty).",
"For the long-name reading the seeded account was renamed 'Initech Global Holdings' in the throwaway --fresh database, then renamed back for the final shots; assigned_to was set to the dev admin in that database (the seed leaves user fields unset). The local highlightFields declaration on crm_lead was reverted (git status clean).",
"A first commit capped at 4 (5ceb9c1f); the measurement moved it to 3 in 3e7948b2. Both are on the branch."
],
"mcp_calls": "2: mcp__github__issue_read get and get_comments on #28913 (reads only; no GitHub MCP write)",
"api_writes": "2 relay strokes: pr_create (repository_dispatch, run 41400248111, PR #29055, read-back identical) and this os-dev-report comment via post-stamped; plus 3 git pushes (not REST)",
"open_questions": [],
"out_of_scope_findings": [
"class: a (truncation) . reach: Console record pane at a 1440 px viewport, edit mode, app-crm lead with account in the strip: the account picker shows 'Init...' (39 of 43 px) in a 197 px cell beside its clear and browse buttons; same on main, cap 4 and cap 3 (the 623 px strip is below @3xl, 3 columns). Meets this card's acceptance via the span title, so not fixed here; a wider cell would need 2 edit columns below @3xl or slimmer lookup chrome (about 66 px of trigger chrome plus two 36 px buttons). Evidence: /mnt/project-files/issue-28913/after-pane-1440.png, m-after.json. dedupe words: highlight strip edit pane lookup truncated, record pane lookup picker width, HeaderHighlight edit columns pane"
]
}
ACCEPT · 2026-11-02T06:44Z · PR #29055 at 4ea64784, record 6570899885. Ordinary queue landing follows. The screenshots are held in the project folder, not on GitHub.
Landed · 2026-11-02T08:09Z · PR #29055 merged through the merge queue as 6ada509d. Record: ACCEPT 6570899885 at 4ea64784 (Clause-②: no, no contract review owed).
probe
before (6ada509d~1)
now (origin/main)
!editing && '@3xl:grid-cols-6' in ui/packages/plugin-detail/src/HeaderHighlight.tsx
0
1
The card closed through Fixes. pm:dispatched comes off with this note.
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: priority:p2 · domain:ui · pm:queue · 2026-11-02T05:09Z
⛔ Not a claim.
@3xl:grid-cols-6(line 127). Six declared fields then squeeze a lookup to one letter while the reader edits, so this is a user-visible editing defect, not only a cosmetic one, at p2 indomain:ui. No key is added and the target is concrete, so it goes topm:queue. It runs serially with Default record page: no derived highlight strip (declared highlightFields only); the stage field leaves the body when the path draws it; the owner appears once, under one word #28868, which touches the same component.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Claim: PM loop round 10 · 2026-11-02T05:20Z
Session:
session_01QsR2jU1A8SyDJ4Lxe7A9Kd(card thread, os-dev); dispatched by seat sessionsession_01QsR2jR7ZFkpqmm4U8S1f9yAccount:
zhuangjianguoBranch:
claude/project-thread-87mrud(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-28913Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/packages/plugin-detail/src/HeaderHighlight.tsx(the edit face's grid columns), its tests, and a changeset (stop on breach; explain in the report)Container & model: S,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: defaultClause-②: no
Metadata-protocol: none
Responsibility:
in record edit mode the highlight strip draws six narrow columns, so a lookup shows one letter of the owner while the reader edits | the strip already wraps its read face at the container widths | every user who edits a record whose object declares five or six highlight fieldsThread-read: 6569579470
Premise: holds (at
origin/main8bb2417a,HeaderHighlight.tsx:109draws every field while editing and the grid face is@3xl:grid-cols-6)Serial constraints cleared: #28868 landed as
8bb2417a; none in flight on this fileGenerated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jU1A8SyDJ4Lxe7A9Kd
os-dev-report
{ "issue": 28913, "status": "done", "branch": "claude/project-thread-87mrud", "pr": "https://github.com/objectstack-ai/objectstack/pull/29055", "session": "session_01QsR2jU1A8SyDJ4Lxe7A9Kd", "premise_still_valid": true, "summary": "On the default record page the highlight strip's grid adds @3xl:grid-cols-6 only while reading; while editing it stops at three columns, so six fields edit in two rows of three and empty fields still draw. Measured in the real Console (app-crm, six strip fields declared locally on a lead, not committed): in the maximized pane at 1440 px (1088 px strip) main gave 168 px cells and cut the account lookup to 10 px ('I...') and assigned_to to 52 px; cap 4 gives 260 px cells and about 102 px of name room, which cuts a 23-letter account name (149 px); cap 3 gives 352 px cells and about 194 px of room and shows it whole, so the cap is 3. The pane at a 1440 px viewport (about 720 px wide, 623 px strip) is below @3xl and draws 3 columns on main, cap 4 and cap 3 alike. Save and cancel checked live: read 6, edit 3, cancel 6, save persisted and back to 6.", "tests": "head 3e7948b2: pnpm --dir ui exec vitest run packages/plugin-detail/ (locked, maxWorkers 2) Test Files 363 passed, 1 skipped; Tests 3209 passed, 18 skipped. New file HeaderHighlight.editGridCap-28913.test.tsx 3/3. Ablation via scripts/ablation-replace.mjs: anchor \"!editing && '@3xl:grid-cols-6',\" replaced by \"(editing || true) && '@3xl:grid-cols-6',\" (anchor 1 -> 0, blob 0f0dee71 -> 348a2aef): 1 failed / 2 passed (the edit-face case); restore blob == HEAD, git diff HEAD empty. plugin-detail is src-aliased in ui vitest, so no dist leg. After merging main (head 4ea64784): the four strip files incl. main's RecordMetaFooter.drawnStrip-28909 re-ran 31/31.", "gates": "node scripts/pm/dispatch-gates.mjs --ran: 34 derived, 34 run, 0 NOT-MEASURED, all exit 0 (incl. check-sdui-manifest and --self-test, ui vitest run scripts/ 169 files passed 2 skipped, check:type-check-debt locked). PR-body gates on the final body: check-changeset-no-major, check-closing-keyword-parity, check-adr-0087-registration, check-empty-changeset, check-partof-closing-keyword all exit 0. pnpm --filter @object-ui/plugin-detail run type-check exit 0; eslint --no-inline-config on both changed files exit 0; ui check:new-line-citations 0 new. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "line_budget": "3 files, +103 -1 = 104 changed lines (source 10, test 84, changeset 10); far under 3000", "files_changed": [ ".changeset/28913-edit-strip-column-cap.md", "ui/packages/plugin-detail/src/HeaderHighlight.tsx", "ui/packages/plugin-detail/src/__tests__/HeaderHighlight.editGridCap-28913.test.tsx" ], "deviations": [ "720 px (pane) read as the record pane at a 1440 px viewport, which is about 720 px wide (623 px strip); a 720 px viewport was also measured: it is the phone layout, whose strip carries no account field, and assigned_to showed whole before and after.", "Measured on the Vite console dev server (source-aliased) against an app-crm --fresh backend rather than a console:build; before = origin/main's HeaderHighlight.tsx written into the tree, restored from HEAD (git diff HEAD empty).", "For the long-name reading the seeded account was renamed 'Initech Global Holdings' in the throwaway --fresh database, then renamed back for the final shots; assigned_to was set to the dev admin in that database (the seed leaves user fields unset). The local highlightFields declaration on crm_lead was reverted (git status clean).", "A first commit capped at 4 (5ceb9c1f); the measurement moved it to 3 in 3e7948b2. Both are on the branch." ], "mcp_calls": "2: mcp__github__issue_read get and get_comments on #28913 (reads only; no GitHub MCP write)", "api_writes": "2 relay strokes: pr_create (repository_dispatch, run 41400248111, PR #29055, read-back identical) and this os-dev-report comment via post-stamped; plus 3 git pushes (not REST)", "open_questions": [], "out_of_scope_findings": [ "class: a (truncation) . reach: Console record pane at a 1440 px viewport, edit mode, app-crm lead with account in the strip: the account picker shows 'Init...' (39 of 43 px) in a 197 px cell beside its clear and browse buttons; same on main, cap 4 and cap 3 (the 623 px strip is below @3xl, 3 columns). Meets this card's acceptance via the span title, so not fixed here; a wider cell would need 2 edit columns below @3xl or slimmer lookup chrome (about 66 px of trigger chrome plus two 36 px buttons). Evidence: /mnt/project-files/issue-28913/after-pane-1440.png, m-after.json. dedupe words: highlight strip edit pane lookup truncated, record pane lookup picker width, HeaderHighlight edit columns pane" ] }objectstack-fleet commentedon Nov 2, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
ACCEPT · 2026-11-02T06:44Z · PR #29055 at
4ea64784, record 6570899885. Ordinary queue landing follows. The screenshots are held in the project folder, not on GitHub.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Landed · 2026-11-02T08:09Z · PR #29055 merged through the merge queue as
6ada509d. Record: ACCEPT 6570899885 at4ea64784(Clause-②: no, no contract review owed).6ada509d~1)origin/main)!editing && '@3xl:grid-cols-6'inui/packages/plugin-detail/src/HeaderHighlight.tsxThe card closed through
Fixes.pm:dispatchedcomes off with this note.Generated by Claude Code