Repository navigation
docs(qa): wave-3 checklist accuracy slice S5 — approvals.json, ux-conventions.json, i18n.json, dashboards.json, search.json (#27377) #28339
Description
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Sub-issue of #27377, the v18.3.0 release test sweep anchor. This is wave-3 checklist-accuracy slice S5, split out on the maintainer's word in seat session session_01QSeKYmTYfaPbLQD4BJfomW: 「同意」, to the seat's proposal to split S4–S8 into sub-issues so that both devx seats can work them. ⛔ Not a claim. Any devx seat may claim it. domain:devx is inherited from the parent.
Scope
Files: docs/qa/platform-checklist/areas/approvals.json, docs/qa/platform-checklist/areas/ux-conventions.json, docs/qa/platform-checklist/areas/i18n.json, docs/qa/platform-checklist/areas/dashboards.json, docs/qa/platform-checklist/areas/search.json. No other file. ⛔ No product code.
Rows: 21, from the seat's read-only census of every finding parked on #27377 (census note 6539602007), taken at origin/main 501c864dd5. Re-verify each row against the current head before editing. A row that no longer holds is reported as fixed upstream.
| census row | record | item | verdict | evidence (census) |
|---|---|---|---|---|
| 51 | #27409 | approvals.email-action-token-door |
STALE | steps[1] "a slot listed twice counts twice", but notified:1 was measured. |
| 52 | #27409 | approvals.status-mirror-field |
STALE | fixtures name no submitter persona with create on the trigger object. |
| 53 | #27409 | approvals.request-page-reply-and-reader-visibility |
STALE | acc[2] "a non-participant's by-id read on /data/sys_approval_request → 404". Every non-admin gets 403. The pin claim needs the same edit. |
| 104 | #27441 | approvals.record-page-decisions |
STALE | steps[9] and A4 have no "Admin override" menu. |
| 105 | #27441 | approvals.record-page-decisions |
STALE | acc[3].verify "inline-edit affordances are absent". In fact Edit is disabled and the band text is unnamed. |
| 106 | #27441 | approvals.inbox-metadata-actions |
STALE | requires[2] "the seeded approver of EXP-2001 / EXP-DEMO is the dev admin". Ada is routed too. |
| 107 | #27441 | approvals.quorum-m-of-n |
STALE | acc[4] "matches the API at each stage". The tally renders only while pending. |
| 108 | #27441 | approvals.per-group-signoff |
STALE | acc[2] "match the API at each stage". Same pending-only point. |
| 111 | #27441 | dashboards.chart-type-matrix |
STALE | acc[4] "render the SAME value as metric" (chrome differs); steps[4] does not say there are only 2 month buckets. |
| 113 | #27441 | i18n.strict-translation-key-rejection |
STALE | steps[0] "The name describe … still calls the locale code the convention"; no locale-shape variant. |
| 114 | #27441 | i18n.notification-localized-and-clears |
STALE | steps[4] "open the bell". Name the popover. The Home card now marks read (#27447, #27653). |
| 115 | #27441 | i18n.surface-matrix |
STALE | steps[7] contact form; automated.ref pnpm --filter @object-ui/components exec vitest run. |
| 123 | #27441 | search.console-global-search |
STALE | acc[3] "/apps///record/". The app segment is canonicalised to the package id. |
| 126 | #27441 | ux-conventions.write-feedback |
STALE | variants[4] "'Task marked done.'" and variants[5] "'Invitation sent to ${result.email}'". |
| 127 | #27441 | ux-conventions.write-feedback |
STALE | variants[1] does not name the Grid view. |
| 128 | #27441 | ux-conventions.write-feedback |
STALE | steps4 "drive it as a refused transition … on the record form or an inline status edit". |
| 162 | #27438 | search.field-scoped-narrowing |
STALE | Duplicate of the accuracy row: state the resolveSearchFields contract ([] = absent, [''] = 400). |
| 169 | #27438 | search.global-search-skips-unreadable |
STALE | requires[2] "last_login_ip is null on every row". The finding line is truncated in the comment but readable. |
| 170 | #27438 | search.field-scoped-narrowing |
STALE | No clause decides the empty override. Add one per spec resolveSearchFields. |
| 232 | #27438 | i18n.surface-matrix |
STALE | acc[7] "sixteen groups (the fifteen per-app groups…" (hooks added). The finding line is truncated. |
| 233 | #27438 | dashboards.analytics-exposure-gate-and-measure-aggregate |
STALE | requires[2] "an apiEnabled:false object with a cube … in the scratch app". Stock specimens exist. |
GAP rows are listed only where the census found a cheap fixture recipe. The other gaps stay parked on #27377.
Edit shape (wave 2's slices A–D; #27164 is the precedent)
revisiongoes up by 1.- main's
historystays an exact prefix, with ONE appended row citing the run record (QA run · release-18.3.0-w3-manual-api (25/25) · c4c515ad · 2026-10-29 · 23 PASS / 2 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #27392, QA run · release-18.3.0-w3-tier1-a (73/73) · c4c515ad · 2026-10-29 · 59 PASS / 14 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #27409, QA run · release-18.3.0-w3-tier1-b (89/89) · c4c515ad · 2026-10-29 · 79 PASS / 6 PARTIAL / 4 FAIL / 0 BLOCKED / 0 NOT-RUN #27438, QA run · release-18.3.0-w3-manual-browser (54/55) · c4c515ad · 2026-10-29 · 44 PASS / 2 PARTIAL / 8 FAIL / 0 BLOCKED / 1 NOT-RUN #27441 or QA run · priority:P0 (23/23) · c4c515ad · 2026-10-29 · 20 PASS / 3 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #27481) and [sweep] v18.3.0 release test sweep #27377. - The text is fixed to what the code says today.
- An edit may make a clause stronger or more precise. It never weakens a clause to make it pass.
- A finding that, on reading, is a product defect is NOT edited. It is reported for the seat to file.
- Keep
pnpm check:platform-checklistgreen. - Changeset: none (label
skip-changeset). - The PR says
Fixes #<this card>andPart of #27377.
Not in this slice (held on #27377 until ruled)
studio-authoring.expression-editors;- the SCOPE-negatives sweep, which includes
platform-core.notification-centernegative[3]; ai.mcp-stdio-fail-closed;- the UNCLEAR rows:
settings-organization-isolation-and-platform-rungandux-conventions.write-feedbackacc[1].verify, among others.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 31, 2026
domain:devx#1 · os-zhuang · session_01QUs3BvP5Aq9USg5GtmgAAR
Claim: PM loop round 1
Session:
session_01QUs3BvP5Aq9USg5GtmgAARAccount:
os-zhuangBranch:
claude/project-thread-6titvb(the card thread's platform-assigned push branch, the measured platform exception to the protocol branch shape)Worktree:
objectstack-issue-28339Domain:
domain:devxSeat:
domain:devx#1File surface:
docs/qa/platform-checklist/areas/{approvals,ux-conventions,i18n,dashboards,search}.json(stop on breach; explain in the report)Container & model:
M,mode:thread,model: default (dispatch-gates --tier: no path-derived mandate; 21 census rows needing code reads),effort: xhigh (p1)Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: none
Premise: holds (census 6539602007 at
501c864dd5; no commit on the five files since, at22ce3d13fe; the dev re-verifies each row at head)Serial constraints cleared: disjoint from in-flight slices #28338, #28340, #28342 and #28341; rows held on #28345 (incl.
ux-conventions.write-feedbackacc[1].verify) are out of scope; noneTaken at 2026-10-31T06:38Z on seat 2's hand-over (sign-off brief 6540114700: 「剩下的叫给 seat 1」).
objectstack-fleet commentedon Oct 31, 2026
domain:devx#1 · os-zhuang · session_01QUs3BrWDv9TR18p6R88RwQ
os-dev-report
{ "issue": 28339, "status": "done", "branch": "claude/project-thread-6titvb", "pr": "https://github.com/objectstack-ai/objectstack/pull/28372", "session": "session_01QUs3BrWDv9TR18p6R88RwQ", "premise_still_valid": true, "summary": "Re-verified all 21 S5 census rows at 22ce3d13. The five files are byte-identical to census base 501c864dd5, so the PM assumption holds. Corrected 16 items across approvals, ux-conventions, i18n, dashboards and search. Each item got revision +1, kept main history as an exact prefix, and got ONE appended row citing its run record (#27409 / #27441 / #27438) and #27377. None of the 21 rows was fixed upstream as a whole. Rows 162/170 (search.field-scoped-narrowing) had moved: the finding read an empty $searchFields as absent, but #27484/#27683 now refuse it, so the new acceptance[4] states today's refusal. No clause was weakened. There are two coverage additions (an i18n locale-shape variant and a search empty-override clause). No product defect was found.", "tests": "Docs-only ledger change. No package touched, so no package tests owed. Prefix check by script against 22ce3d13: 16 changed items, each with revision +1, history +1, old history a byte-equal prefix, and last row revision equal to the item revision. Area-level blocks, item count and order are unchanged. pnpm check:platform-checklist at 7397bb1f: OK, 16 areas, 352 items; symbol anchors 1073/1083 (10 on the named residual). No ablation: no tested behaviour changed.", "gates": "Head 7397bb1f. dispatch-gates --commands --repo objectstack-ai/objectstack exited 0 with 16 commands, and all 16 exit 0 (captured before any pipe): check-adr-links (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, plan-test-core-shards --self-test, lint check:doc-formula-expressions, check:ci-filter-parity, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist, check:refd-timer-probe, check:watch-hint-literal. check:doc-formula-expressions first exited 3 (PREREQUISITE NOT MET) until formula and lint were built under os-verify-lock (VERDICT command-exit 0); it then exited 0. --ran reconciliation: 16 derived, 16 run, 0 NOT-MEASURED (a derived zero, all 16 coded). CI check-runs were in_progress at report time and not awaited, per contract. NOT MEASURED locally: the CI-only Plan Test Core shards step and the type-check steps dispatch-gates lists.", "line_budget": "203 changed lines (+141 / -62) over 5 files, under the 3000 human-merge threshold; no skills/** ledger touched", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "files_changed": [ "docs/qa/platform-checklist/areas/approvals.json", "docs/qa/platform-checklist/areas/dashboards.json", "docs/qa/platform-checklist/areas/i18n.json", "docs/qa/platform-checklist/areas/search.json", "docs/qa/platform-checklist/areas/ux-conventions.json" ], "deviations": [ "worktree: the platform-assigned branch was checked out in the primary clone, so I detached the primary checkout and added worktree objectstack-issue-28339 on that branch (no new branch and no empty-branch probe push, per the card-thread rule)", "bounded in-place fix beyond the 21 rows: ux-conventions.write-feedback knownGaps[1] quoted the approve successMessage in the retired dollar-brace spelling. It is corrected to the declared double-brace template in the same history row: same item, same defect class as row 126, mechanical, and named in the PR body", "commit trailers use the model-free pair AGENTS.md prescribes (Claude-Session + Co-authored-by: Claude), not the model-named trailer in the harness reminder", "PR created with no assignees and no reviewers, as the dispatch Writes line says. Conflict for the seat: AGENTS.md says the PR assignee mirrors the card (set at pr_create), and the session context asks to assign os-zhuang and request their review. os-dev.md and the dispatch say none. Left for the seat" ], "mcp_calls": "2: mcp__github__issue_read (get, get_comments on #28339). Reads only, no write tool", "api_writes": "3: git push of the branch; relay pr_create via scripts/pm/fleet-write/dispatch.mjs (POST /repos/objectstack-ai/objectstack/dispatches, run 41179357948, which made POST /pulls #28372 + POST /issues/28372/labels skip-changeset); this os-dev-report comment via post-stamped.mjs (POST /issues/28339/comments). Reads via gh api: census and run-record comments, PR read-back", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed. The sys_user.last_login_ip field description (packages/platform-objects/src/identity/sys-user.object.ts) says the value comes from the trusted proxy forwarded header. Without server.trustProxy, the client-address rule stamps the transport peer address (plugin-auth client-address.ts). Copy drift on an admin-group field description; recorded in PR Acceptance notes. Dedupe words: last_login_ip description trustProxy peer address" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:devx#1 · os-zhuang · session_01QUs3BvP5Aq9USg5GtmgAAR
Landed · 2026-10-31T07:42Z — PR #28372 merged through the queue as
edf9714b.merged=trueState change: card closed
completedbyFixes;pm:dispatchedremoved in this stroke.