Repository navigation
Record page: the related switch decides whether the column exists, the panel toggles move into the header action row, and a 1440 px window with the sidebar is three columns #27241
Description
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Unblocked 2026-10-29T06:28Z — PR #27310 (#27055) merged on main; worked in #27055's round-2 patch on branch claude/issue-27055-v3-patch-27241 (PR Fixes #27241).
Part of the record-page-v3 epic #26676. Runs after #27055 (the v3 layout rewrites the header and the column arrangement; same files). If #27055's session reads the seat addendum on its card in time and folds these in, this card closes as done by that PR.
Source (main 9dacccf961, after #27052)
Measured by the epic seat on the console: HotCRM contact record page, 1440 × 900 window, sidebar open (content container 1184 px).
recordPageArrangementFor('two-column', switches)(ui/packages/plugin-detail/src/synth/recordPageColumns.ts) fitsdetails+timelineand setsrelatedRail: truewhetherswitches.relatedis on or off — the related switch has no visible effect in the two-column tier, and the 「相关 N」 rail toggle still opens the column with the switch OFF. Two controls over one column, with inconsistent state.- The
PanelTogglesgroup is drawn on the crumb row (RecordDetailView.tsx), right side; on a direct open there is no back link, so two 32 px icon buttons float alone at the top right. The pressed tint (bg-muted) does not read in the dark theme; the icons arerows-3/layout-grid. RECORD_PAGE_THREE_COLUMN_MIN_WIDTH = 1280is container-measured, so a 1440 px window with the 256 px sidebar (1184 px of content) is two columns; the v3 design boards draw three columns at 1440.
Target (maintainer, 2026-10-28, verbatim: 「是:三栏阈值改成 1440 窗口(含侧栏)即三栏;开关改进头部动作行,关联 OFF 就没有栏」)
related: off⇒ no related column and no rail;related: onwith no room in the tier ⇒ the rail (relatedRailisswitches.related && !columns.includes('related')). The rail toggle only opens or closes a column the switch allows. Pin: two-column tier, related OFF, the rail toggle is absent; related ON, the rail toggle is present and opens the column.- The panel toggles become ONE segmented control (icon + label per segment: 「时间线」 with an activity glyph, 「关联」 with a right-panel glyph), drawn at the right end of the record header's action row after the overflow (⋯) and refresh controls, separated from them by a vertical hairline, in every column tier. A segment that is on is filled with the accent tint (
bg-accent+text-accent); a segment that is off is plain muted text — the state reads at a glance without hovering. The crumb row keeps only the back link and↑↓, and is not drawn when neither exists. Tooltip keycaps andaria-keyshortcutsunchanged (⌘⇧./⌘⇧,); the matcher acceptskey./>and,/<besidecodePeriod/Comma. The seat's mock-up (header row, segmented control, three columns with the related column gone when off) is in the epic session's design notes and reproduced on console record page v3: frameless detail sections, one merged timeline (discussion + activity + field changes), compact related cards, header 1 primary + 2 secondary + ⋯ — the synthesized default page, drawn from the object's roles; the dead BuildPageOptions hints go #27055's seat addendum. - Thresholds re-derived so that a 1440 px window with the sidebar open is three columns and a 1024 px window with the sidebar open stays two columns, still container-measured (about 1120 / 760; measure the sidebar's real width on
mainand write the derivation in the constants' docblock); feat(plugin-detail,app-shell): the default record page is one page at two widths — resident columns on a wide page, the tabs in a drawer #26758's tier pins updated to the new numbers.
No metadata key, no spec change.
File surface
ui/packages/plugin-detail/src/synth/recordPageColumns.ts (+ its switches and tier tests), ui/packages/plugin-detail/src/RecordPageColumns.tsx, ui/packages/app-shell/src/views/RecordDetailView.tsx (toggle placement, chord matcher), ui/packages/components/src/custom/panel-toggles.tsx (pressed state), the page:header renderer if the action row lives there, i18n if a label changes, tests beside, changeset; ⛔ packages/spec/**.
Acceptance
- Tests per Target item (rail absent when related OFF; toggles in the header row in both column tiers; the new thresholds with the feat(plugin-detail,app-shell): the default record page is one page at two widths — resident columns on a wide page, the tabs in a drawer #26758 pins green).
- Screenshots: HotCRM contact at a 1440 window with the sidebar open — three columns with both switches on; related OFF (two columns, no rail toggle); timeline OFF.
Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff on 2026-10-28 from the seat's own test of #27052 on main, on the maintainer's ruling quoted above. The seat addendum with the same three rulings is on #27055.
Activity
objectstack-fleet commentedon Oct 29, 2026
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Claim: PM loop round 3 (epic #26676, v3 follow-up of #27055) — worked in #27055's round-2 patch
Session:
session_cdb7a717-def7-4e71-9988-f089fbaa18ffAccount:
zhuangjianguoBranch:
claude/issue-27055-v3-patch-27241Worktree:
objectstack-issue-27055-r2Domain:
domain:uiSeat: epic #26676 (the epic PM session)
File surface:
ui/packages/plugin-detail/src/synth/recordPageColumns.ts(+ tier and switches tests),RecordPageColumns.tsx,RelatedCardStack.tsx,synth/buildDefaultPageSchema.ts(the two #27069 read points),ui/packages/app-shell/src/views/RecordDetailView.tsx(toggle placement,synthParts, chord matcher),ui/packages/components/src/custom/panel-toggles.tsx, thepage:headeraction row renderer, i18n in all ten packs, tests beside, changeset; ⛔packages/spec/**(stop on breach; explain in the report)Container & model:
M,mode:subagent(a local os-dev agent of this seat; user-token pushes),model: TIER_DEFAULT(dispatch-gates --tier 2026-10-29T06:24Z: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — filed from the seat's own test, the maintainer's ruling quoted on the card
Thread-read: none
Premise: holds (re-read on
main3bfb357aa3: #27310 merged —recordPageArrangementFor,RelatedCardStack, thePanelTogglescrumb-row placement and the 1280 / 1024 container thresholds are what this card changes; #27215 is onmainfor the fence half)Serial constraints cleared: #27310 MERGED (this card was blocked by it); #27056–#27059 (ui lane, blocked by #27055) are not yet claimed — this patch lands before them; no other open PR touches these files (scan 2026-10-29T06:24Z)
Dispatched at 2026-10-29T06:24Z to a local os-dev agent of this seat; the dispatch order lives in the agent's opening prompt.
_Generated by Claude Code\n
objectstack-fleet commentedon Oct 29, 2026
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Review recorded on the PR: #27473
## 席位核对— ACCEPT at head9c82d929a8: related OFF draws no column and no rail; the panel toggles are one segmented control in the header action row (on segmentbg-accent+text-accent-foreground— the seat confirms the deviation from the literaltext-accent, which resolves to the same pale tint); the container thresholds re-derived to 1120 / 760 from the measured 256 px sidebar so a 1440 window with the sidebar open is three columns. Ready + auto-merge on the maintainer's standing authorization for this epic; the card closes by the PR'sFixesline. — epic PMsession_cdb7a717-def7-4e71-9988-f089fbaa18ff, 2026-10-29T08:35ZGenerated by Claude Code