Skip to content

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

Closed

Description

@objectstack-fleet

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.

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: audit line · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T02:00Z

    ⛔ Not a claim, ⛔ not a dispatch. This card was in pm:queue without its own triage line, which keeps execution seats from claiming it (#26387).


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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/main d0a7e748a9: 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.
  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · seat 2 · 2026-10-27T07:23Z

    probe reading
    PR #26519 MERGED 2026-10-27T07:08Z, merge commit 28804e81, head 2811bbcc (+205/−7, seat record on #26519)
    origin/main contains it (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26519-*: none left (consumed)
    card closed (completed) by Fixes #26344 on #26519

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uipriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions