Skip to content

console phone list: card rows draw every shown column as a label / value line — the board's row is the name, one subtitle line and one status chip #28484

Closed

Description

@objectstack-fleet

domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4

Filing gate: ③ a follow-up the seat named in the ACCEPT of PR #28477 (#27058), item 6(b), filed after it landed. ⛔ Not a claim. Triage sets the lane and grade.
Reach: every reader on a phone (< 768 px) on any grid list or enlarged related tab.

Observed

On main after #27058 (PR #28477), the phone list's card rows (ObjectGrid's mobile cards, #26896) draw the declared name field, then every shown column as its own line, most as 「label … value」 (shot 01 of PR #28477: name, status chip, score, 公司 row, 来源 row; ≈ 290 px per lead). The enlarged related tab's cards (shot 11) sit inset from the body width (x ≈ 40–350 of 390).

#27058 Target 2 and the board's list frame (RecordMobile.dc.html at a7825499aa, frame 1) describe the row as: the declared name field as the title, one subtitle line from the first two shown columns (「Atlas Construction · Director of Sales」), one status chip at the right; ≈ 60 px per row, ten rows in the first screen. #27058's file surface did not include plugin-grid, so PR #28477 left the card face as it was.

Wanted

Links back: #27058, PR #28477, #26896, #26676.

Activity

  1. added
    enhancementNew feature or request
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 31, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Claim: PM loop round 2 · 2026-11-01T03:52Z
    Session: session_01L9qibw2uhdSeHYfnZdAf4V (seat; implementation by card thread session session_01L9qibyXUUW6oMgmoPfVFvW, mode:thread)
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-f7fyew
    Worktree: objectstack-issue-28484
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/plugin-grid/** (the mobile card face), the enlarged related tab's container padding once measured (the thread reports the path before editing it), tests, root changeset (stop on breach; explain in the report)
    Container & model: S–M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds (filed 2026-10-31T23:00Z after PR #28477 landed; ui seat 5, its filer, signed off 2026-11-01T01:39Z)
    Serial constraints cleared: siblings #28469 (plugin-detail tab row) and #28497 (UnifiedSidebar) run beside it on other files.
    Order: /mnt/project-files/ui-seat-1/r2026-10-31b/dispatch-28484.md, under the maintainer's 2026-11-01T03:47Z 「任务有一大堆啊,都可以派,包括 p3」.

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Claim amendment 1 · 2026-11-01T03:55Z · amends claim 6553085655 at the card thread's measured request (origin/main 1f1a369b). Append-only.

    1. Surface, added: ui/packages/plugin-detail/src/RelatedList.tsx, the isMobile && (type === 'grid' || type === 'table') arm only, for the ENLARGED related tab's face: it hands an object-grid node (inline { provider: 'value', items }, the same columns, onRowClick) instead of object-gallery, so the enlarged tab's phone cards take plugin-grid's card face at the body's full width. Compact related cards stay as they are.
    2. Why: the enlarged tab's phone cards are not ObjectGrid but ObjectGallery (wrapper grid gap-4 p-4, the measured inset); plugin-grid depends on plugin-detail, so the face cannot be imported there, and a registry-resolved object-grid node avoids the cycle.
    3. Card face plan inside plugin-grid, as measured: title = declared name field; status chip = the shown column detectStatusField (@object-ui/types) names, drawn through its desktop cell; subtitle = the first two shown non-title, non-status columns joined with 「 · 」, masked and empty skipped; the per-column lines and the name-keyword stage heuristics go. Tests pinning the old lines are rewritten to the new face.
  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibyXUUW6oMgmoPfVFvW

    os-dev-report

    {
      "issue": 28484,
      "status": "done",
      "branch": "claude/project-thread-f7fyew",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28532",
      "session": "session_01L9qibyXUUW6oMgmoPfVFvW",
      "premise_still_valid": true,
      "summary": "ObjectGrid's phone card row (plain and grouped lists, below 768 px) now draws the declared name field as title, one subtitle line joining the first two shown non-title non-status columns through their desktop cells with ' · ' (masked/empty skipped), and one status chip at the right (detectStatusField's column, drawn through its own cell); the per-column label lines and name-keyword heuristics are gone. The enlarged related tab on a phone hands object-grid its inline rows instead of object-gallery (RelatedList.tsx, claim amendment 1). Measured on app-crm at 390 px: lead rows 138 -> 62 px; enlarged related cards x 40-350 -> 32-358.",
      "tests": "head d63d4c94. vitest packages/plugin-grid/ packages/plugin-detail/: VERDICT command-exit 0, 627 files passed / 1 skipped, 5516 tests passed (on c4721de6; d63d4c94 adds only ui/scripts/__tests__ + plugin-grid/scripts/build-css.mjs). vitest scripts/ (ui): command-exit 0, 169 files / 4900 tests passed on d63d4c94. type-check plugin-grid + plugin-detail after dts closure build: command-exit 0. New phoneCardRow-28484 (7 tests) ablated against origin/main ObjectGrid.tsx: 6 failed / 1 passed (768 px control), restored, git diff HEAD empty. New RelatedList.enlargedPhoneCards-28484 (4 tests) green. Six older card pins rewritten onto the new face, none deleted.",
      "gates": "dispatch-gates --commands: 35 derived, all run, all exit 0 (check-sdui-manifest + --self-test included; check:type-check-debt first returned exit 3 queue-timeout behind this thread's own suite, rerun under the lock: exit 0). --ran reconciliation: 35 run, 0 NOT-MEASURED, 0 UNRUN. ui check:new-line-citations: 0 new. CI check-runs: in_progress at report time.",
      "line_budget": "13 files, +412 / -284 (pre-PR diff vs origin/main)",
      "files_changed": [
        ".changeset/28484-phone-list-card-row.md",
        "ui/packages/plugin-grid/src/ObjectGrid.tsx",
        "ui/packages/plugin-detail/src/RelatedList.tsx",
        "ui/packages/plugin-grid/scripts/build-css.mjs",
        "ui/scripts/__tests__/percent-storage-callers-11475.test.ts",
        "ui/packages/plugin-grid/src/__tests__/phoneCardRow-28484.test.tsx",
        "ui/packages/plugin-detail/src/__tests__/RelatedList.enlargedPhoneCards-28484.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/ObjectGrid.emptyPlaceholderAffordance-8491.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/gridCurrencyFaces.displayLocale-9909.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/maskedColumnSurfaces-10583.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/mobileCardDateLocale.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/mobileCardFieldCurrency-10423.test.tsx",
        "ui/packages/plugin-grid/src/__tests__/mobileCardTitleNameField-13150.test.tsx"
      ],
      "deviations": [
        "Surface: two ledgers outside the declared surface carried the removed card code and went red: ui/scripts/__tests__/percent-storage-callers-11475.test.ts (row deleted, the call is gone) and plugin-grid/scripts/build-css.mjs MUST_SURVIVE (two specimens only the old card produced swapped for two still produced only here). Both shrink or keep-equal, no ceiling raised.",
        "Neighbour files: RelatedList.tsx touched (claim amendment 1); PR #28466 that declared it is merged. None of #28477's files touched.",
        "Screenshots are in project files ui-seat-1/r2026-10-31b/28484/, not on GitHub."
      ],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub calls",
      "api_writes": "2 — relay pr_create (#28532), this os-dev-report comment via post-stamped",
      "open_questions": [],
      "out_of_scope_findings": ["carrier: none · subtitle values are desktop cells, so a select/percent subtitle value draws its badge/bar; noted in Acceptance notes, not filed"]
    }
  5. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibw2uhdSeHYfnZdAf4V

    Landed · 2026-11-01T05:49Z · PR #28532 merged through the merge queue as 69dfac0a at 2026-11-01T05:48:10Z. Seat ACCEPT 6553875570 (d63d4c94).

    probe before (69dfac0a~1) now (origin/main)
    grid-card-subtitle test id in ui/packages/plugin-grid/src/ObjectGrid.tsx 0 1
    enlarged phone face (objectstack#28484) in ui/packages/plugin-detail/src/RelatedList.tsx 0 1

    The card closed on Fixes, and pm:dispatched is removed in the same stroke as this note.

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:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions