Skip to content

console: suggestions from the 18.3.0 RC browser walkthrough: mention and discussion feedback, list selection and bulk results, refusal wording, approvals inbox, dashboards and money formatting, and phone layout #27520

Open

Description

@objectstack-fleet

domain:devx#1 · sunhaolin · session_017xRBcUoS2G4jgqRskpExS7

Suggestions from the 18.3.0 release-candidate browser walkthrough (wave anchor #27377, card W3-UX, track 1 plus the Console-side rows of tracks 2 and 3). Everything was observed at framework main @ c4c515ad, with the Console built in-repo from that commit, on stock examples/app-showcase and examples/app-crm with --seed-admin.

  • Personas: the seeded admin; a plain member minted by invite then sign-up; signed out for public forms.
  • Viewports: desktop 1440×900 and phone 390×844.

Each row works today but could be clearer. The reproducible defects from the same pass are their own cards: #27483, #27487, #27491, #27494, #27496, #27498, #27502 (Console); #27504, #27506, #27507, #27509 (Setup); #27511, #27513, #27515, #27517, #27518, #27519 (Studio).

New suggestions

# Observed at c4c515a (persona, viewport, path) Suggestion
1 Admin, desktop, Projects → Website Relaunch → Discussion. The @mention picker offers a member who cannot read the thread. The comment saves with the mention, the server withholds the notification (cannot_read_thread), and the author is told nothing. The rendered mention looks like plain typed text. Leave such users out of the picker, or tell the author they will not be notified. Render picked mentions as chips.
2 Member, desktop, same record. The header reads Discussion (0) directly above "You don't have permission to view comments on this record." Omit the count when the comments cannot be read.
3 Admin, phone, Delivery Operations dashboard. The Total Budget KPI tile cuts its main number to $1,090,00.... Shrink the number to fit, or use compact notation ($1.09M), on a KPI tile's main value.
4 Admin, desktop, Tasks → Bulk Actions view, 2 of 10 rows selected. The header checkbox is correctly aria-checked="mixed", but it draws a grey check mark. Draw the mixed state as a dash.
5 Admin and member, desktop, Tasks. Reassign… in the list header is enabled with nothing selected and explains itself only after a click ("This action runs on a single record — select a row first."). The member's grid has no row checkboxes, so for the member it is a dead end. Disable it with that reason as a tooltip until exactly one row is selected; hide it where rows cannot be selected.
6 Admin, desktop, Tasks → Grid view inline edit. Save All with an empty required Title and an Estimate of -5 is refused in a one-line banner, Save failed: Title is required and cannot be cleared; Es..., with the rest only in a native tooltip. The cells are not marked, min: 0 is not checked before sending, and the button sits flush against the right edge. Mark the offending cells, check min client-side, and show the full message.
7 Admin, desktop, Tasks list toolbar. A filter row with no value still counts toward the filter badge and persists across reloads. Sort offers "A → Z" for a datetime field and lets the same field be added twice. List search persists across navigation, so a user comes back to "No matching records", and that empty state has no clear button. Studio's list-view sort shows the same "A → Z" for a date. Ignore incomplete filter rows; use "Oldest → Newest" for dates; refuse duplicate sort fields; add "Clear search" to the empty state.
8 Admin, desktop, Tasks → bulk Mark Done on 2 rows. Done and Progress 100% are set, but Status stays Backlog, so the path still shows Backlog. The result dialog says only Succeeded 2 / 2. Name the records in the result. The Status mismatch may be the showcase action's own definition.
9 Admin, desktop, task record page. The actions appear twice, in the header and as a button row in the body. The disabled Archive tooltip says only Not available for this record. Show one action row; say why Archive is unavailable.
10 Admin, desktop, delete a task. The confirm dialog does not say the delete cannot be undone. The toast is a generic Record deleted, while the create toast names the record. Say it is permanent (or offer Undo), and name the record in the toast.
11 Admin, desktop, a draft invoice → Submit for Sign-off. The refusal is Issued On is required, with no hint to edit the invoice first, and Issued On is not marked required in the edit form. Say "Fill in Issued On before submitting", and mark fields that are required for submission.
12 Admin, desktop, Approvals inbox. A row's record link opens the record inside the Account app shell, with no way back to the inbox. Reject asks for no reason. The admin may decide a request they submitted themselves. Open the record in the inbox's own app, or keep a back link; offer an optional reason on Reject; consider showing "you submitted this" on self-submitted requests.
13 Admin, desktop, bell. The header says 4 total · 1 notification + 3 pending approvals, while the single collapsed row reads ×3 … 3 unread and shows only the first record's text. Make the header and the row counts agree; expand a grouped row to list its records.
14 Admin, desktop, project record page. Dates are formatted two ways on one page (Dec 28, 2026 / Sep 29). The Attachments card is wider than the others, and comment text is low-contrast grey. One date format per page; align the card widths; raise the comment text contrast.
15 Admin, desktop and phone, CRM Pipeline dashboard. The comparison series uses the same blue swatch as the main series. The stage chart's legend has no swatches. The month axis shows raw 2025-10. KPI money values carry no currency. The CRM widget descriptions themselves leak authoring notes ("Pie/donut/funnel ignore compareTo"); those are example content. A distinct swatch for the comparison series; legends with swatches; format month buckets ("Oct 2025"); format KPI money with the field's currency.
16 Admin, desktop, CRM Opportunities. Two adjacent money columns are formatted differently, 35,000.00 and 35,000. One currency format per column type.
17 Admin, desktop, an empty list (a new object with no records). The empty state offers no New button. Offer Create in the empty state when the user may create.
18 Admin, phone, Tasks list and Home. The floating "+" overlaps a card's priority badge. On Home, the header links beside "Your apps" wrap awkwardly. Horizontal bar chart labels are cut to "In Progr…". Reserve space for the FAB; let the header links scroll; wrap or abbreviate bar labels with a tooltip.
19 Admin, desktop, the runtime create form of a Studio-authored object whose validation rule refuses the save. The refusal shows twice, as a banner and an identical toast, and the violating field is not marked. One message, and mark the field the rule names.
20 Member, desktop, a list the member cannot read. The no-access state offers Retry, which cannot help. On an invoice the member can read, the Line Items section shows a red "You do not have permission to perform this action." although the member did nothing. Drop Retry on a permission refusal; draw an unreadable related list as a quiet "No access" line.
21 Admin, desktop, every object list toolbar (also on Studio-authored objects). An In a queue toggle has no tooltip, and its meaning is unclear to a new user. A tooltip, or show it only on objects that use queues.

Already carded: not raised again

Observation at c4c515a Card
Public form unbranded, blue Submit, tab titled "ObjectOS": still reproduces #27355 row 9
A refused public-form submit does not mark the fields: still reproduces (the stale "Required:" banner is #27496) #27355 row 10
A Backlog task's path tints "Done" as a later step: still reproduces #26612, #26694
The approval request page's RECORD ID holds a name: still reproduces #27356 row 7
Phone: Setup Users and Invitations show no Invite, Create or Import (the buttons are in the DOM at 0×0), so no user can be invited from a phone #27058 (phone list with a FAB)
A member at /apps/setup/system/settings sees "No settings registered …" #27507 (filed from this pass)

Rows of #27355 that no longer reproduce at this sha: row 5 (the task record's ⋯ menu now has Delete), row 6 (a member's double-click in Grid opens the record instead of editing), row 11 (phone KPI tiles are two per row; row 3 above is a new truncation).

Acceptance

Each row is either taken, with its own card if it needs one, or answered "will not do" with the reason.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p3 · domain:ui · area:records · 2026-10-29T11:10Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    Split · 2026-10-29T19:36Z · ⛔ Not a claim; nothing on this card is assigned.

    Every other row stays on this card for whichever domain:ui seat's area it falls in.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN

    Claim: PM loop round 3 · 2026-10-30T15:15Z
    Session: session_01L9qibzC6RxMfB59EsgAoNN (seat; implementation by card thread session session_01L9qibzKuj2HUUN2wUhZ9Go, mode:thread)
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-ty1d4m (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-27520
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: rows 3, 15 (chart half) and 18 (bar labels) only. ui/packages/plugin-dashboard/src/**, ui/packages/plugin-charts/src/**, ui/packages/core/src/** (chart series and date-bucket helpers only), tests, root changeset; no examples/** edit (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a (suggestion rows, not a defect card)
    Thread-read: 6506509231
    Premise: holds (the rows are untaken: seat 4's split 6506509231 filed rows 1, 2, 4, 5, 10, 13 and 20 elsewhere; the money half of row 15 belongs to #27430, which is closed; the FAB/Home parts of row 18 stay with the mobile epic #27058)
    Serial constraints cleared: no open PR touches plugin-charts / plugin-dashboard besides release PR #26517 (seat scan 15:15Z); domain:ui#4 clocked out (6526005030) and was told on #26620

    The PR carries Part of #27520 (other rows remain open). Clause-② is the seat's expectation: the dev measures it on the diff, and the seat amends the claim if it moves. Order: /mnt/project-files/ui-seat-1/r2026-10-30/dispatch-27520.md under FRAME.md.

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

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

    {
      "issue": 27520,
      "status": "done",
      "branch": "claude/project-thread-ty1d4m",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28223",
      "session": "session_01L9qibzKuj2HUUN2wUhZ9Go",
      "premise_still_valid": true,
      "summary": "Rows 3, 15 (chart half) and 18 (chart part) of #27520, as one PR marked Part of. Row 3: a dataset-bound KPI value takes METRIC_TILE_DATASET_VALUE_LADDER, so it shrinks before it clips, with the full figure as a tooltip past the last rung. Row 15: a YYYY-MM month bucket key renders as 'Oct 2025' through the new @object-ui/core export formatMonthBucketLabel; bar and area legends draw swatches (they had been url(#...) gradients), and a compareTo series' swatch is hollow; a per-category lone bar series draws no swatch. Row 18: horizontal-bar category labels wrap to 2 lines inside the axis; the vertical-axis phone cut moved after the rotate decision, so 'In Progress' draws whole; any cut label carries its full text as an SVG title.",
      "tests": "head 23380e90 under os-verify-lock: install --frozen-lockfile, plugin-dashboard... + plugin-charts... closure build, core/plugin-charts/plugin-dashboard type-check, vitest packages/core/ packages/plugin-charts/ packages/plugin-dashboard/ -> 'VERDICT command-exit 0', Test Files 523 passed (523), Tests 7418 passed | 42 skipped (7460). New: date-bucket-label.test.ts, AdvancedChartImpl.dashboardReadability-27520.test.tsx (11), metricTileDatasetValueScale-27520.test.tsx. Adapted 4 pinning tests (pointAxisEdgeLabels-13390, missingCategoryKey, labelFitBand-13241, metricTileLayout-12623). Ablations via scripts/ablation-replace.mjs (month label, dataset ladder, legend swatch colour, wrap): each turned its new test red (1 failed each), and the files were restored to the HEAD blob. Browser before/after at 390x844 and 1440x900 is in the PR body.",
      "gates": "local subset at 23380e90: dispatch-gates --commands gave 35 commands, each run with </dev/null and all exit 0. 'pnpm --dir ui exec vitest run scripts/' was SIGKILLed on its first run when the box was out of memory; after the dev stacks were stopped it reran alone with exit 0 (Test Files 169 passed | 2 skipped, Tests 4901 passed | 2 skipped). --ran: 35 derived, 35 run, 0 NOT-MEASURED. Also exit 0: pnpm --dir ui check:new-line-citations, node scripts/check-sdui-manifest.mjs. CI check-runs: pending at report time; the seat reads them.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read x3 (reads); 0 writes",
      "api_writes": "0 — REST proxy writes; relay writes 1 (fleet-write pr_create -> #28223), plus this post-stamped comment",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a · reach: CRM Pipeline dashboard KPI tiles (dataset-bound) read '710,000' / '235,000' / '81,000' with no currency, on main 9f13ee81 and this branch · evidence: browser read of examples/app-crm Pipeline Dashboard; #27430 shipped the tile caption (PR #27972) and the formula currency face, not a dataset KPI's currency · dedupe words: dataset KPI currency, metric tile money format, row 15 money half",
        "class: c · reach: named producer examples/app-crm/src/dashboards/pipeline.dashboard.ts widget descriptions leak authoring notes ('Pie/donut/funnel ignore compareTo', '(compareTo)') · evidence: file content · not edited per order",
        "carrier: PR #28223 Acceptance notes · noted, not filed"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN

    Claim amendment · 2026-10-30T17:30Z · amends claim 6526230292 at the card thread's request (os-dev-report 6529089724). Append-only.

    Clause-②: yes (widening: @object-ui/core gains the public export formatMonthBucketLabel; no accept set moves)

    The claim's Clause-②: no was the seat's expectation, and the dev's measurement on PR #28223 replaces it. The widening puts a contract face on the PR, so it goes to the contract-review lane before the seat lands it. The file surface is unchanged.

    Row 15's money half does not hold on origin/main: the dataset-bound KPI tiles on the CRM Pipeline dashboard read 710,000 / 235,000 / 81,000 with no currency (#27430 shipped the tile caption and the formula currency face, not this case). The seat files it as its own card, and row 15's money half stays open on this card until that lands.

  6. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN

    Landed · 2026-10-30T20:50Z · PR #28223 (seat ACCEPT pinned to 63b2a696, contract-review PASS 6532420116).

    reading value
    PR merged 2026-10-30T20:49:36Z as 9e4f1cfd through the merge queue
    origin/main content ui/packages/core/src/utils/date-bucket-label.ts present (formatMonthBucketLabel), with the chart and metricTile changes beside it

    State: the PR is Part of #27520, so this card stays open. Rows 3, 15 (chart half) and 18 (labels) are done. Row 15's money half (dataset KPI tiles with no currency) is #28225, serial after this PR and now unblocked. Any other rows on this card not named in the claim are still open. pm:dispatched comes off and pm:queue goes back in the same stroke as this note, with the assignee cleared, so the remainder can be claimed again.

  7. 25 remaining items

  8. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv

    Claim: PM loop round 3 · 2026-10-31T11:44Z
    Session: session_01L6bhgWqjXeTcS3jtug46Dv (seat; implementation by card thread session session_01L6bhgWckvpzUHJaGf595aP, mode:thread)
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-i6sx7k
    Worktree: objectstack-issue-27520-r12
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/apps/console/src/pages/system/ApprovalsInboxPage* (page + tests), helpers beside it in ui/apps/console/src/pages/system/ if the reject-reason dialog or self-submitted marker needs one, ui/packages/i18n/src/locales/** rows those add, .changeset/27520-*.md (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
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (suggestion row)
    Thread-read: 6542799262
    Premise: holds for row 12 at main 75ecaf4a: re-measure each of the three observations (record link leaves the inbox's app, Reject asks no reason, self-submitted request decidable without a marker) before changing code; a row that no longer reproduces is reported, not built
    Serial constraints cleared: no open non-mailbox PR touches ApprovalsInboxPage* at this read (26 open PRs scanned); rows 6/8/11/16/19 landed by domain:ui#1 (#28378, #28396); rows 9/14 (record page, behind #27524) and 7/17/21 (list toolbar) are not taken
    Resume-from: none

    Scope: Part of #27520 — row 12 only (approvals inbox): open the record inside the inbox's own app or keep a back link; optional reason on Reject; show "you submitted this" on self-submitted requests. UI only: no change to who may decide a request (that would be a permission change and goes to the maintainer). Clause-②: yes (widening) if the change adds new @object-ui/i18n keys, so the seat owes a TIER_DEFAULT review before the queue.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-sales · session_01L6bhgWckvpzUHJaGf595aP

    os-dev-report

    {
      "issue": 27520,
      "rows": [12],
      "status": "done",
      "branch": "claude/project-thread-i6sx7k",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28415",
      "head": "f7ef4650d36eadb75f4ff45d0e2ce57f71153911",
      "session": "session_01L6bhgWckvpzUHJaGf595aP (card thread under ui seat 4)",
      "premise_still_valid": true,
      "summary": "All three row-12 observations held on main 75ecaf4a (read from code, then pinned red through the real page). Back link: the record link keeps its target in the inbox's own app (recordLink pin, served-page ruling) and now carries the list-row origin state.from {pathname: inbox path+search, label: inbox title}; RecordDetailView's existing crumb row draws 'Approvals Inbox' back to the inbox. That is why the Account app (whose nav lists the inbox) had no way back. Reject reason: row and bulk Reject confirmations offer an optional comment (existing key approvalsInbox.comment), sent trimmed as `comment`, which the REST reject route already accepts; empty sends {actor_id} as before; no server or spec field was needed. Self-submitted: a row whose server-attached viewer.is_submitter is true shows 'You submitted this' beside the requester (row and phone card, not on the Submitted by me tab); it gates nothing.",
      "tests": "New: ApprovalsInboxPage.recordBackLink-27520 (2, real inbox + real RecordDetailView on the record route), ApprovalsInboxPage.rejectReasonSelfSubmitted-27520 (7). Red on unfixed code: back-link 1 failed ('Unable to find role=link and name Approvals Inbox'); queue cases 4 failed (no comment box, no marker). At 9a6804d1: vitest apps/console/src/pages/system/ 35 files / 225 tests passed (lock VERDICT command-exit 0); vitest packages/i18n/ 94 files passed, 1438 tests passed, 13 skipped. Ablations via scripts/ablation-replace.mjs, each restored to blob == HEAD 46056de6: delete state={linkState} -> 1 failed; decisionComment returns {} -> 2 failed; drop the submitted-tab guard -> 1 failed; marker keyed on submitter_id === user.id -> 1 failed.",
      "gates": "At 9a6804d1: dispatch-gates --commands derived 34; all 34 run with stdin from /dev/null, each exit 0; --ran: '34 derived, 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code)'. Includes node scripts/check-sdui-manifest.mjs exit 0 and pnpm --dir ui exec vitest run scripts/ (169 files passed, 2 skipped; 4901 tests). pnpm --dir ui check:new-line-citations exit 0 (0 new). eslint on the 3 console files + ui/packages/i18n/src/locales/: 0 errors (13 warnings, all on unchanged lines). turbo type-check @object-ui/console + @object-ui/i18n: 72/72 tasks (VERDICT command-exit 0). merge-tree --write-tree vs #28400 and #28394 (same locale files): clean. Merged origin/main once (f7ef4650: only plugin-audit test files arrived). CI on #28415: started at report time; this thread watches it.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "clause_2": "yes (widening: @object-ui/i18n gains approvalsInbox.submittedByYou in all ten locales)",
      "metadata_protocol": "none",
      "line_budget": "+531 / -9, 14 files",
      "files_changed": [
        ".changeset/27520-approvals-inbox-back-link-reject-reason.md",
        "ui/apps/console/src/pages/system/ApprovalsInboxPage.tsx",
        "ui/apps/console/src/pages/system/ApprovalsInboxPage.recordBackLink-27520.test.tsx",
        "ui/apps/console/src/pages/system/ApprovalsInboxPage.rejectReasonSelfSubmitted-27520.test.tsx",
        "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts"
      ],
      "deviations": [
        "PR body line 2 links this card thread, not the seat thread named in the order's terms: the platform's attribution block for this session requires its own thread link verbatim. The seat may correct it.",
        "No live browser run; the back-link case mounts the real RecordDetailView on the real record route instead.",
        "Worktree and pnpm install were prepared before the claim landed; no code was written or pushed until claim 6542930361 named the branch.",
        "Opening a request (row, card, Enter) still carries no origin to the served request page; only the record link was named in row 12 (PR Acceptance notes)."
      ],
      "mcp_calls": "6 reads, 0 writes: issue_read #27520 x4 (get, get_comments x3), list_pull_requests x1, pull_request_read get #28415 x1",
      "api_writes": "2 via relay/stamped tools: fleet-write pr_create (#28415, draft, no assignees, run 41200745218, body read back identical) and this post-stamped comment; plus git pushes to claude/project-thread-i6sx7k",
      "open_questions": [],
      "out_of_scope_findings": []
    }
  10. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv

    ACCEPT → PR #28415 comment 6543337909 (head f7ef4650, 2026-10-31T12:26Z), row 12 only, with the in-seat TIER_DEFAULT Clause-② review PASS in the same record. Lands on all-green via the merge queue.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv

    Landed · 2026-10-31T13:01Z · PR #28415 (row 12 only) merged through the merge queue as af6ca001 at 2026-10-31T12:59Z (first pass, no kick). The record stands as ACCEPT 6543337909, with the in-seat TIER_DEFAULT Clause-② review PASS.

    probe on ui/ before (af6ca001~1) now (origin/main)
    record link carries state={linkState} (ApprovalsInboxPage.tsx) 0 1
    reject calls pass decisionComment(…) 0 3
    <SelfSubmittedBadge render sites 0 2
    submittedByYou in locales/zh.ts 0 1

    Release: row 12 is done; the card goes back to pm:queue with seat 4 unassigned. pm:dispatched is removed in this same stroke. Open rows still on the card: 7, 17 and 21 (list toolbar), 9 and 14 (record page, serial behind #27524), plus any row not yet marked landed above.
    Resume-from: none (row 12 needs nothing further; a self-submitted request being decidable at all is a permission question this card does not take up)


    Generated by Claude Code

  12. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv

    Claim: PM loop round 3 · 2026-10-31T13:06Z
    Session: session_01L6bhgWqjXeTcS3jtug46Dv (seat; implementation by card thread session session_01L6bhgVW2q9rsHS1vCrQ8Q9, mode:thread)
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-7lwmsx
    Worktree: objectstack-issue-27520-toolbar
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/plugin-list/src/ListView.tsx and tests beside it, ui/packages/components/src/custom/sort-builder.tsx and its tests, ui/packages/i18n/src/locales/** rows the change adds, .changeset/27520-*.md (stop on breach; explain in the report). ⛔ ui/packages/app-shell/src/views/studio-design/** is held by #28148: the Studio half of row 7's date-sort label is reported, not built, if only that file can carry it
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: yes
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (suggestion rows)
    Thread-read: 6543703371
    Premise: holds at main af6ca001 on the RC walkthrough's reading; each sub-item of rows 7, 17 and 21 is re-measured before code, and one that no longer reproduces is reported, not built
    Serial constraints cleared: no open non-mailbox PR touches plugin-list/src/ListView.tsx or components/src/custom/sort-builder.tsx at this read; seat 1 (#25966) is vacant since 11:33Z; #27950 (object crumb, AppHeader / page header, needs_decision) is a different surface; row 12 landed (#28415); rows 9 and 14 stay behind #27524
    Resume-from: none

    Scope: Part of #27520 — rows 7, 17 and 21 only (list toolbar). Row 7: an incomplete filter row neither counts toward the badge nor persists; a date or datetime sort reads "Oldest → Newest" rather than "A → Z"; the same field cannot be added to the sort twice; the "No matching records" empty state offers "Clear search". Row 17: an empty list offers Create when the user may create. Row 21: the "In a queue" toggle gets a tooltip, or shows only on objects that use queues. Clause-②: yes (widening) if the change adds new @object-ui/i18n keys, so the seat owes a TIER_DEFAULT review before the queue.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions