Skip to content

Commit c6853b1

Browse files
docs(qa): retire the objectui-pin wording left in the checklist ledger (#26962)
Part of #26626 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:测试清单账本里 14 个条目、18 处还在写 objectui 旧钉(`.objectui-sha`、"objectui-repo-only"、"objectui pin")的文字,改成仓内 `ui/...` 路径或删去过时旁注;每条 revision +1、追加一行 history。 - 为什么改:维护者原话「还在写 objectui 旧路径的文字。立卡」;跑测的人照旧文字会跳过其实能跑的 pin(例如 share-link 条目说"本仓跑不了",实际在 `ui/apps/console/src/pages/` 下)。 - 风险与回滚:纯文档账本,不发布、不改任何条款与状态;回滚即 revert 本 PR。与 #26848 在 `studio-authoring.doc-on-app-menu` 上会撞 revision/history(两边都升到 r7),后落地者需重排。 - 先看:`docs/qa/platform-checklist/areas/access-security.json`(share-link 的 knownGaps[0] 改写最大)、`platform-core.json`、`records-forms.json`。 - 两分钟验证:`node scripts/check-platform-checklist.mjs` 应打印 `OK — 16 areas`;用卡上的模式对 areas/*.json 非 history 字段搜索,应为 0 处。 - 需要你做的:无,席位落地。 ## What changes The card's pattern (`objectui:build|objectui:refresh|\.objectui-sha|objectui-repo-only|objectui-only|objectui checkout|sibling objectui|objectui pin`, case-insensitive), measured over `docs/qa/platform-checklist/areas/*.json` with `history` rows excluded: - before, at `e4ba846f`: 20 matches in 18 strings across 14 items - after, at `beab18b242`: 0 matches - positive control (`acceptance|verify`, same files, same exclusion): 1029 matches both times Items touched (revision from main at edit time, then +1, and ONE new `history` row citing #26626 on each): - `access-security.share-link-landing-page` r5 to r6: fixtures.knownGaps[0], knownGaps[2], automated.ref. knownGaps[0] no longer says the pins are unrunnable from this checkout. - `ai.console-ai-surface-gating` r7 to r8: acceptance[5].verify - `approvals.request-page-reply-and-reader-visibility` r3 to r4: fixtures.knownGaps[0] - `attachments-storage.download-authz-both-sides` r7 to r8: automated.ref - `i18n.surface-matrix` r10 to r11: fixtures.knownGaps[3] - `platform-core.keyboard-shortcut-surface` r5 to r6: fixtures.knownGaps[1], acceptance[2].verify, acceptance[3].verify - `records-forms.conditional-rules-grid` r9 to r10, `import-wizard-encoding-and-hints` r8 to r9, `gantt-interactions` r6 to r7, `form-dirty-guard` r5 to r6, `record-discussion-mentions` r11 to r12, `field-group-visible-when` r8 to r9, `v18-semantic-defaults` r4 to r5 - `studio-authoring.doc-on-app-menu` r6 to r7: fixtures.knownGaps[1] Kept on purpose: historical objectui issue and PR numbers (objectui#11649, objectui#11674, objectui#3378, objectui PR 11241 / 11258) and measured objectui revisions (`1fb1ced36243`, `daeb77fc84dd`, `f8267df93aba`, `4016370af3c9`). The wording around them reads "objectui revision" rather than "objectui pin". No `history` row was rewritten: a script check confirms that, per item, main's history is an exact prefix of the new one with one row appended. No clause, status or step semantics change. Out of scope and left on the card: the two governed `.claude/skills/**` files (`checklist-test`, `dogfood-verification`). They are the `domain:skills` half. ## Tests Every `ui/...` path the new text names was checked with `git ls-files` at `e4ba846f`: `ui/apps/console/src/pages/{shared-record-shape.test.ts,SharedRecordPage-11649.test.tsx,SharedRecordPage.tsx,shared-record-shape.ts}`, `ui/packages/plugin-chatbot/src/__tests__/{usePendingActions.pollFaultPolicy-11736,AiPendingActionsInbox.errorReplacesEmpty-11736}.test.tsx`, `ui/packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx`, `ui/packages/app-shell/src/console/ai/__tests__/matchAiChatShortcut.test.ts`, `ui/e2e/live/grid-conditional-rules.spec.ts`, `ui/packages/plugin-detail/src/renderers/__tests__/{recordActivityFeed.test.ts,record-details.groupVisibleWhen-11630.test.tsx}`, `ui/packages/plugin-gantt/src/GanttView.tree.test.tsx`. `pnpm console:build` exists in the root `package.json`. Runnability, where the new text claims a pin runs from this tree: - `ui/apps/console/src/pages/shared-record-shape.test.ts`: run from `ui/` (`pnpm exec vitest run --maxWorkers=2 FILE`, once `@objectstack/spec`, `formula` and `sdui-parser` were built) gave 10/10 passed. - `SharedRecordPage-11649.test.tsx`: NOT MEASURED. Its import chain needs the `@objectstack/client` dependency closure built, and that build was cut off by a container restart. Existence is verified; runnability is not. - The other items already said their pins run under `ui/`, or now only name the path. No new runnability claim is made for them. ## Acceptance notes - Open draft #26848 also edits `studio-authoring.doc-on-app-menu`: steps[1] and fixtures.knownGaps[2], bumping r6 to r7. This PR edits knownGaps[1] and also bumps to r7. The text does not overlap, but `revision` and `history` collide. Whichever lands second renumbers its row to r8. - #26941 (open) edits `access-security.json`. It does not touch `share-link-landing-page` as of this head. Merged `origin/main` (`b1b153a325`) cleanly before opening. - RUNNER.md gives `pnpm --filter @object-ui/PKG exec vitest run` as the jsdom invocation. The `form-dirty-guard` and `import-wizard` items forbid that form, citing the ui vitest invocation guard. I noted this and changed nothing: RUNNER.md is outside this PR's file surface. ## Verification At `beab18b242` (the final head, after the merge), each command exited 0, with the exit captured before any pipe: - `node scripts/check-platform-checklist.mjs`: `check-platform-checklist: OK — 16 areas, 329 items (324 active, 1 planned)` - derived (`dispatch-gates --commands --repo objectstack-ai/objectstack`, 16 commands): check-adr-links (and --self-test), check-closing-keyword-parity (and --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. All 0. - `dispatch-gates --ran`: 16 derived, 16 run, 0 NOT-MEASURED, 0 UNRUN. - CI-only families (type-check lanes, Test Core shard planning) are left to this PR's check-runs. --- _Generated by [Claude Code](https://claude.ai/code/session_01QSeKYmTYfaPbLQD4BJfomW)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent ee2aaf0 commit c6853b1

8 files changed

Lines changed: 104 additions & 35 deletions

File tree

‎docs/qa/platform-checklist/areas/access-security.json‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3489,7 +3489,7 @@
34893489
"title": "The /s/:token share-link landing page renders the resolved record minus redacted fields, gates on password, and refuses dead links with designed states — never a blank page or a raw error",
34903490
"since": "v16",
34913491
"status": "active",
3492-
"revision": 5,
3492+
"revision": 6,
34933493
"priority": "P2",
34943494
"surface": "browser",
34953495
"personas": [
@@ -3504,9 +3504,9 @@
35043504
"tokens minted over the API as the liaison member per the API item's step shapes (plain, password, audience signed_in, short-expiry) — this item drives only the RENDERING; the mint/resolve/revoke API clauses stay on the API item"
35053505
],
35063506
"knownGaps": [
3507-
"automated.ref lives ENTIRELY in the objectui repo — from this checkout it is neither runnable nor pin-evidenced (the RUNNER standing fact): drive the item by hand in the browser, or run the pin in an objectui checkout and name the revision",
3507+
"automated.ref names objectui code imported into this repository: the pin is ui/apps/console/src/pages/shared-record-shape.test.ts in this checkout (RUNNER's ui/ standing fact), so run it from this tree at the run's framework sha and cite that sha — there is no separate objectui revision to name. It pins the 401 envelope fold only: everything rendered is still driven by hand in the browser",
35083508
"the ai_conversations transcript branch (objectui SharedRecordPage.tsx: the SharedRecordPage component's ai_conversations branch, with its messages-fetch effect and the ChatbotEnhanced readOnly transcript) is ai_conversations-only (Cloud/EE service-ai) — the same knownGap split the API item records for /:token/messages; not runnable on open-framework showcase",
3509-
"FIXED, regression row, expected PASS (objectui#11649): the page no longer folds every 401 into the password prompt. Measured at objectui 1fb1ced36243 (the pin this row was written at), again at daeb77fc84dd (#23878) and at f8267df93aba (the objectui pin when revision 3 was written). The pin is retired (#25745): the console a run boots is built from this repo's ui/ by `pnpm console:build` into packages/console/dist (gitignored; `pnpm build` does not refresh it), so re-read ui/apps/console/src/pages/SharedRecordPage.tsx at the run's own framework sha: SharedRecordPage.tsx reads a 401 by the body's error.code through shared-record-shape.ts resolveGateOf — NEEDS_PASSWORD and WRONG_PASSWORD open the password prompt, SIGN_IN_REQUIRED opens the sign-in gate, and any other code shows the server's message, not a prompt — so a signed_in-audience link opened anonymously renders the dedicated 'Sign in required' state, never 'Password required'. acceptance[3] now asserts that state (QA run #23163 saw it live at objectstack 36b2889c). The objectui pins are apps/console/src/pages/SharedRecordPage-11649.test.tsx ('shows the sign-in path back to this link, and no password prompt') and shared-record-shape.test.ts ('reads each 401 code as its gate'), objectui-repo-only like knownGaps[0]"
3509+
"FIXED, regression row, expected PASS (objectui#11649): the page no longer folds every 401 into the password prompt. Measured at objectui 1fb1ced36243 (the pin this row was written at), again at daeb77fc84dd (#23878) and at f8267df93aba (the objectui revision when revision 3 was written). The pin is retired (#25745): the console a run boots is built from this repo's ui/ by `pnpm console:build` into packages/console/dist (gitignored; `pnpm build` does not refresh it), so re-read ui/apps/console/src/pages/SharedRecordPage.tsx at the run's own framework sha: SharedRecordPage.tsx reads a 401 by the body's error.code through shared-record-shape.ts resolveGateOf — NEEDS_PASSWORD and WRONG_PASSWORD open the password prompt, SIGN_IN_REQUIRED opens the sign-in gate, and any other code shows the server's message, not a prompt — so a signed_in-audience link opened anonymously renders the dedicated 'Sign in required' state, never 'Password required'. acceptance[3] now asserts that state (QA run #23163 saw it live at objectstack 36b2889c). The pins are ui/apps/console/src/pages/SharedRecordPage-11649.test.tsx ('shows the sign-in path back to this link, and no password prompt') and ui/apps/console/src/pages/shared-record-shape.test.ts ('reads each 401 code as its gate'), run from this checkout like knownGaps[0]"
35103510
]
35113511
},
35123512
"steps": [
@@ -3571,7 +3571,7 @@
35713571
],
35723572
"automated": {
35733573
"kind": "unit",
3574-
"ref": "objectui apps/console/src/pages/shared-record-shape.test.ts (the envelope fold + the redactFields→redactedFields rename — the #3983 pin); objectui-repo-only, see knownGaps. Everything rendered stays manual"
3574+
"ref": "ui/apps/console/src/pages/shared-record-shape.test.ts (the envelope fold + the redactFields→redactedFields rename — the #3983 pin); objectui code imported under ui/, run from this checkout, see knownGaps[0]. Everything rendered stays manual"
35753575
},
35763576
"source": [
35773577
"objectui apps/console/src/App.tsx (the /s/:token route, mounted outside the authenticated shell)",
@@ -3610,6 +3610,12 @@
36103610
"date": "2026-10-26",
36113611
"change": "Retired-pin text (#26035, which left area files to these ledger cards): knownGaps[2] told the run to re-read SharedRecordPage.tsx 'at whatever pin the run boots', naming this repo's .objectui-sha. The pin is retired (#25745); the console builds from ui/ with `pnpm console:build` into packages/console/dist, which `pnpm build` does not refresh. The row now says so and points at ui/apps/console/src/pages/SharedRecordPage.tsx, read on main b4199c96 (resolveGateOf and both named pins present under ui/apps/console/src/pages/). knownGaps[0] and automated.ref still call the ref objectui-repo-only, in step with RUNNER.md's standing fact, which #25850 owns. No clause or status changed",
36123612
"ref": "#25835"
3613+
},
3614+
{
3615+
"revision": 6,
3616+
"date": "2026-10-27",
3617+
"change": "fixtures.knownGaps[0], knownGaps[2] and automated.ref re-pointed off the retired objectui-repo wording: the three pins they name live in this checkout under ui/apps/console/src/pages/ and run from this tree at the run's framework sha, so knownGaps[0] no longer tells a runner they are unrunnable here (#26626, maintainer-directed). Measured revisions and historical objectui issue numbers kept. No clause changed, no status changed",
3618+
"ref": "#26626"
36133619
}
36143620
]
36153621
},

‎docs/qa/platform-checklist/areas/ai.json‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@
644644
"title": "Console AI affordances gate on the access-filtered agent catalog: an agent-less boot hides FAB / chat dock / ⌘⇧I / top-bar link and redirects a stale /ai bookmark without flash — and the ungated bare system/ai-approvals route degrades honestly: one 501 read stops the poll, and the error replaces the empty queue (objectui#11736)",
645645
"since": "v16",
646646
"status": "active",
647-
"revision": 7,
647+
"revision": 8,
648648
"priority": "P2",
649649
"surface": "browser",
650650
"personas": ["admin (form sign-in — the pending-actions poll sends the COOKIE half only, credentials:'include' with no bearer header, so an injected-token session reads as anonymous there)"],
@@ -706,7 +706,7 @@
706706
{
707707
"clause": "honest degradation on the bare route: no fake empty queue and no unbounded dead poll. The inbox renders the destructive alert INSTEAD of the 'No actions waiting' empty state (the empty state is drawn only when the read answered, AiPendingActionsInbox.tsx), and the poll stops after the one 501 (a refused read ends it, usePendingActions.ts). This was expected-fail K2 until objectui#11736 fixed both halves",
708708
"oracle": "network",
709-
"verify": "the ~15s network capture shows a single 501 read of /api/v1/ai/pending-actions and no further request; the page screenshot shows the error alert with no empty-queue panel beneath it. objectui pins both halves — packages/plugin-chatbot/src/__tests__/usePendingActions.pollFaultPolicy-11736.test.tsx ('a refused read stops the poll') and AiPendingActionsInbox.errorReplacesEmpty-11736.test.tsx ('an errored read shows the error, not an empty queue'); both now live in this tree under ui/packages/plugin-chatbot/src/__tests__/ (@object-ui/plugin-chatbot), so run them at the run subject sha to cite them beside the live read",
709+
"verify": "the ~15s network capture shows a single 501 read of /api/v1/ai/pending-actions and no further request; the page screenshot shows the error alert with no empty-queue panel beneath it. Unit pins in this tree cover both halves — ui/packages/plugin-chatbot/src/__tests__/usePendingActions.pollFaultPolicy-11736.test.tsx ('a refused read stops the poll') and ui/packages/plugin-chatbot/src/__tests__/AiPendingActionsInbox.errorReplacesEmpty-11736.test.tsx ('an errored read shows the error, not an empty queue') (@object-ui/plugin-chatbot), so run them at the run subject sha to cite them beside the live read",
710710
"evidence": "the poll trace + the page screenshot"
711711
}
712712
],
@@ -734,7 +734,8 @@
734734
{ "revision": 4, "date": "2026-10-13", "change": "acceptance[5] (clause and verify) flipped from expected-fail K2 to the positive contract, with steps[6] and [7], negative[2], the title and source[4] and [5] (stale spec, #23163 C5; parked on #23121, carried by #23169). objectui#11736 made the poll follow its last answer (a refused read stops it, a transient one backs off within a ceiling) and made the inbox draw its empty state only when the read answered. QA run #23163 read one 501, no re-arm, and no empty state under the alert, at objectstack 36b2889c with objectui 1fb1ced36243. Re-read from objectui source at that pin, still this repo's .objectui-sha, including the two pins now named in the clause", "ref": "#23169" },
735735
{ "revision": 5, "date": "2026-10-20", "change": "line citations re-pointed — the comma-range spelling that round 7 of wave anchor #24579 named (18.0 sweep; round 7's report 6281433885, out_of_scope_findings[1]). source[0] cited lines 71-88 of objectui useAiSurface.ts in the comma-range spelling, the second range of the list 45397edf53 authored (9-40 and 71-88). At the objectui pin that commit shipped, 9602dc820450, and still at the shipped pin 12dc7b47c340, those lines are the useAiSurfaceEnabled hook, so source[0] now names it. objectui is read at the shipped pin 12dc7b47c340 and cited in prose, because no objectui anchor resolves in this gate. The spelling is what #13786's strip left when it removed only the first range of a ':A,B' list, and the line-citation limb reads only the colon spellings, so no gate caught it. Where the surrounding words still describe the range the strip removed, the new citation names that code too. No clause's assertion changed", "ref": "#24752" },
736736
{ "revision": 6, "date": "2026-10-26", "change": "acceptance[5].verify re-pointed off the retired objectui pin (#26035): the .objectui-sha file is gone (#25745) and the two objectui pins it named now live in this tree under ui/packages/plugin-chatbot. Found while applying the 18.2.0 sweep's ai findings (#25836, wave anchor #25807). No clause changed, no status changed", "ref": "#25836" },
737-
{ "revision": 7, "date": "2026-10-26", "change": "the landing-page REMEDY clause's verify: the 501 message the alert string-equals now reads 'ObjectOS Cloud/Enterprise' (was the retired product name), following the ObjectOS product-name ruling and moving with REMEDY_DETAIL['ai']", "ref": "#26228" }
737+
{ "revision": 7, "date": "2026-10-26", "change": "the landing-page REMEDY clause's verify: the 501 message the alert string-equals now reads 'ObjectOS Cloud/Enterprise' (was the retired product name), following the ObjectOS product-name ruling and moving with REMEDY_DETAIL['ai']", "ref": "#26228" },
738+
{ "revision": 8, "date": "2026-10-27", "change": "acceptance[5].verify: the two unit pins are named by their ui/ paths instead of as objectui pins (#26626, maintainer-directed). No clause changed, no status changed", "ref": "#26626" }
738739
]
739740
},
740741
{

‎docs/qa/platform-checklist/areas/approvals.json‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@
16761676
"title": "Approval requests on v18: the request record page serves record:approval_decision and a Reply action that lands in its timeline, `enable.approvalsVisibleToReaders` lets a plain record reader see the record's requests read-only (and only then), the generic /data door serves request rows by approvals visibility, and titles shown to a reader use only what that reader may read",
16771677
"since": "v18",
16781678
"status": "active",
1679-
"revision": 3,
1679+
"revision": 4,
16801680
"priority": "P1",
16811681
"surface": "mixed",
16821682
"personas": [
@@ -1691,7 +1691,7 @@
16911691
"for the reader leg: a scratch object (or showcase object via the scratch app) with enable.approvalsVisibleToReaders:true"
16921692
],
16931693
"knownGaps": [
1694-
"the console clause (acceptance[4]) needs a bundled console: build it with `pnpm console:build`, which builds ui/apps/console from this checkout, so the console and the spec it renders are one tree by construction (packages/console/build-dist.sh). The blocked(environment) this gap used to record — the retired .objectui-sha pin not building against current spec — no longer arises"
1694+
"the console clause (acceptance[4]) needs a bundled console: build it with `pnpm console:build`, which builds ui/apps/console from this checkout, so the console and the spec it renders are one tree by construction (packages/console/build-dist.sh). The blocked(environment) this gap used to record — a console built from a pinned objectui revision instead of this tree, not building against current spec — no longer arises"
16951695
]
16961696
},
16971697
"steps": [
@@ -1764,6 +1764,12 @@
17641764
"date": "2026-10-26",
17651765
"change": "two checklist-accuracy findings of the 18.2.0 sweep's QA run #25815, Tier 1 set, at framework 6679644a (findings card #25838, wave anchor #25807): acceptance[1].verify names the reply's HTTP legs — the comment landing in the timeline, and the pending-approver-or-submitter-only refusal — because no pin in automated.ref asserts either, and cites the two service-layer pins that do as evidence of their layer only; automated.ref's acceptance[2] annotation says request-read-gate.integration.test.ts drives ObjectQL and the data protocol in-process, never /data/sys_approval_request over HTTP. Also respelled while there, the retired pin flow (#26052, #26035): knownGaps[0] builds the console with `pnpm console:build` from this tree, and the pin-skew block it recorded no longer arises. Pins re-read at base 9753d163. No clause changed",
17661766
"ref": "#26116"
1767+
},
1768+
{
1769+
"revision": 4,
1770+
"date": "2026-10-27",
1771+
"change": "fixtures.knownGaps[0]: the retired pin-file name dropped from the description of the gap that no longer arises (#26626, maintainer-directed). No clause changed, no status changed",
1772+
"ref": "#26626"
17671773
}
17681774
]
17691775
},

0 commit comments

Comments
 (0)