Skip to content

fix(app-showcase): scope the command center work queue to in-review tasks - #25534

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-25503-showcase-review-queue-filter
Oct 23, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-25503-showcase-review-queue-filter

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Sales · project thread

Fixes #25503

Clause-②: no
Metadata-protocol: none

What changed

On the showcase command center (examples/app-showcase/src/ui/pages/command-center.page.ts), the bottom panel cc_queue_g is titled 待审核列表 · Work Queue and carries the badge 审批中, but its object-grid had no filter and listed all 10 seeded tasks, done ones included. The KPI tile cc_k3 (待复审 Review) above it counts only status = in_review.

Both blocks now read one module constant, IN_REVIEW = [{ field: 'status', operator: 'equals', value: 'in_review' }]. The tile passes it to kpi() as before, and the grid gets filter: IN_REVIEW, so the panel lists the set the tile counts (2 rows on the stock seed).

Landing: the file the claim names. No packages/spec edit.

Which key object-grid reads

filter, singular, as a ViewFilterRule array:

  • Spec: ObjectGridPropsSchema in packages/spec/src/ui/component.zod.ts (the filter: z.array(ViewFilterRuleSchema, …) member, line 5055 at base 1ff43b67ea) is described as "lowered to the wire $filter. THE key, singular — not the plural misspelling". filters is declared only as an alias of filter (FILTERS_TO_FILTER), and defaultFilters is a retired key.
  • Renderer inputs: the committed sdui.manifest.json, generated from objectui's built tree at the .objectui-sha pin 6fb31dc, lists filter (type array) among object-grid's inputs. It has no filters input.
  • Showcase precedent: examples/app-showcase/src/ui/pages/my-work.page.ts filters its object-grid the same way. That page is the one showcase my-work: the personal work queue authors filters: (plural) and no $filter ever reaches the wire — the grid lists every row #7750 was about: the plural filters: was written there but never read.

The renderer's own read point (objectui plugin-grid/src/ObjectGrid.tsx reading schema.filter) is cited from that page's comment. This session can only read this repository, so I did not open it at the pin myself.

Pin

examples/app-showcase/test/command-center-metric-filter.test.ts gains a describe block. It finds cc_queue_g and cc_k3 anywhere in the page as authored, helpers included, and asserts four things:

  • the queue's filter equals the in_review rule array;
  • the queue's filter equals the tile's filter;
  • both blocks read the same objectName;
  • the whole cc_queue_g properties bag passes ComponentPropsMap['object-grid'].safeParse.

Tests (head 15ef279240)

  • pnpm --filter @objectstack/example-showcase exec vitest run --maxWorkers=2 test/command-center-metric-filter.test.ts: Test Files 1 passed, Tests 7 passed.
  • pnpm --filter @objectstack/example-showcase test: Test Files 38 passed (38), Tests 465 passed (465), lock VERDICT command-exit 0.
  • pnpm --filter @objectstack/example-showcase typecheck: exit 0. tsc --listFiles includes the test file (count 1).
  • pnpm --filter @objectstack/example-showcase validate (os validate): Validation passed, exit 0.
  • Ablation: node scripts/ablation-replace.mjs replaced the anchor 'due_date'], filter: IN_REVIEW } }, with 'due_date'] } }, (anchor x1 to x0, blob a98af74d6112 to 8af132bc2407).
    • Red: 2 of 7 failed, "scopes the queue to in_review tasks through filter" and "carries the same rules as the tile cc_k3".
    • Restore: blob == HEAD (a98af74d6112), git diff HEAD empty.
    • No build leg: the test imports the page from the package's own src.

Gates

node scripts/pm/dispatch-gates.mjs --commands derived 45 commands at 15ef279240. 44 exited 0. pnpm check:dual-build-cjs-loads exited 3 with PREREQUISITE NOT MET because the worktree built only the showcase's dependency closure, so that one is NOT MEASURED locally and CI's Lint & Repo Gates covers it. --ran reconciliation: "45 derived famil(ies) accounted for — 44 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)".

Changeset

None, with skip-changeset. @objectstack/example-showcase is private: true, so nothing in this diff publishes.

Acceptance notes

  • cc_k3's filter is now read through the shared constant rather than written inline. The value it counts is unchanged.

🤖 Generated with Claude Code

https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy

…asks

The bottom panel cc_queue_g is titled as a review queue and badged as
pending approval, but its object-grid carried no filter and listed every
task, done ones included, while the KPI tile cc_k3 above it counts the
in_review set. Both blocks now read one IN_REVIEW rule array through the
key object-grid declares and reads, `filter`.

The command-center test pins the queue's filter, holds it equal to the
tile's, and parses the grid's properties against its ComponentPropsMap row.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · 2026-10-23T20:46Z

domain:services seat 1 (seat post #6021) · os-sales · session_016g7nYP9wdNx1GDa5XDr7Uy · card #25503 (S, in-seat subagent; claim 6373407615; os-dev-report 6374226470) · reviewed head 15ef279240

  • Diff: 2 files, +74 / −2.
    • One module constant IN_REVIEW (status equals in_review) is now read by both blocks: the KPI tile cc_k3 passes it to kpi() as before, and the work-queue grid cc_queue_g gains filter: IN_REVIEW.
    • The panel titled 待审核列表 / 审批中 now lists exactly the rows the tile counts.
  • Seat check:
  • Pins (report):
    • The existing test/command-center-metric-filter.test.ts gains a describe block. It asserts that the grid scopes through filter and carries the same rules as cc_k3.
    • Ablation (dropping filter: IN_REVIEW) turns 2 of 7 red, and the restore is clean.
    • Showcase: 465 / 465 tests pass. Typecheck exits 0, and os validate passes.
    • dispatch-gates: 44 of 45 pass. dual-build-cjs-loads was not measured locally (prerequisite not met) and is covered by CI.
  • CI on this head: 33 success and 12 expected skips, none failed or pending (45 runs).
  • Mergeable: git merge-tree onto today's main (74496c64b0) is clean.
  • Body: in this stroke the seat adds the attribution header and requests the os-sales reviewer. The footer is present.
  • Declarations:
    • fix(app-showcase), Clause-②: no, Metadata-protocol: none.
    • skip-changeset, because the showcase package is private.
    • No contract-review record and no dogfood battery are owed, and there are no out-of-scope findings.
  • Landing:

Generated by Claude Code

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

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

showcase: the command center's "待审核列表 · Work Queue" (badge 审批中) has no filter, so it lists every task including completed ones

2 participants