Repository navigation
feat(plugin-detail,app-shell,components): record page v3 layout - #27310
Conversation
…s and the rightRail slot The default record page is drawn from the object's semantic roles alone (ADR-0085): hideHighlights, hidePath, showReferenceRail, hideReferenceRail, hideRelatedTab, relatedLayout, recordChrome and slots.rightRail had no console caller and are removed from the options type, its sub-builders and the docs. The synthesized page now has one region; record:reference_rail stays for authored pages. Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…ess sections, empty-sections line, highlight grid, meta line, refresh in the header ⋯ Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…arrangement (drag, collapse, hide, merge rules) Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…sed by ?related=object.field Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
… the first field section Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…ab strip Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…eded tab pins updated Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…ader's arrangement Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…tests follow the v3 page The timeline stream is newest first, so its page is the head of the merged stream, not the tail the shared feed window keeps. Its chips wrap in a narrow card. The Timeline tab label localizes through the packs. Record-page tests that read the discussion footer or the History tab now open the Timeline tab. Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
…rameless heading Claude-Session: https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm Co-authored-by: Claude <noreply@anthropic.com>
Conflicts: - ui/packages/plugin-detail/src/synth/buildDefaultPageSchema.ts: main retired the `slots.tabs` slot (#27219) while this branch rewrote the `discussion` slot to the timeline stream and deleted `rightRail`; the resolution keeps main's no-tabs-slot doc and branch, this branch's timeline-stream `discussion` doc, and no `rightRail`. - ui/packages/app-shell/src/views/RecordDetailView.tsx: the `@object-ui/plugin-detail` import line takes the union of main's queue claim imports (#27264) and this branch's timeline/arrangement imports. Claude-Session: https://claude.ai/code/session_cdb7a717def74e719988f089fbaa18ff Co-Authored-By: Claude <noreply@anthropic.com>
…etirement on main made dead main retired `slots.tabs` (#27219) and pins the stray-slot case itself ("reads no `tabs` slot"); this branch's case that a `discussion` slot beside an authored `tabs` slot stays under the strip pins a path that no longer exists. The timeline-stream `discussion` slot stays pinned by "discussion slot overrides even when hideDiscussion is true". Claude-Session: https://claude.ai/code/session_cdb7a717def74e719988f089fbaa18ff Co-Authored-By: Claude <noreply@anthropic.com>
…nch tripped - useRelatedArrangement reads the 48 h 「新」 clock once per mount (useState initializer) instead of Date.now() in render; every edit still stamps its own time in the handler (react-hooks purity). - RelatedCardStack-27055's tabbed-tier probe reports the scope through a callback prop instead of reassigning an outer variable from a component. - RecordMetaFooter's OWNER_FIELD is SystemFieldName.OWNER_ID from @objectstack/spec/system, backing its "canonical" claim (check:spec-symbols). - RelatedList formats body-table totals and the compact card's date chip in useDisplayLocale(), not the machine locale (machineLocaleCensus-9909). - residue-namespaces-3546 pins RelatedList's three `detail.add` affordances (picker title, compact +, full list Add). - record-header-title-width re-anchors page:header's tail on PageHeaderActions' toolbar now that refresh lives in ⋯, with a mobile tail of one inline action plus ⋯. Claude-Session: https://claude.ai/code/session_cdb7a717def74e719988f089fbaa18ff Co-Authored-By: Claude <noreply@anthropic.com>
RecordDetailView.auditDisplayLocale-10442 stopped reading `screen` when the stream windowing commit moved its assertion; object-ui/no-unused-imports is an error in app-shell's lint. Claude-Session: https://claude.ai/code/session_cdb7a717def74e719988f089fbaa18ff Co-Authored-By: Claude <noreply@anthropic.com>
|
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff 席位核对 · PR #27310 ← #27055 · epic PM
|
|
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff 维护者速读(终稿) · PR #27310 ← #27055 记录页 v3 布局 · 2026-10-28T18:47Z
Generated by Claude Code |
|
director#1 · os-bill · session_01Utp6CbQLcy8yg6vhJVXXi8 Brief-claimed-by: session_01Utp6CbQLcy8yg6vhJVXXi8 · batch #425 · 2026-10-29T01:35Z Director seat, summon #54 (ledger objectstack#12708). Presented to the maintainer in batch #425 as item 2 of 4 — over the 3000-line human-merge line (5844 changed lines, +4524 / −1320, 80 files; 0 governed paths), terminal four-piece. Four-item check before presenting (read 2026-10-29T01:35Z):
|
|
domain:spec#3 · os-support-ai · session_01WGufzgbJhFoXYsLSe5WSPP Finding for this PR, from the os-dev-report of PR #27352 (#27312, which rewrites the spec describes to this PR's v3 page and lands after it). ⛔ Not a review and not a claim. On this PR's head, |
Part of #27055 — this lands the record page v3 layout. The two fenced read points stay for #27069: the related cards' default order (primary first, then derived order, without reading
relatedLists) and the body tables' placement (after the first field group, without afieldGroupsplacement entry).Clause-②: no
Metadata-protocol: none
维护者速读
What changes
The synthesized default record page (an object with no assigned record page) takes the v3 layout. Authored pages are untouched apart from the shared header and the renderer faces noted below.
⋯. Refresh is the first item of⋯(no separate ⟳ button). Up to six highlights, as an equal grid.sys_activityrows and audit field changes, newest first. The composer is on top, the chips are All / Activity / Discussion / Changes, system entries are one muted line, and a "View all N →" button shows the rest. The History tab, the Activity tab and the discussion footer are retired on this page.record.related.arrangement, scopeobject:<name>. The value is{ v, order, collapsed, hidden, basedOn, seen }. A default-order change shows "Default order updated · Restore default". A new relationship lands after its nearest default neighbour with a "New" badge for 48 hours. The tabbed tier's Related tab follows the same arrangement.?related=<object>.<field>. Esc or ‹ Back returns.master_detailFK declaringinlineEdit, orrelatedList: 'primary', is drawn as a table after the first field group. It opens on ten rows with a totals line and has ⤢.hideHighlights,hidePath,showReferenceRail,hideReferenceRail,hideRelatedTab,relatedLayout,recordChrome,showActivity,historyandslots.rightRail(TypeScript-only break, named in the changeset with its ADR-0087 marker).Fence read points for #27069:
synthPartsrelated ordering inRecordDetailView.tsx, commented as the fence.bodyTablePlacementinbuildDefaultPageSchema.ts, commented as the fence.Tests
@object-ui/plugin-detail@object-ui/components@object-ui/app-shellapprovalRequestsDataSource.recordPageAcceptance notes
claude/issue-27055-evidence-20261028: https://github.com/objectstack-ai/objectstack/tree/claude/issue-27055-evidence-20261028/evidence/27055seenmember, a first-seen stamp per id, as the clock for the 48-hour "New" badge.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:relatedList: 'primary'still says "promoted to its own tab".enable.trackHistorystill says "Show the record History tab".packages/spec/**, which this card does not touch. The hand-written security doc line is updated here.Verification
dispatch-gates.mjs --changedderives for this diff ran on the final tree. The--ranreconciliation verdict is below.plugin-gantt,plugin-map,plugin-markdown,plugin-timeline,plugin-treehave nodisthere). No error is in a file this PR touches. CI builds the full graph.Gate reconciliation (66 derived, 66 run, all exit 0)
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q4EjjN14dHBs3CJce73zNm