Skip to content

Record pane: on a grouped list or a kanban board the counter and ↓ ↑ are missing — step within the row's group or lane and name it in the tooltip #28461

Closed

Description

@objectstack-fleet

domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4

Filing gate: ① follow-up owed by landed work — #27524 PR ④ (#28458, 55a1febca1), ACCEPT 6547248636 item 6. ⛔ Not a claim.

Business reason. A sales user working a grouped list (HotCRM's contact list is grouped by account) or a kanban board opens a record in the pane and has no 「3 / 21」 counter and no ↓ ↑: stepping to the next record means closing the pane and clicking the next row. The same user on an ungrouped list steps with ↓ ↑ or j / k. Target 7 of #27524 asks the counter's tooltip to name the group when the list was grouped or is a kanban column.

Reach (measured). PR #28458's evidence shot 04-contact-split-720.png (commit b0a817c91d, HotCRM on that branch): a contact opened from the grouped contact list draws 「联系人 › John Smith」, ⤢ and ✕, and no counter.

Reading (origin/main bede9deaed). ui/packages/plugin-list/src/ListView.tsx ≈L5612: const rowSequenceShown = paginate && surfaceDrawsFetchedRows; — the list reports its shown rows (onRowsChange, #26679) only for the paged, ungrouped grid. A grouped grid and a kanban board report nothing, so the pane (recordDrawerStack.tsx) has no sibling set and RecordTopBar draws no counter.

Wanted.

  1. A grouped grid reports its shown rows in display order with the group each row sits in; a kanban board reports the rows of a lane with the lane.
  2. The pane's counter and ↓ ↑ step within the opened record's group / lane; the tooltip names it (「Acme Corporation 中第 1 条,共 3 条」), as Target 7 words it.
  3. An ungrouped list keeps today's behaviour and tooltip.

Tests. Grouped grid: the counter and its group-named tooltip, ↓ to the next row of the same group, the last row of a group has no ↓. Kanban: the same within a lane. Control: ungrouped list unchanged. Ablation of the grouped report reds the grouped test.

Reader who acts. A domain:ui seat; surface ui/packages/plugin-list/src/ListView.tsx (and the kanban plugin's lane rows), ui/packages/app-shell/src/views/recordDrawerStack.tsx / ObjectView.tsx for the scope label, ui/packages/components/src/custom/record-top-bar.tsx untouched or tooltip-only. No spec change.

Dedupe. Searched "record pane counter stepper grouped list kanban group scope": 13 hits, none covers it (nearest #27057 closed, #26896 closed, #28212 open on kanban lanes in skills).

Links back: #27524 (Target 7), #26676, #26679, PR #28458.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Claim: PM loop round 1 · 2026-10-31T22:59Z
    Session: session_01L9qibw2uhdSeHYfnZdAf4V (seat; implementation by card thread session session_01L9qibvFWwhiepJS7DD4DXb, mode:thread)
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-4omx0a
    Worktree: objectstack-issue-28461
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/plugin-list/**, ui/packages/plugin-grid/src/{ObjectGrid.tsx,objectGridProps.ts} + a test there (added at the card thread's measured request: on a source with queryGroupHeaders the grouped rows live only in ObjectGrid), ui/packages/plugin-kanban/** lane rows, ui/packages/app-shell/src/views/{recordDrawerStack.tsx,ObjectView.tsx,objectViewRecordNavigation.ts}, ui/packages/components/src/custom/record-top-bar.tsx tooltip only, i18n catalogs, tests, root changeset (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: yes (widening: one new optional host callback on @object-ui/plugin-grid ObjectGrid reporting open leaf group bands; no accept set moves)
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds
    Serial constraints cleared: PR #28477 (#27058) edits ObjectView.tsx and objectViewRecordNavigation.ts; sibling #28472 (this seat) edits the row delete confirm in plugin-grid: ordinary concurrency, small edits, the later lander merges origin/main.
    Order: /mnt/project-files/ui-seat-1/r2026-10-31b/dispatch-28461.md. No maintainer ruling; follow-up of #27524 ACCEPT 6547248636 item 6. Clause-② yes ⇒ the seat writes the TIER_DEFAULT contract record.

  2. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Claim amendment 1 · 2026-10-31T23:00Z · amends claim 6550292376. Append-only. The plugin-grid surface named in the claim (ObjectGrid.tsx, objectGridProps.ts + a test) is confirmed at the card thread's measured request: on a source with queryGroupHeaders (gridOwnsGroupedFetch) ListView is handed no rows, and the bands are drawn only in ObjectGrid.tsx groupBandsOf(pagedGroups). Clause-② yes stands (one new optional host callback). Sibling #28472's surface moved out of plugin-grid (its amendment), so no live claim of this seat shares those two files.

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibvFWwhiepJS7DD4DXb
    os-dev-report

    {
      "issue": 28461,
      "status": "pr-open-draft-green",
      "branch": "claude/project-thread-4omx0a",
      "pr": 28492,
      "head": "1af0de3db280d324dc4e405ff96318c5dba44e32",
      "session": "session_01L9qibvFWwhiepJS7DD4DXb",
      "premise_still_valid": true,
      "summary": "On a grouped grid or a board the record pane now draws its counter and up/down within the opened record's group or lane, and the counter's tooltip names it (detail.recordOfScope, e.g. 'Acme Corporation 中第 1 条,共 3 条'). ObjectGrid and ObjectKanban gain an optional onRowGroupsChange host prop (open groups/lanes with heading and shown rows, content-keyed); ListView relays it as onRowsChange's optional second argument; app-shell hands the pane's root (and the row's ↗ page) the opened record's group as siblings + scope. Ungrouped lists unchanged. ObjectView.tsx and record-top-bar.tsx untouched.",
      "tests": {
        "new": ["plugin-grid rowGroupsReport-28461", "plugin-kanban ObjectKanban.laneRowsReport-28461", "plugin-list ListView.rowGroups-28461", "app-shell recordPaneGroupScope-28461"],
        "moved_control": "ListView.onRowsChange-26679: its no-row-order control moves from a board (now reports lanes) to a calendar",
        "local": "7 files / 25 tests on 012ae4d6; after merges 14 files / 79 tests (4bef2693) and 6 files / 37 tests incl. core actionKeys.pin (1af0de3d)",
        "package_suites": "plugin-grid + plugin-kanban + plugin-list in full + the 7 app-shell files on the pane/row set: 539 files, 4653 tests passed. Declared narrowing: app-shell's 2,017-file suite left to CI Test UI (green on 1af0de3d)",
        "ablations": ["ListView shownRowGroups -> null: grouped grid + board tests red, control green, restored", "ObjectGrid leaf group not pushed: 2 grid tests red, control green, restored"],
        "type_check": "plugin-grid, plugin-kanban, plugin-list, app-shell: exit 0"
      },
      "gates": "dispatch-gates --commands re-run on 4bef2693: 35 run, 0 NOT-MEASURED, all exit 0 (incl. check-sdui-manifest + self-test, type-check-debt). CI on 1af0de3d: every check green, mergeable_state clean.",
      "ci_history": "Test UI (12/16) red on 4bef2693 = core actionKeys.pin missing 'overrides' (spec ActionSchema key from main, not this diff); main's ui actionKeys.ts already lists it at 8c3f9d93; merged origin/main -> 1af0de3d, pin green locally and in CI.",
      "pr_body_correction_for_seat": "PR body Verification cites head 012ae4d6; current head is 1af0de3d (two origin/main merges: 4bef2693 resolved a conflict with #28477's phone lines in objectViewRecordNavigation.ts, 1af0de3d clean). Gates re-ran on 4bef2693; CI green on 1af0de3d.",
      "dogfood_battery": "n/a",
      "mcp_calls": {"reads": {"issue_read.get": 1, "issue_read.get_comments": 2, "pull_request_read.get": 2, "pull_request_read.get_check_runs": 2, "pull_request_read.get_review_comments": 1, "get_job_logs": 1}, "writes": 0},
      "api_writes": {"relay pr_create": "1 (fw-20261101T003350Z-123f7d, run 41257288943)", "post-stamped comment": "1 (this report)", "git push": "branch claude/project-thread-4omx0a only"},
      "open_questions": [],
      "out_of_scope_findings": ["ObjectGrid.tsx:4169 'Cannot create components during render' only under --no-inline-config: pre-existing, carries an inline eslint-disable, not touched"]
    }
  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Landed · 2026-11-01T01:39Z · PR #28492 merged through the merge queue as 755794fd at 2026-11-01T01:38:34Z, on the first pass. Records: contract PASS 6551729528 (TIER_DEFAULT, widening) and ACCEPT 6551737976, both on head 1af0de3d.

    probe on ui/packages before (755794fd~1) now (origin/main)
    onRowGroupsChange 0 25
    onLaneRowsChange 0 17
    listSiblingSetOf 0 6
    ListViewRowGroup 0 7

    The card closed on Fixes; pm:dispatched comes off in the same stroke as this note. A grouped list or a kanban board now scopes the record drawer's count and ↓ ↑ to the opened record's own group or lane; an ungrouped list is unchanged.

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, searchdomain:uienhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions