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 page: a related list's date column still mixes relative and absolute faces (RelatedList builds its cells without inGridColumn, which #25884 added for grids) #26344
Filing class: ① user-visible defect, the remainder of #25884 outside its claim. Found by the #25884 developer (os-dev-report 6428277761, PR #26341 Acceptance notes). The reach is read from the code and not measured in a browser.
What
PR #26341 (#25884) gives CellRendererProps an inGridColumn flag. With it set, a date field with no declared format paints one absolute face down the column, and the relative phrase moves to the tooltip. ObjectGrid passes the flag on every column cell it builds. The record page's related lists draw their own table cells in ui/packages/plugin-detail/src/RelatedList.tsx (the cell builder around :1654 on main) without the flag. So a related list's date column still shows "Yesterday" next to "Sep 20, 2025": the defect #25884 fixed for grids, and the same reasoning applies (absolute in a sortable column, relative at most as a tooltip).
Expected
RelatedList's table cells pass inGridColumn, so an undeclared date column reads in one absolute face, with the relative phrase as its title. A declared format still wins. Pin it the way ObjectGrid.dateColumnOneFace-25884 pins the grid.
Sequencing
Blocked by #26341 (the flag must exist on main). RelatedList.tsx is on the plugin-detail landing line (#26055 → #26277 → #26325). Claim it after #26341 merges, and re-record plugin-detail.json.
Dedupe: "related list date column relative", "RelatedList inGridColumn", "mixed date faces related". None found.
Claim: PM loop round 10 · 2026-10-27T05:03Z
Session: session_01SMps7wq7rBTk53e8KTSEup
Account: os-steve
Branch: claude/issue-26344-related-date-one-face
Worktree: objectstack-issue-26344
Domain: domain:ui
Seat: domain:ui#2
File surface: ui/packages/plugin-detail/src/RelatedList.tsx (the table cell builder only), a new pin in ui/packages/plugin-detail/src/__tests__/ or renderers/__tests__/, root .changeset/. ⛔ fields/src/index.tsx (the flag is on main), RelatedListEmptyFold.tsx, the fetch paths (#26415), locale packs, ui/.github/**, root ci.yml.
Container & model: M, mode:subagent, model: default tier, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: a reader scanning a related list's date column on a record page | CellRendererProps.inGridColumn (#26341) | every record page with a related list showing a date field
Thread-read: none
Premise: holds 2026-10-27T05:03Z at origin/maind0a7e748a9: inGridColumn exists on CellRendererProps (#26341 merged) and RelatedList.tsx builds its table cells without it.
Serial constraints cleared: #25884 (PR #26341) MERGED 2026-10-27T03:03Z; #25895 (PR #26414, same file) MERGED 2026-10-27T04:31Z. #26415 (same file, fetch paths) is held behind this card. No sdui record (retired by #26367).
Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.
Seat's route: pass inGridColumn on every table cell RelatedList builds, so an undeclared date column reads in one absolute face with the relative phrase as its title; a declared format still wins. Pin it red-first the way ObjectGrid.dateColumnOneFace-25884 pins the grid. Fixes #26344.
{
"issue": 26344,
"status": "done",
"branch": "claude/issue-26344-related-date-one-face",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26519",
"session": "session_01SMps7wq7rBTk53e8KTSEup",
"premise_still_valid": true,
"summary": "RelatedList.tsx makeCell (the one table cell builder; object columns, string columns, highlightFields and the field walk all reach it) now passes inGridColumn: true, so an undeclared date column in a related list reads in one absolute face with the relative phrase as its title; a declared format still wins. New red-first pin RelatedList.dateColumnOneFace-26344 (paths A-D, real data-table, desktop) modelled on ObjectGrid.dateColumnOneFace-25884. The existing RelatedList.deadlineSettled-11815 pin asserted the old relative text and was moved to absolute face + title (its per-row verdict unchanged). Patch changeset for @object-ui/plugin-detail with both declaration lines. Head 2811bbcc621c5f6673948006c2644e86960079ce; draft PR opened via relay, body read back identical (6166 bytes).",
"tests": "Red first at 548f25d0 (pin only): 4/4 failed, each expected Yesterday not to match the relative-wording regex. After the fix at ca662813: from ui/ under the lock, pnpm exec vitest run packages/plugin-detail --maxWorkers=2 gave 1 failed (the 11815 pin, old relative text, expected). On the tree of d6a01e1d: Test Files 309 passed | 1 skipped (310), Tests 2869 passed | 18 skipped (2887), VERDICT command-exit 0; head 2811bbcc differs from that tree only by restoring .changeset/25884-grid-date-absolute.md to merge-base bytes. pnpm --filter @object-ui/plugin-detail type-check (tsc --noEmit && tsc -p tsconfig.test.json): VERDICT command-exit 0; tsconfig.test.json --listFilesOnly lists both touched tests (2/2). No ablation beyond the red-first run: the suite resolves @object-ui/fields from src through the ui vitest alias, and the pin was red before the fix commit and green after it.",
"gates": "Local, at head 2811bbcc: dispatch-gates --commands derived 34 families; all 34 run, exit 0 each (check-empty-changeset re-run at head after the restore: exit 0; the first run at d6a01e1d exited 1 on the edited #25884 note, see open_questions); --ran reconciliation: 34 derived accounted for, 34 run, 0 NOT-MEASURED (derived zero, all 34 with exit codes). Includes node scripts/check-sdui-manifest.mjs exit 0 (intact, 106 components; no registry contract changed, no regeneration) and pnpm --dir ui exec vitest run scripts/ (178 files passed, 2 skipped, VERDICT command-exit 0). CI on PR #26519 at report time: 22 check-runs, No other open PR may claim the same issue = success, two opt-in = skipped, the rest in_progress (Lint, Type Check, Check Changeset, Governed Surface Queue Guard, PR-claim guards); not waited on.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2: relay dispatch 1 = pr_create (POST /repos/objectstack-ai/objectstack/pulls draft, POST /repos/objectstack-ai/objectstack/issues/26519/assignees os-steve); relay dispatch 2 = this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/26344/comments). git push is not a REST write.",
"open_questions": [
{
"question": "The pending release note .changeset/25884-grid-date-absolute.md (PR #26341) lists a record page related list among surfaces that render date cells as before; after this PR lands that sentence is false for the release shipping both notes. Correcting it in this PR reds check-empty-changeset by design (a release decision for a person). Edit it or leave it?",
"options": [
"A: leave it; this PR note states the new behaviour and the release compiler reads both (zero work, release notes carry one stale clause)",
"B: a person approves dropping the four words a record page related list from the #25884 note, in this PR (red empty-changeset accepted by a person) or a separate docs-only edit before the release (about 1 line)"
],
"recommendation": "B as a separate one-line edit before the next release, because the gate reserves it for a person and a stale contradicting clause in the shipped CHANGELOG is the text an upgrader greps."
}
],
"out_of_scope_findings": [
"carrier: none (noted in PR Acceptance notes only): CellRendererProps.inGridColumn doc comment in ui/packages/fields/src/index.tsx names only ObjectGrid as a passer; still true, now incomplete; file outside this card surface.",
"carrier: none (noted, not measured): the Add picker RecordPickerDialog (cellRenderer=getCellRenderer, @object-ui/fields) draws its own candidate table; whether its date columns mix faces was not measured, so no class a/b/c evidence."
],
"deviations": [
"File surface: the existing pin RelatedList.deadlineSettled-11815.test.tsx was edited (assertions only) because it pinned the relative cell text this card retires; the claim named only a new pin.",
"An intermediate commit (ca662813) edited .changeset/25884-grid-date-absolute.md; check-empty-changeset refused it and 2811bbcc restored the merge-base bytes (diff vs base 0 lines); the PR diff does not touch that file.",
"Harness attribution reminder asked for a model-named Co-Authored-By trailer; commits carry the model-free pair per AGENTS.md (pre-push check:commit-card-trailers passed)."
]
}
Status: a record page's related-list date column shows one absolute face per row, like the list grid; the relative wording moved to the hover title. pm:dispatched removed. Next on RelatedList.tsx: #26415.
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: audit line · triage seat ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T02:00Z⛔ Not a claim, ⛔ not a dispatch. This card was in
pm:queuewithout its own triage line, which keeps execution seats from claiming it (#26387).ui/packages/plugin-detail/src/RelatedList.tsx+ a pin; rationale: p3, the remainder of list grid: a date column mixes relative and absolute formats in the same column ("昨天 / 3天前 / 7天前 / 9月25日 / 2025年9月20日"), so a sorted column cannot be read as sorted #25884. RelatedList's table cells pass theinGridColumnflag PR fix(fields,plugin-grid): a grid date column reads in one absolute face #26341 added, so an undeclared date column reads in one absolute face. A declaredformatstill wins. It is on the plugin-detail landing line with record page: the read-only field copy button is a Tab stop that stays invisible (hover-only reveal), like the inline-edit pencil before #25883 #26329, so dispatch it serially, not in parallel.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 10 · 2026-10-27T05:03Z
Session:
session_01SMps7wq7rBTk53e8KTSEupAccount:
os-steveBranch:
claude/issue-26344-related-date-one-faceWorktree:
objectstack-issue-26344Domain:
domain:uiSeat:
domain:ui#2File surface:
ui/packages/plugin-detail/src/RelatedList.tsx(the table cell builder only), a new pin inui/packages/plugin-detail/src/__tests__/orrenderers/__tests__/, root.changeset/. ⛔fields/src/index.tsx(the flag is on main),RelatedListEmptyFold.tsx, the fetch paths (#26415), locale packs,ui/.github/**, rootci.yml.Container & model:
M,mode:subagent,model: default tier,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
a reader scanning a related list's date column on a record page|CellRendererProps.inGridColumn (#26341)|every record page with a related list showing a date fieldThread-read: none
Premise: holds 2026-10-27T05:03Z at
origin/maind0a7e748a9:inGridColumnexists onCellRendererProps(#26341 merged) andRelatedList.tsxbuilds its table cells without it.Serial constraints cleared: #25884 (PR #26341) MERGED 2026-10-27T03:03Z; #25895 (PR #26414, same file) MERGED 2026-10-27T04:31Z. #26415 (same file, fetch paths) is held behind this card. No sdui record (retired by #26367).
Writes: PR only via the relay op
pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.inGridColumnon every table cell RelatedList builds, so an undeclareddatecolumn reads in one absolute face with the relative phrase as its title; a declaredformatstill wins. Pin it red-first the wayObjectGrid.dateColumnOneFace-25884pins the grid.Fixes #26344.objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26344, "status": "done", "branch": "claude/issue-26344-related-date-one-face", "pr": "https://github.com/objectstack-ai/objectstack/pull/26519", "session": "session_01SMps7wq7rBTk53e8KTSEup", "premise_still_valid": true, "summary": "RelatedList.tsx makeCell (the one table cell builder; object columns, string columns, highlightFields and the field walk all reach it) now passes inGridColumn: true, so an undeclared date column in a related list reads in one absolute face with the relative phrase as its title; a declared format still wins. New red-first pin RelatedList.dateColumnOneFace-26344 (paths A-D, real data-table, desktop) modelled on ObjectGrid.dateColumnOneFace-25884. The existing RelatedList.deadlineSettled-11815 pin asserted the old relative text and was moved to absolute face + title (its per-row verdict unchanged). Patch changeset for @object-ui/plugin-detail with both declaration lines. Head 2811bbcc621c5f6673948006c2644e86960079ce; draft PR opened via relay, body read back identical (6166 bytes).", "tests": "Red first at 548f25d0 (pin only): 4/4 failed, each expected Yesterday not to match the relative-wording regex. After the fix at ca662813: from ui/ under the lock, pnpm exec vitest run packages/plugin-detail --maxWorkers=2 gave 1 failed (the 11815 pin, old relative text, expected). On the tree of d6a01e1d: Test Files 309 passed | 1 skipped (310), Tests 2869 passed | 18 skipped (2887), VERDICT command-exit 0; head 2811bbcc differs from that tree only by restoring .changeset/25884-grid-date-absolute.md to merge-base bytes. pnpm --filter @object-ui/plugin-detail type-check (tsc --noEmit && tsc -p tsconfig.test.json): VERDICT command-exit 0; tsconfig.test.json --listFilesOnly lists both touched tests (2/2). No ablation beyond the red-first run: the suite resolves @object-ui/fields from src through the ui vitest alias, and the pin was red before the fix commit and green after it.", "gates": "Local, at head 2811bbcc: dispatch-gates --commands derived 34 families; all 34 run, exit 0 each (check-empty-changeset re-run at head after the restore: exit 0; the first run at d6a01e1d exited 1 on the edited #25884 note, see open_questions); --ran reconciliation: 34 derived accounted for, 34 run, 0 NOT-MEASURED (derived zero, all 34 with exit codes). Includes node scripts/check-sdui-manifest.mjs exit 0 (intact, 106 components; no registry contract changed, no regeneration) and pnpm --dir ui exec vitest run scripts/ (178 files passed, 2 skipped, VERDICT command-exit 0). CI on PR #26519 at report time: 22 check-runs, No other open PR may claim the same issue = success, two opt-in = skipped, the rest in_progress (Lint, Type Check, Check Changeset, Governed Surface Queue Guard, PR-claim guards); not waited on.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2: relay dispatch 1 = pr_create (POST /repos/objectstack-ai/objectstack/pulls draft, POST /repos/objectstack-ai/objectstack/issues/26519/assignees os-steve); relay dispatch 2 = this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/26344/comments). git push is not a REST write.", "open_questions": [ { "question": "The pending release note .changeset/25884-grid-date-absolute.md (PR #26341) lists a record page related list among surfaces that render date cells as before; after this PR lands that sentence is false for the release shipping both notes. Correcting it in this PR reds check-empty-changeset by design (a release decision for a person). Edit it or leave it?", "options": [ "A: leave it; this PR note states the new behaviour and the release compiler reads both (zero work, release notes carry one stale clause)", "B: a person approves dropping the four words a record page related list from the #25884 note, in this PR (red empty-changeset accepted by a person) or a separate docs-only edit before the release (about 1 line)" ], "recommendation": "B as a separate one-line edit before the next release, because the gate reserves it for a person and a stale contradicting clause in the shipped CHANGELOG is the text an upgrader greps." } ], "out_of_scope_findings": [ "carrier: none (noted in PR Acceptance notes only): CellRendererProps.inGridColumn doc comment in ui/packages/fields/src/index.tsx names only ObjectGrid as a passer; still true, now incomplete; file outside this card surface.", "carrier: none (noted, not measured): the Add picker RecordPickerDialog (cellRenderer=getCellRenderer, @object-ui/fields) draws its own candidate table; whether its date columns mix faces was not measured, so no class a/b/c evidence." ], "deviations": [ "File surface: the existing pin RelatedList.deadlineSettled-11815.test.tsx was edited (assertions only) because it pinned the relative cell text this card retires; the claim named only a new pin.", "An intermediate commit (ca662813) edited .changeset/25884-grid-date-absolute.md; check-empty-changeset refused it and 2811bbcc restored the merge-base bytes (diff vs base 0 lines); the PR diff does not touch that file.", "Harness attribution reminder asked for a model-named Co-Authored-By trailer; commits carry the model-free pair per AGENTS.md (pre-push check:commit-card-trailers passed)." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed · seat 2 · 2026-10-27T07:23Z
28804e81, head2811bbcc(+205/−7, seat record on #26519)origin/maingit merge-base --is-ancestorexit 0)gh-readonly-queue/main/pr-26519-*: none left (consumed)Fixes #26344on #26519Status: a record page's related-list date column shows one absolute face per row, like the list grid; the relative wording moved to the hover title.
pm:dispatchedremoved. Next onRelatedList.tsx: #26415.