Repository navigation
epic: record page v2 — one default open mode per object (drawer by default, page by declaration; modal / split / popover retired as metadata); the drawer and the page are one page at two widths; related records open in place #26676
Description
Epic parent (pm-dispatch 〈Epic 子树车道〉): this card and its children are reserved for the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff; they carry pm:epic and never pm:queue, so no domain seat takes them. The spec child is claimed from this session on the maintainer's direct instruction (footer), which is the authority that overrides the "spec sub-issues go to the spec seat's queue" default.
Territory (files this subtree edits; other lanes avoid them while the children are open)
packages/spec/src/ui/view.zod.ts(NavigationModeSchema,NavigationConfigSchema),packages/spec/src/ui/page.zod.ts(recordAction),packages/spec/src/ui/page.form.ts(therecordActionoptions), plus the spec retirement kit files thespec-property-retirementskill names.ui/packages/react/src/hooks/useNavigationOverlay.ts;ui/packages/components/src/custom/navigation-overlay.tsx.ui/packages/app-shell/src/views/ObjectView.tsx,objectViewRecordNavigation.ts,objectViewRecordOverlay.tsx,RecordDetailView.tsx,RelatedRecordActionsBridge.tsx;ui/packages/app-shell/src/console/appObjectScope.ts.ui/packages/plugin-view/src/**(deriveRecordSurface),ui/packages/plugin-calendar,plugin-kanban,plugin-ganttnavigation reads.ui/packages/plugin-detail/src/synth/buildDefaultPageSchema.ts,DetailTabs.tsx,RelatedList.tsx.ui/packages/plugin-list/src/components/ViewSettingsPopover.tsx— only after Display menu: the layout row's five segments (表格 / 看板 / 日历 / 时间线 …) wrap their labels inside the 240 px popover; the row folds to icons with tooltips or the popover widens #26637 (in flight, domain:ui seat 4) lands.
Children (dispatch order; file surfaces that overlap run in series)
- spec(+ui):
navigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 — spec + its console consumers:navigation.modekeepspage | drawer | new_window | none,modal/split/popoverretired; the default isdrawerin the schema and in the console (the field-count guess goes); list-pagerecordActiondropsmodal; the console's split pane stays as a per-user preference read, not metadata. - console record page: one page at two widths — three resident columns (details | timeline | related) at 1280 px and up, two columns with a collapsible related rail from 1024 px, today's tabs below that and in the drawer #26678 — the record page is one page at two widths: three resident columns at 1280 px and up, two columns with a collapsible related rail from 1024 px, the tabs it has today below that and in the drawer. (parallel with 1: disjoint files)
- console record drawer v2: the bar is ↑ ↓ · ⤢ · ✕ (no object name, no counter); a related row or a lookup opens its record in place with a trail, ← / Esc go back one level; ⤢ carries the trail into the page; on the record page a related row opens a drawer over the page #26679 — drawer v2 navigation: the bar is ↑ ↓ · ⤢ · ✕; a related row or a lookup opens its record in place with a trail; ← / Esc go back one level; ⤢ carries the trail into the page; on the record page a related row opens a drawer over the page. (after 1)
- console list Display menu: 「打开记录」 (drawer | split) as a per-user preference; an object or view declaring
pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681 — the list Display menu gains 「打开记录」 (drawer | split) as a per-user preference; an object declaringpageshows the declaration instead; the name cell's hover ↗ opens the record as a full page. (after 1 and Display menu: the layout row's five segments (表格 / 看板 / 日历 / 时间线 …) wrap their labels inside the 240 px popover; the row folds to icons with tooltips or the popover widens #26637)
Not in this subtree, on purpose: the clickable stage path (#26612 / #26581 are in flight on that surface), inline field editing and the merged timeline (the record page already has an activity timeline and comments; nothing measured broken there). HotCRM needs no card: its views declare only page (lead) and drawer (opportunity, task, case), none of the retired modes (git grep "navigation: {" on HotCRM 1f3f8880).
Rulings (maintainer, 2026-10-27, chat in the filing session — verbatim, not re-decidable here)
- The model, quoted back by the maintainer and ordered built: 「1. 一个对象一个默认打开方式:默认抽屉(带展开整页),
page只给显式声明的对象,modal退役,split / popover 变成用户个人偏好;抽屉和整页是同一张页在两个宽度。」 - On the drawer's top bar: 「左上角的 任务 · 2 / 2 · 分屏 几个字有必要嘛」 — no object name, no mode label on the bar.
- On the position counter: 「我觉得记录详情页显示第几条记录 好像也没必要」 — no "n / N" anywhere on a record; the ↑ ↓ previous / next controls stay.
- On the right pane: 「右侧应该可以拖动吗?展开为整页那个是不是用图标就可以」 — the pane is drag-resizable and "open as full page" is an icon-only control with a tooltip.
- On related records, the maintainer confirmed the in-place model: 「所以关联记录是一层一层的往下点,然后可以一层一层的反悔吗」 — one level down per click, one level back per ← / Esc, never a second drawer.
Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff on 2026-10-27, from the record-page / list-page assessment and the clickable prototype the maintainer walked and ruled on in that session (objectstack main 416a76030e, HotCRM 1f3f8880 on platform 18.2.0). The maintainer's instruction to build it, verbatim: 「你直接立卡派发处理这个开发,然后审核。」 Design evidence (never merged): branch claude/record-page-v2-evidence-20261027b at commit 345ec777220843ce1fd7f95b6cc0b2b6dcc81bf8, folder docs/design/record-page-v2-2026-10-27/ (prototype.html, artboards/, assessment.md).
Activity
navigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681objectstack-fleet commentedon Oct 27, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 1 · 2026-10-27T12:53ZBatch 1 dispatched (two
os-devsubagents of this session,mode:subagenton the maintainer's machine, one build-heavy each, disjoint file surfaces):navigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 spec(+ui) navigation-mode retirement — claimed,claude/issue-26677-navigation-mode-retirement, contract review at CONTRACT_REVIEW_TIER owed before the queueclaude/issue-26678-record-page-two-widthsnavigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 (sharedobjectViewRecordNavigation.ts)pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681 Display 「打开记录」 preference — waits for spec(+ui):navigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 (preference util) and Display menu: the layout row's five segments (表格 / 看板 / 日历 / 时间线 …) wrap their labels inside the 240 px popover; the row folds to icons with tooltips or the popover widens #26637 (same popover)Design evidence: branch
claude/record-page-v2-evidence-20261027bat345ec777220843ce1fd7f95b6cc0b2b6dcc81bf8. Not filed on purpose: a HotCRM card (its views declare onlypage/drawer), the clickable stage path (#26612 / #26581 in flight), inline field edit and timeline merge (nothing measured broken).Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 1 collected · 2026-10-27T17:25Znavigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 → PR feat(spec,ui)!: a record opens one way per object — navigation.mode keeps drawer (the default), page, new_window and none; modal, split and popover are retired; the split pane becomes a reader preference #26804 ACCEPT (headeb20d22070, in-seat contract review PASS). Tier H:needs-user-decisionon the PR, final 维护者速读 posted, review requested fromos-zhuang/hotlong; lands through the queue after an APPROVED review.ecfa2c5574, CI all green, one patch round for a README snippet). Ordinary queue landing; ready + auto-merge are the next stroke (the seat's attempt was refused by the desktop session's permission classifier, so the maintainer flips it or grants the seat).objectViewRecordNavigation.ts,navigation-overlay.tsx).pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681 Display 「打开记录」 preference — dispatched after feat(spec,ui)!: a record opens one way per object — navigation.mode keeps drawer (the default), page, new_window and none; modal, split and popover are retired; the split pane becomes a reader preference #26804 merges (writes the preference util it ships); Display menu: the layout row's five segments (表格 / 看板 / 日历 / 时间线 …) wrap their labels inside the 240 px popover; the row folds to icons with tooltips or the popover widens #26637 closed via PR fix(plugin-list): fold the Display popover's layout segments to icons when they would not fit #26696, so the popover constraint is gone.Readings for the maintainer: PR #26758's three-column tier shows on this seat's preview (console on the PR head, HotCRM on 4001); the tier floors stay 1280 / 1024 of the record view (PM discretion A, override open). PR #26804's prescriptions name the Display-menu control #26681 builds (answer A: land #26681 before the 18.3.0 cut).
Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 2 dispatched · 2026-10-28T00:04Znavigation.modekeepspage | drawer | new_window | none—modal,splitandpopoverare retired; the default becomesdrawerin the schema and in the console (no field-count guess); list-pagerecordActiondropsmodal; the console's split pane becomes a per-user preference read #26677 → PR feat(spec,ui)!: a record opens one way per object — navigation.mode keeps drawer (the default), page, new_window and none; modal, split and popover are retired; the split pane becomes a reader preference #26804 MERGED 2026-10-27T23:43Z (Tier H: approved byos-zhuang, landed through the queue); card closed byFixes,pm:dispatchedcleared.pm:dispatchedcleared.7bb8084590(claude/issue-26679-drawer-in-place-navigation), premise corrections recorded on the card first.pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681 Display 「打开记录」 preference — claimed and dispatched in parallel (claude/issue-26681-display-record-open-preference), disjoint file surface; premise corrections recorded on the card first.Both batch-2 devs build on the merged #26804 (drawer-only overlay, read-side preference util) and #26758 (column tiers).
Generated by Claude Code
tabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054RecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059objectstack-fleet commentedon Oct 28, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 3 filed (record page v3) · 2026-10-28T03:28ZMaintainer approval of the v3 design and the definition-surface disposition, verbatim: 「同意,以上界面相关的需要我确认的你负责立卡派发,如果有可能可以启动云会话,开发完你来确认。」 and 「如果你不能派云会话,我可以让 ui 车道优先处理你的卡片,然后你负责确认和我沟通」. Split: the epic session keeps one card for a cloud-session trial; the rest go to the lanes' queues at
priority:p1, blocked ones carryBlocked-by:and unlock in order; the epic session confirms each landing against the design boards and reports to the maintainer.Round 2 (closing): #26681 → PR #27031 ACCEPT, queued; #26679 → PR #27038 REWORK (patch round after #27031: the list-root ↑ ↓ half, zh copy, pins).
Round 3 (record page v3):
pm:epic), cloud trialtabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 spec:tabsslot retired — spec lane queuerelatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 Studio controls (relatedList tri-state, block inspector, empty new page) — ui lane queueRecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057 quick-look path folded into the record page — ui lane, blocked by console record drawer v2: the bar is ↑ ↓ · ⤢ · ✕ (no object name, no counter); a related row or a lookup opens its record in place with a trail, ← / Esc go back one level; ⤢ carries the trail into the page; on the record page a related row opens a drawer over the page #26679 and 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 #27055kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059 skills / docs (Tier H) — ui lane, blocked by spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 and 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 #27055Design boards: canvas 「记录页 v3」 row (RecordPageV3, RecordPageV3NoTimeline, RecordPageRef, RecordDrawerV3, RecordMobile) — exported to
claude/record-page-v2-evidence-20261027b(commit named in the next comment once pushed).Generated by Claude Code
relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069objectstack-fleet commentedon Oct 28, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 3 update · 2026-10-28T04:13ZThree corrections to the round-3 comment above, each a reading taken on GitHub in this stroke:
claude/record-page-v2-evidence-20261027bat commit46f8161a3a4b4a9ec2aa04bdb72c40055dc68167, folderdocs/design/record-page-v2-2026-10-27/v3/beside the v2 prototype and assessment (never merged; referenced by SHA).relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 — spec,relatedLists: [...]on the object as the declared business order of its related lists,primaryre-read as body placement, and the field-group placement entry. It sits in the spec lane queue atpriority:p1. Studio: the object and field inspectors author what the v3 record page reads —relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054'srelatedListseditor and 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 body-table placement read it; both cards say so.relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 (claimed from the ui lane queue at 04:06Z, Claim comment on the card, cloud session requested at 04:08Z). console: one workspace-preference module (record open mode, drawer width, timeline / related column toggles) read per user × object, with a shared panel-toggle toolbar on the record page — defaults derived from the object, never metadata #27052 stays with the epic session and is claimed once PR feat(app-shell,plugin-list,plugin-grid,i18n): the Display menu's Open records section writes the reader's drawer | split preference; the name cell's ↗ opens the record as the full page #27031 is onmain: it editsrecordOpenPreference.ts, which feat(app-shell,plugin-list,plugin-grid,i18n): the Display menu's Open records section writes the reader's drawer | split preference; the name cell's ↗ opens the record as the full page #27031 rewrites, so the serial constraint holds it, not the lane.Round 2 state at this reading: PR #27031 is in the merge queue (position 2, MERGEABLE, behind #26999); PR #27038's patch round is on head
2baea3a5c7with CI running (22 in progress, 0 red), its report not yet filed.Round 3 (record page v3), corrected:
tabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 spec:tabsslot retired — spec lane queuerelatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 Studio controls — epic session, cloud trial (in flight)relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 spec:relatedListsorder +primaryas body placement — spec lane queueRecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057 quick-look path folded into the record page — ui lane, blocked by console record drawer v2: the bar is ↑ ↓ · ⤢ · ✕ (no object name, no counter); a related row or a lookup opens its record in place with a trail, ← / Esc go back one level; ⤢ carries the trail into the page; on the record page a related row opens a drawer over the page #26679 and 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 #27055kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059 skills / docs (Tier H) — ui lane, blocked by spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 and 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 #27055Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 2 closed, round 3 in flight · 2026-10-28T07:04ZRound 2 is on
main:pageshows the declaration instead; the name cell's hover ↗ opens the record as a full page #26681 → PR feat(app-shell,plugin-list,plugin-grid,i18n): the Display menu's Open records section writes the reader's drawer | split preference; the name cell's ↗ opens the record as the full page #27031 merged 2026-10-28T04:31Z (7414fc8e75): the list Display menu's 「打开记录」 Drawer | Split preference, the declared-pageline, the name cell's hover ↗.←/Escback one level), the bar↑↓·⤢·✕with no object name and no counter, list-root↑↓through the rows on show (ListView.onRowsChange),⤢carrying the trail into the page, 「收为抽屉」 back, the record page as a drawer host; plus thedata-tablerow-click fix inside dialogs the HotCRM run surfaced. Seat review: PR comment 6462413527.Round 3 (record page v3):
master_detail-parent default branch; browser-reserved chords)relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 — epic session, cloud session (same model note); branch ahead ofmain, PR pendingtabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 spec:tabsslot retired — spec lane queuerelatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 spec:relatedListsorder +primaryas body placement — spec lane queuemain)RecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057 quick-look path folded into the record page — ui lane, blocked by 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 (console record drawer v2: the bar is ↑ ↓ · ⤢ · ✕ (no object name, no counter); a related row or a lookup opens its record in place with a trail, ← / Esc go back one level; ⤢ carries the trail into the page; on the record page a related row opens a drawer over the page #26679 is now onmain)kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059 skills / docs (Tier H) — ui lane, blocked by spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 and 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; carries theuser-state-persistence.mddrift note (retired modes still listed) from feat(app-shell,components): the record drawer opens a related row or a lookup in place, one level at a time, and its bar names no object #27038's acceptance notesCloud-dispatch lessons from this round, to be filed as one
domain:skillscard once the first cloud card has reported: the desktop-launched cloud session clones the launching session's recorded branch (push a pointer when the remote lacks it; claude-code#104412), itsmodelcannot be set at launch (it inherits the launching seat's), and its only way back is GitHub.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 3: both cloud cards landed or queued, layout dispatched · 2026-10-28T10:53ZRound 3 (record page v3):
master_detail-parent default branch dropped, chords moved to⌘⇧./⌘⇧,). Seat review: PR comment 6466520937.relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 Studio controls → PR feat(app-shell): Studio authors relatedList, the related-list block's columns/sort/filter, ordered highlight fields, and slotted-by-default record pages #27163 ACCEPT (PR comment 6466948390), ready + auto-merge, merge queue position 3 at this reading;Part of— therelatedListseditor stays on the card behind spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069. Findings filed from it: Page designer canvas draws a location field as "[Object]" and a select value raw when an authored record:details names its fields #27177 (designer canvas draws a location as[Object]), Studio page block inspector: InspectorJsonField's Label is not associated with its textarea, so curated JSON props have no accessible name #27178 (InspectorJsonFieldlabel not associated).relatedListsorder and the field-group placement entry wait for spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069; the derived order andrelatedList: 'primary'/inlineEditstand in.tabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 spec:tabsslot retired — spec lane queuerelatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 spec:relatedListsorder +primaryas body placement — spec lane queue, unclaimed; now the one upstream of Studio: the object and field inspectors author what the v3 record page reads —relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054's fifth item and 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 fenced halfRecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057 quick-look path folded into the record page — ui lane, blocked by 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 #27055kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059 skills / docs (Tier H) — ui lane, blocked by spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 and 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 #27055Readings carried to this parent:
crm_lead,crm_account,crm_opportunityandcrm_casedeclare authoredkind: fullrecord pages, so the column tiers, the panel toggles and the v3 default layout never reach HotCRM's most-worked objects until those pages are migrated or retired — a hotcrm card after 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 lands (with theinlineEdit/primary/relatedListsdeclarations already noted on spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069).ov:drawer-widthkey is not routed through the workspace-preference store (components cannot import an app-shell store) — an Acceptance note on feat(app-shell,plugin-detail,components,i18n): the record page's timeline and related columns are each reader's per-object switches, toggled from the crumb row #27120, read by 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.Preview: the console preview on this seat is being rebuilt on
mainat9dacccf961(includes #27120) for the maintainer's walk-through.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 3: layout awaiting a human merge · 2026-10-28T18:49ZRound 3 (record page v3):
relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 Studio controls → PR feat(app-shell): Studio authors relatedList, the related-list block's columns/sort/filter, ordered highlight fields, and slotted-by-default record pages #27163 merged (four items) and PR feat(app-shell,i18n): Studio orders an object's related lists, and a field group can place a related table #27303 merged 2026-10-28T17:13Z (therelatedListseditor and the field-group placement picker, after spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069) — card closed, all five items onmain.relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 specrelatedListsorder +primaryas placement → PR feat(spec): an object declares the business order of its related lists, and 'primary' places a list #27215 merged 2026-10-28T13:28Z (spec lane).tabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 spectabsslot retired → PR feat(spec,ui)!: retire the record page's slots.tabs; a page that needs its own strip is kind: 'full' #27219 merged (spec lane).349cd5625c, CI green (55 / 8 skipped / 0 red): cloud build, then two local rounds (mergemain; six branch-inherent CI reds). Over the human-merge line (5844 changed lines > 3000): ACCEPT recorded (PR comment 6477637657), 维护者速读 终稿 (6477649188),needs-user-decisionon the PR, review requested from os-zhuang and hotlong — awaiting a human merge or an APPROVED review, after which the seat lands it. The seat walked the branch on the console preview (three columns, in-place enlarge, card menu, hide / move / fold, timeline fold) against the v3 boards. Carried to one post-landing patch round under this claim: 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 (the maintainer's three rulings of 2026-10-28 — related OFF ⇒ no rail, a segmented panel control in the header action row, a 1440 px window with the sidebar is three columns), the spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 fence half (relatedListsorder, field-group placement), and a standing 「恢复默认顺序」 entry.RecordDetailView) instead of the quick-lookRecordDetailPanel/DetailViewpath — one record rendering, the drawer stack and tiers everywhere #27057 quick-look path folded into the record page — ui lane, blocked by 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 #27055kind: fullas the escape hatch, drawer default withpageby declaration, the column tiers and the reader's own toggles — and stop namingtabs,modal/split/popover#27059 skills / docs (Tier H) — ui lane, blocked by 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 (spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053 is onmain)Filed this round from reports and the seat's readings: #27177 / #27178 (page designer canvas; os-warren, in flight), #27214 (domain:skills — the desktop-launched cloud dispatch path, six lessons), #27311 (spec:
relatedListsdescribe promises a refusal the package-closure publish does not make), #27312 (spec:relatedList: 'primary'andenable.trackHistorydescribes narrate the v2 page). HotCRM follow-up after #27055 lands: its lead / account / opportunity / case carry authoredkind: fullpages and never see the v3 default.Cloud-dispatch readings added since the last checklist: the fleet App's events (push, PR open, reopen) fire no PR workflow on this repository — only a user-token push does — so every cloud card ends with a local round that merges
mainand pushes; the cloud session on #27055 ran about 4 h for an L card and delivered Targets 1–10 in one PR.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Epic checklist · epic PM
session_cdb7a717-def7-4e71-9988-f089fbaa18ff· round 3 closed: the v3 record page is onmain· 2026-10-29T09:38ZRound 3 (record page v3) — all epic-session cards landed:
relatedList(show / hide / primary), related-list columns / filter / limit on the block, and a new record page starts empty instead of a copy of the synthesized regions #27054 Studio controls → PR feat(app-shell): Studio authors relatedList, the related-list block's columns/sort/filter, ordered highlight fields, and slotted-by-default record pages #27163 + PR feat(app-shell,i18n): Studio orders an object's related lists, and a field group can place a related table #27303 (five items; therelatedListseditor and the field-group placement picker after spec: an object declares the business order of its related lists —relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069).relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 specrelatedListsorder +primaryas placement → PR feat(spec): an object declares the business order of its related lists, and 'primary' places a list #27215 (spec lane). spec: a slotted record page keeps six slots — header, actions, alerts, highlights, details, discussion — and thetabsslot is retired; a page that needs its own tab strip is akind: fullpage #27053tabsslot retired → PR feat(spec,ui)!: retire the record page's slots.tabs; a page that needs its own strip is kind: 'full' #27219 (spec lane).relatedLists: ['task', 'event', …], an ordered list of child relationships likehighlightFieldsis of fields; unlisted ones follow the derived order; a name that matches no inbound relationship is refused #27069 fence half, the standing 「恢复默认顺序」, and 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's three rulings). The seat walked both on the console preview against the v3 boards: three columns at a 1440 window with the sidebar open, frameless sections, the merged timeline with its four chips, compact related cards with drag / 上移 / 下移 / 折叠 / 隐藏 / 恢复默认顺序, in-place ⤢ enlarge, related OFF drawing no column and no rail, the segmented 「时间线 | 关联」 control in the header action row.Fixesline).Unlocked by this round and put back in the ui lane queue by the seat's unlock scan (2026-10-29T09:38Z,
pm:blocked→pm:queue, theBlocked-by:lines replaced, provenance on each card): #27056 related column lazy loading, #27057 quick-look path folded into the record page, #27058 mobile, #27059 skills / docs (Tier H). Their Source sections cite the pre-v3 tree; the dispatching seat re-reads them againstmain273137d227.Open findings for the spec lane: #27311 (
relatedListsdescribe promises a refusal the package-closure publish does not make), #27312 (relatedList: 'primary'andenable.trackHistorydescribes narrate the v2 page), #27478 (a field group'srelatedListnaming a side-card relationship saves and draws nothing — promote or refuse). HotCRM follow-up (no card yet, the maintainer's call): its lead / account / opportunity / case carry authoredkind: fullpages and never see the v3 default;crm_quote/crm_opportunityline items would become body tables once their FK declaresinlineEditorrelatedList: 'primary'.Cloud-dispatch readings closed out in #27214; the round's own addition: the fleet App's events (push, PR open, reopen) fire no PR workflow on this repository, so every cloud card ended with a local round that merged
mainand pushed with a user token.Generated by Claude Code