Skip to content

Phone list: offer sort and the list search at 390 px — today both are hidden and the code tells the reader to switch to desktop #28911

Closed

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

Filed by the record-page epic seat from a second console review under epic #26676. An independent reviewer walked the console on main bdb19ca6d9, with examples/app-crm as the backend, at 1440 and 390 px. The seat then re-read the evidence. The maintainer approved the seat's checked list: 「Fable 评估(核对后) 同意立卡」 (2026-11-02). Code readings below are on main 5e1b9b0a77. No domain:* label is set: triage routes this card.

Observed

At 390 px the list toolbar offers 「在队列中」, filter and display. Sort and the list's own search are gone. Global search is the only way to find a name, and it spans objects and ignores the current view.

Reading

ui/packages/plugin-list/src/ListView.tsx:6001-6010: the sort trigger is hidden sm:inline-flex, and the comment says "Mobile relies on the (typically pre-sorted) default view; users who need ad-hoc sorting switch to desktop." The list search is desktop-only too (around line 6418), and its comment calls a list-scoped search redundant beside the global search.

The approved list stated this as deliberate today and left the scenario to the maintainer. The maintainer's approval above is the decision to offer both on the phone.

Target

  1. The phone list offers sort. The seat recommends placing it in the phone's existing display sheet, so the toolbar gains no new control.
  2. The phone list offers its own search as an icon that expands in place.
  3. Both respect the same userActions flags as on desktop. No new key and no new option.
  4. The comment that sends the reader to desktop goes.

Stay within the phone layout of #27058: card rows and a bottom action area are unchanged.

Acceptance

  • At 390 px, sort and search both work, and the card list reflects them.
  • A view that turns either off on desktop has it off on the phone.
  • Touch targets meet the existing phone size.
  • Tests and a 390 px screenshot are linked from the PR.

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

    Ruling confirmed · 2026-11-02T04:13Z. The seat asked the maintainer to confirm that the approval quoted in the body was a decision on this card's product question. The maintainer: 「#28911 和 #28912 都保留,按卡上写的做。」 The Target stands as written.

  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: priority:p2 · domain:ui · pm:queue · 2026-11-02T05:10Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Claim: PM loop round 16 · 2026-11-02T05:23Z
    Session: session_01QsR2jSR5zW3jcFhYpwXtjZ (card thread, os-dev); dispatched by seat session session_01QsR2jUJ19MstFvFhjgiYTu
    Account: zhuangjianguo
    Branch: claude/project-thread-253fg4 (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-28911
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/plugin-list/src/ListView.tsx (the phone toolbar and the phone display sheet it opens), the component that draws that sheet, the list.* keys in ui/packages/i18n/src/locales/* only if a key is missing, their tests, and a root .changeset (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6569589584
    Premise: holds (at origin/main 62b3ec36: the phone list toolbar hides sort and the list search at 390 px, with a comment sending the reader to desktop)
    Serial constraints cleared: none known. #28908 and #28948 edit other parts of ListView.tsx in parallel; the hunks stay apart, whichever lands later merges main.

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

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jSR5zW3jcFhYpwXtjZ
    os-dev-report

    {
      "issue": 28911,
      "status": "done",
      "branch": "claude/project-thread-253fg4",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29054",
      "session": "session_01QsR2jSR5zW3jcFhYpwXtjZ",
      "premise_still_valid": true,
      "summary": "Below sm the list toolbar now offers Sort and the list search. Sort rides in the Display panel through a new phone-only (sm:hidden) sort slot on ViewSettingsPopover that draws the same Sort panel the toolbar popover draws (sortPanelBody, one write door); the bar's Sort trigger hides below sm only when that panel is offered (sortInDisplay), so compactToolbar false or a list with no Display panel keeps Sort on the phone bar. Search is a sm:hidden icon at the bar's touch size (h-7 min-w-7) that expands in place into a 16px field; Enter/Escape fold it to the icon carrying the keyword, clear empties and folds. Both read the existing showSort/showSearch userActions flags; no new key, option or i18n key. The two desktop-only comments are gone. The Display panel takes the phone's width below sm (w-[calc(100vw-2rem)] sm:w-80), as Filter and Sort do. Measured in the real Console on app-crm at 390 px: search glo leaves one card, a Display sort re-orders the cards; desktop 1440 unchanged.",
      "tests": "New ListView.phoneSortSearch-28911.test.tsx 9/9. plugin-list full suite at 0f0991d3: 179/180 files, 1735/1736 tests; the one red was the displayPopover-12423 cluster-order pin, updated at 51eb0f6f. 19 plugin-list files naming the Display panel / Sort / Search triggers: 19/19 files, 390/390 tests at ee663d49 and again at merged head 8998c718. 10 consumer files outside plugin-list (app-shell ObjectView/PageView/print/grouped-search, plugin-report) + the updated pin: 11/11 files, 115/115. ui vitest run scripts/ at ee663d49: 169 passed, 2 skipped files; 4900 passed, 2 skipped tests. Ablations (scripted mutation under trap, restored to HEAD, hash match): Sort trigger never hidden on phone -> 1/9 red (narrow sort test); phone search drawn at every width -> 1/9 red (wide search test). No dist leg: the tests import ListView from source.",
      "gates": "dispatch-gates --commands at 0f0991d3: 34 derived, 34 run (33 in the loop + vitest run scripts/), each exit 0; --ran reconciliation: 34 derived, 34 run, 0 NOT-MEASURED (derived zero). Re-run at 8998c718: check-sdui-manifest exit 0, check-changeset-no-major --base origin/main exit 0, check:nul-bytes exit 0. pnpm --filter @object-ui/plugin-list run type-check exit 0 (0032651d and 8998c718). eslint on ListView.tsx, ViewSettingsPopover.tsx and the new test: 0 errors. PR-body gates with the body as GITHUB_EVENT_PATH: check-changeset-no-major, check-adr-0087-registration, check-closing-keyword-parity, check-partof-closing-keyword exit 0. CI check-runs: queued/in_progress at report time.",
      "line_budget": "513 changed lines (436+, 77-) across 5 files before the main merge; under 3000, not Tier H",
      "files_changed": [
        ".changeset/28911-phone-list-sort-search.md",
        "ui/packages/plugin-list/src/ListView.tsx",
        "ui/packages/plugin-list/src/components/ViewSettingsPopover.tsx",
        "ui/packages/plugin-list/src/__tests__/ListView.phoneSortSearch-28911.test.tsx",
        "ui/packages/plugin-list/src/__tests__/ListView.displayPopover-12423.test.tsx"
      ],
      "deviations": [
        "Sort panel body moved into one constant (sortPanelBody) defined just above ListView's render return, and the Display condition lifted to displayOffered there; both outside the phone toolbar hunk, unchanged in content, so #28908/#28948 may see a nearby hunk.",
        "Display panel width changed below sm (w-80 -> w-[calc(100vw-2rem)] sm:w-80): at 320 px the Sort rows wrapped. Desktop width unchanged.",
        "PR not assigned and no reviewer requested (os-dev rule), although the session harness asked for the requester as assignee/reviewer.",
        "Screenshots are in /mnt/project-files/issue-28911/ (01-07); the PR body asks the seat to link them. Real Console (ui/apps/console vite on :5419) against examples/app-crm objectstack dev --fresh on :4419; both torn down by recorded PID and port.",
        "Branch merged origin/main ab085a04 before pr_create (only additive i18n locale keys came in); touched tests and type-check re-run on the merged head."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "5 — GitHub MCP reads only: issue_read x3 (#28911 get, get_comments x2), issue_read get_comments #28865, pull_request_read get #28902; no write tools",
      "api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#29054) and this os-dev-report comment via post-stamped; plus git push (not a REST write)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · on the phone no control shows that a sort is active (the Display badge counts display settings only; the desktop Sort trigger's badge is hidden below sm) · noted in the PR's acceptance notes, not filed",
        "carrier: none · SortBuilder's field/direction selects truncate labels at phone width (Creat…), as in the existing Sort popover at that width · noted, not filed"
      ]
    }
  7. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Landed · 2026-11-02T07:42Z · PR #29054 merged through the merge queue as f67bbeca at 2026-11-02T07:40Z (GitHub's clock). ACCEPT 6570855098 at head 8998c718.

    probe before (f67bbeca~1) now (origin/main)
    sort in plugin-list/src/components/ViewSettingsPopover.tsx 0 5
    ListView.phoneSortSearch-28911.test.tsx exists no yes

    Fixes #28911 closed this card. pm:dispatched comes off in the same stroke as this note. #29057 (phone sort indicator and label truncation) stays open as its own card.

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:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions