Skip to content

Record page enlarged related tab: on desktop, draw the child object's list face (object-grid) as the phone face already does — today a generic data-table with taller rows, plain-text names and the count twice #28865

Closed

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

Filed by the record-page epic seat, part of epic #26676. The seat walked the console on main c064d3a246, with examples/app-crm as the backend, at 1440 / 1100 / 375 px, light and dark. An independent review pass then checked each finding against the code. The maintainer ruled on the reviewed list and said 「按这 6 张清单在 epic #26676 下立卡,裁决原话引在卡上。」 and 「还有刚才立的卡可以交给ui车道处理吗?」 (2026-11-02). So this card goes to the domain:ui lane queue. Priority and area:* are left to triage. Code readings below are on main 3b920f6dd0.

Observed

Account Acme Corp → the 商机 tab, enlarged at 1440 px:

Reading

Governing text

#27524 item 9: below the tab row, "the full-width table (all columns, paging, sort, inline edit where the FK allows — the child object's list face)".

Target

  1. The desktop enlarged face renders object-grid over the rows this list already reads, the same branch the phone takes. Specifically:
    • the name opens the record;
    • row actions come from the grid;
    • row height and density are the list page's;
    • one count is shown.
  2. This related list's own state is kept: its paging and sort (windowed per objectui#3106), the filter chips (enlargedChipsOf), and the + new action.
  3. Compact panels in the right column are unchanged.

Premise to verify first

object-grid with a value provider can carry this list's windowed paging and sort, with the list as the source of truth.

  • If it cannot, stop and report a fork.
  • Do not add a third table renderer, and do not keep data-table on desktop "for now".

Acceptance

  • At 1440 px, the enlarged tab's row height equals the child list page's.
  • The name is a link to the record.
  • The count shows once.
  • Paging, sort and the filter chips behave as today.
  • The tests pin the desktop branch to object-grid.
  • Screenshots of the account → opportunities tab, before and after, are linked from the PR.

Activity

  1. added
    enhancementNew feature or request
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Claim: PM loop round 8 · 2026-11-02T02:16Z
    Session: session_01QsR2jV95ABcxitqSGp6kmv (card thread, os-dev); dispatched by seat session session_01QsR2jR7ZFkpqmm4U8S1f9y
    Account: zhuangjianguo
    Branch: claude/project-thread-iixlsj (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-28865
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/plugin-detail/src/RelatedList.tsx (the enlarged face of viewSchema and what it hands the grid), its tests, and a changeset (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier at 67103cc1: no path-derived mandate), effort: default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: on desktop the enlarged related tab is a generic data-table: tall rows, a plain-text name, the count twice, an empty-looking actions column | #28484 already draws the phone's enlarged face as object-grid; #27524 item 9 says the enlarged tab is the child object's list face | every user who enlarges a related list on desktop
    Thread-read: none
    Premise: holds (at origin/main 45efba2a, RelatedList.tsx viewSchema returns object-grid only when isMobile, and desktop falls through to type: 'data-table')
    Serial constraints cleared: #28868 and #28870 (this seat, round 8) do not touch RelatedList.tsx


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · domain:ui · 2026-11-02T02:58Z

    ⛔ Not a claim.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jV95ABcxitqSGp6kmv
    os-dev-report

    {
      "issue": 28865,
      "status": "done",
      "branch": "claude/project-thread-iixlsj",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28902",
      "session": "session_01QsR2jV95ABcxitqSGp6kmv",
      "premise_still_valid": true,
      "summary": "The enlarged related tab renders object-grid on every width (one branch with the phone): RelatedList hands the grid the page it read plus its window, page and sort on the grid's host channel (manualPagination/rowCount/page/pageSize/onPageChange/sort/onSortChange, as ListView does), keeps its own pager, chips, 新建 and 导出, and routes a grid row-action dispatch carrying one of its own defs back to the host onRowAction through a provided action context. The status line drops the count while the 全部 chip carries it. Measured on app-crm at 1440 px: rows 65 -> 41 px (list page 41), name is a link that opens the record drawer, one count. No plugin-grid change.",
      "tests": "plugin-detail full suite at 8893cd2f (pre-merge; the merge touched no plugin-detail, plugin-grid or react file): 361 files passed, 1 skipped; 3200 tests passed. Final head 47c53a5a: 3 plugin-detail enlarged files + 30 app-shell/console/plugin-view/plugin-grid files naming RelatedList / the enlarged face / ?related=: 33/33 files, 516/516 tests. Ablations via scripts/ablation-replace.mjs (restored byte-identical to HEAD): desktop branch gated to isMobile -> 7/11 red; routed dispatch sent to the surrounding runner -> 1 red; one-count rule off -> 2 red. No build/dist leg: plugin-detail tests resolve source.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 47c53a5a: 34 derived, 34 run, each exit 0 (reconciled with --ran: 0 NOT-MEASURED, derived zero). Includes check-sdui-manifest exit 0. Extra: pnpm --filter @object-ui/plugin-detail run type-check exit 0; eslint RelatedList.tsx 0 errors / 99 warnings (= main); pnpm --dir ui run check:spec-symbols exit 0; PR-body gates with the body as GITHUB_EVENT_PATH: check-changeset-no-major exit 0, check-adr-0087-registration exit 0, check-closing-keyword-parity exit 0, check-partof-closing-keyword exit 0. CI check-runs: in_progress at report time.",
      "line_budget": "467 changed lines (437+, 30-) across 6 files; under 3000, not Tier H",
      "files_changed": [
        ".changeset/28865-enlarged-related-list-grid.md",
        "ui/packages/plugin-detail/src/RelatedList.tsx",
        "ui/packages/plugin-detail/src/__tests__/RelatedList.enlargedListGrid-28865.test.tsx",
        "ui/packages/plugin-detail/src/__tests__/RelatedList.enlargedPhoneCards-28484.test.tsx",
        "ui/packages/plugin-detail/src/__tests__/RelatedList.enlargedToolbar-27524.test.tsx",
        "ui/packages/app-shell/src/views/RecordDetailView.childWriteRefreshesParent-12244.test.tsx"
      ],
      "deviations": [
        "File surface: one test outside RelatedList's own tests was updated, app-shell RecordDetailView.childWriteRefreshesParent-12244.test.tsx, because it drives the enlarged tab's row menu, which is now the grid's (opened by row-action-trigger instead of the data-table's 'Row actions' button); its assertions are unchanged.",
        "Seat-accepted behaviour change, pinned in the new test: while the filter box has text the grid gets the list's sort as a host sort and so offers no header sort on a relational column; the data-table sorted it by label in that state.",
        "PR not assigned and no reviewer requested (brief rule 10), although the session harness asked for the requester as assignee/reviewer.",
        "Screenshots live in /mnt/project-files/issue-28865/ (project folder); the PR body asks the seat to link them.",
        "dogfood_battery not run: no ! in the title and no (narrowing) arm."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — GitHub MCP reads only: issue_read x4 (#28865 get, #28865 get_comments x2, #28484 get); no write tools",
      "api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#28902) and this os-dev-report comment via post-stamped; plus git push (not a REST write)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: #28871 · the 操作 header over a column with no visible buttons is the grid's own behaviour on the list page too; unchanged here · noted, not filed"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    ACCEPT · 2026-11-02T04:14Z · PR #28902 at 47c53a5a, record 6568896402. Ordinary queue landing follows.


    Generated by Claude Code

  7. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

    Landed · 2026-11-02T04:49Z · PR #28902 merged through the merge queue as a3640933. Record: ACCEPT 6568896402 at 47c53a5a.

    probe before (a3640933~1) now (origin/main)
    enlargedGridHost (the grid's host channel) in plugin-detail/src/RelatedList.tsx 0 4
    enlargedGridActions (row actions routed to onRowAction) in the same file 0 5
    type: 'object-grid' in the same file 1 (phone only) 1 (every width)

    The card closed through Fixes. pm:dispatched comes off with this note. Carried, as accepted: while the filter box has text, a relational column's header sort is not offered (pinned by a test). The empty-looking 操作 column is #28871 (domain:ui#1).


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

domain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions