Repository navigation
Commit c6bc269
docs(qa): wave-2 checklist-accuracy close-out, slice A — seven areas and three RUNNER facts (#26969)
Part of #25807 (wave-2 accuracy, slice A)
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:按 18.2.0 第二波五份测试记录,修正 7 个领域共 37 条测试清单条目和 1 个共享配方里的过时描述,并给
RUNNER.md 补 3 条环境事实。只改文档,不动产品代码。
- 为什么改:第二波运行发现这些条目的步骤、字段名、错误码或引用的测试文件已与当前代码不符,下一轮运行会被误导、误判或白跑。
- 风险与回滚:只影响 QA 清单文本,不改任何断言的判定标准(新增的只有 trigger-status-contract 的第五行和
query-contract-matrix 的六个运算符变体)。每条 revision +1、追加一行 history,回滚就是 revert
本 PR。
- 先看:`areas/integration-system.json` 的 webhook-lifecycle(#23166
是已关闭的运行记录,不是阻塞卡);`areas/automation.json` 的 trigger-status-contract(新增
422 FLOW_INPUT_SCHEMA_INVALID 行);`RUNNER.md` 的三条新事实。
- 两分钟验证:`node scripts/check-platform-checklist.mjs`,预期打印
`check-platform-checklist: OK`、退出码 0。
- 需要你做的:无,席位落地。
## What changes
The slice-A close-out of the wave-2 checklist-accuracy findings that
RUNNER.md routes to the wave anchor ("close out through the wave's
anchor card … not extracted"). Sources: anchor comments 6433587719,
6433708086, 6433784748, 6433878766, 6433966437 and the run records
#26450, #26456, #26468, #26476, #26481. Every finding was checked
against the code at base `e4ba846f` before its edit; the history row of
each item names the file read.
- **37 items** in `automation`, `cli`, `api-backend`, `identity-auth`,
`integration-system`, `search` and `ux-conventions`: `revision` +1 from
main's value and one appended `history` row each, citing the run record
that found it. No existing history row is touched.
- **1 shared recipe**: `search.json` `qa-contributor-bound-member` step
5 asks for a non-churned account (recipes carry no revision; its
`provenance` line records the change).
- **RUNNER.md**: (1) a per-boot `-d` DB does not isolate the showcase's
upload root or its external datasource file; (2) the process-kill hook
refuses one command that runs `ps`, `grep` and a kill, so the group stop
runs on its own; (3) the `OS_PORT`-connector entry now says `os dev`
compiles by default since #26130.
- `automation.packaged-flow-clone-contract` changes `surface` from `api`
to `mixed`: its acceptance[6] is a Studio browser leg.
| item | before | after | source record | what |
|---|---|---|---|---|
| integration-system.webhook-lifecycle | 10 | 11 | #26456 |
`lastStatusCode` → `response_code`; activation row's `active`; `$filter`
JSON; 4xx receiver for a terminal row; no public read of the switch;
requires pair; #23166 recorded as a closed run record with no open
carrier |
| automation.trigger-status-contract | 7 | 8 | #26476 | fifth trigger
row 422 FLOW_INPUT_SCHEMA_INVALID in A0, variants, knownGaps |
| cli.hook-body-extraction-gates | 6 | 7 | #26476 | FORBIDDEN_PATTERNS
is 13 (ctx.provenance lowers since #25905); body.source, not
isExpression |
| api-backend.batch-transactional-discovery | 7 | 8 | #26476 | #24781 is
done; knownGaps[0] kept as a CLOSED record |
| api-backend.error-envelope-ledger | 6 | 7 | #26476 | OBJECT_NOT_FOUND
/ RECORD_NOT_FOUND are StandardErrorCode members |
| api-backend.filter-comparand-conformance | 3 | 4 | #26476 |
Date/bigint scored in process; the null head class reaches the driver |
| api-backend.aggregate-contract-matrix | 5 | 6 | #26476 |
count_distinct over `status` |
| api-backend.api-methods-verb-gate | 2 | 3 | #26476 | `searchable` flag
on derived search; createMany body is a bare array |
| api-backend.enforce-or-remove-authoring-gates | 6 | 7 | #26476 | the
regex advisory has no relevantWhen, so it prints for any stack |
| automation.packaged-flow-clone-contract | 8 | 9 | #26476 | surface
mixed; its browser leg needs `pnpm console:build` |
| cli.build-own-contract | 8 | 9 | #26476 | namespace prefix on
plain-literal objects; live-conversion probe for the parity |
| integration-system.connector-degraded-recovery | 5 | 6 | #26476 |
`--log-level info` for the interval line; the unknown-connector
comparator's sentence |
| identity-auth.two-factor-verify-to-activate | 2 | 3 | #26476 | DB-file
read as the live-boot equivalent |
| identity-auth.two-factor-disable-lifecycle | 1 | 2 | #26476 | DB-file
read; settings door `/api/settings/auth`; `user.authGate` |
| automation.flow-node-type-matrix | 9 | 10 | #26456 | clone needs a
label; record-shaped items; timestamped signature only |
| automation.rollup-summary-filter | 6 | 7 | #26456 | child key
`expense_report`; editor path and publish step |
| api-backend.formula-stdlib-matrix | 4 | 5 | #26456 | promotion refused
as an outcome 'refused' batch entry, not a 422 |
| identity-auth.api-key-ui-lifecycle | 4 | 5 | #26456 | the two API Keys
routes; mint is two clicks |
| identity-auth.self-signup-gate | 6 | 7 | #26456 | the invitation
bounce shows a card, no auto-forward |
| identity-auth.first-run-owner-bootstrap | 3 | 4 | #26456 | no demo
personas; two document loads on exit |
| cli.scaffold-console-first-paint | 6 | 7 | #26456 | quick-start.mdx
has no scaffold command; `pnpm run dev` |
| ux-conventions.write-feedback | 6 | 7 | #26456 | kanban leg not
drivable (#25933 drop gate); create/edit toast rows now expected PASS
(#26172, #26461); import Undo uses window.confirm |
| cli.dev-boot-contract | 8 | 9 | #26481 | `--no-compile` for the
staleness leg (#26130) |
| automation.packaged-flow-disable-durable | 6 | 7 | #26481 | task POST
needs `title` |
| integration-system.datasource-credential-refusal-matrix | 6 | 7 |
#26481 | where the Postgres dirs can live; the cause is in
`statusReason` |
| automation.trigger-type-matrix | 8 | 9 | #26468 | two corroborating
pins named |
| automation.screen-flow-roundtrip | 6 | 7 | #26468 | engine pin under
A5/N0 named |
| automation.setup-packaged-automation-board | 9 | 10 | #26468 |
invite-first member; prefilled clone dialog; the activation-read verify
no longer asserts 'open by ruling' |
| cli.scaffold-first-run | 6 | 7 | #26468 | exit 0 is no install
evidence; SKILL.md dirs, not `ls`; pre-release variant required on an
unreleased subject |
| cli.dev-automigrate-policy | 7 | 8 | #26468 | three under-claimed pins
named |
| api-backend.query-contract-matrix | 6 | 7 | #26468 | expand HTTP pin
named; six AST operators added to variants; comparand-less null
spellings |
| api-backend.bulk-write-contract | 5 | 6 | #26468 | uniform member
deleteMany refusal; a step for the per-object batch variant |
| integration-system.connector-declarative-boot | 5 | 6 | #26450 | two
pins below A3–A5/N1 named |
| integration-system.datasource-admin-lifecycle | 7 | 8 | #26450 | four
corroborating pins named, the capability-floor pin among them |
| integration-system.email-template-render | 8 | 9 | #26450 |
send-template.test.ts under A1/A2/A4 |
| integration-system.external-schema-browser-ui | 6 | 7 | #26450 |
auth-guard unit pin under A5/N2 |
| integration-system.external-schema-introspection | 6 | 7 | #26450 |
service unit pin under A0 |
| search.json recipe qa-contributor-bound-member | — | — | #26456 | step
5: a non-churned account |
| RUNNER.md | — | — | #26476, #26481, #26456 | the three environment
facts above |
### No change, and why
- `cli.migrate-plan-apply-json`: already corrected by #26795 (dispatch
note).
- The api-backend items re-pinned the same day by #26572
(`declarative-endpoint-execution`, `packaged-action-disabled-dispatch`,
`action-activation-door-contract`, `rest-crud-config-contract`,
`rest-batch-config-contract`, `rest-metadata-config-contract`,
`rest-route-generation-tombstones`,
`second-object-exposure-and-internal-fields`,
`data-request-shape-and-query-arity`, `meta-read-doors-v18`,
`error-sentences-and-unique-violation-wire-code`): each wave-2 line on
them was read against the current text, which already names the pins and
the layer each reaches (for example, `rest-crud-config-contract` says
its discovery pin runs at `/objects`, and
`rest-route-generation-tombstones` says §E's plugin-path case drives
`batch.defaultAtomic`).
- Lines that read "ref accurate" (confirmations, nothing stale):
`automation.durable-suspend-restart` (its ref already calls the fixture
the pin's own), `paused-run-trigger-record-masked`,
`flow-registration-verdict-on-read`, `flow-authoring-refusals-v18`,
`flow-run-semantics-v18`, `inbound-hook-timestamped-signature`,
`scheduled-work-opt-in`; `cli.organization-ownership-ceremony`,
`meta-package-flags-and-explain`, `validate-v18-authoring-verdicts`,
`verify-derived-proof-families`; `cli.migrate-meta-write-stored-and-all`
(a scoring divergence; its ref claims no command layer).
- `automation.packaged-flow-subflow-disable-refusal`: the run confirmed
knownGaps[0] live, and its N1 fixture gap already has a recipe (#26622).
- `integration-system.connector-auth-kind-application`: its ref already
names both pins the mapping cited.
- `identity-auth.two-factor-enrollment-reveal` and
`two-factor-backup-codes`: the shared two-factor lines are applied where
the items read rows or settings; backup-codes already names the DB-file
read.
- The identity-auth (9) and search (3) items of #26450 carry clause
verdicts only, no accuracy line.
- `cli.scaffold-first-run`'s revision-6 history row says 'seven clauses'
for five: history rows are append-only, so it stays.
- Outside slice A, not touched: the v17 `--legacy-peer-deps` recipe line
lives in `platform-core.v18-boot-refusals` fixtures, and
`studio-authoring.draft-publish-lifecycle`'s METADATA_CONFLICT /
NO_DRAFT lines belong to slice B.
## Tests
No product code changed. Gates at head `0a7d5b4f` (after merging
`origin/main`):
<details><summary>dispatch-gates: 16 derived, 16 run, 0
NOT-MEASURED</summary>
```text
node scripts/check-adr-links.mjs exit 0
node scripts/check-adr-links.mjs --self-test exit 0
node scripts/check-closing-keyword-parity.mjs exit 0
node scripts/check-closing-keyword-parity.mjs --self-test exit 0
node scripts/check-comment-mask-corpus.mjs exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions exit 0 (exit 3 before building @objectstack/formula and @objectstack/lint)
pnpm check:ci-filter-parity exit 0
pnpm check:cross-package-test-inputs exit 0
pnpm check:doc-authoring exit 0
pnpm check:driver-memory-census exit 0
pnpm check:gitlink-declared exit 0
pnpm check:nul-bytes exit 0
pnpm check:platform-checklist exit 0
pnpm check:refd-timer-probe exit 0
pnpm check:watch-hint-literal exit 0
✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded an exit code and none of them is 3).
```
</details>
<details><summary>check-platform-checklist</summary>
```text
check-platform-checklist: OK — 16 areas, 329 items (324 active, 1 planned); coverage: 39 kinds mapped, 4 waived; traps: 19 documented, 19 in use; provisioning: 10 area recipes, 15 item references resolved (2 area-qualified), 10/10 recipes referenced
```
</details>
A script compared every item in the seven files against `origin/main`:
37 changed, each at main's revision + 1 with exactly one appended
history row and the earlier rows byte-equal.
## Acceptance notes
Observations from these records that are not ledger edits (reported to
the seat, not filed here):
- `webhook-lifecycle` A2: whether a flow node's predicate multi-write
should carry the organization is a maintainer question raised in #23166,
and no open issue carries it (its successor anchors closed with it
noted). The wave-2 run measured the block again.
- A retired-filter-operator refusal is cut at the 500-character
client-message bound before the `$contains` alternative its prescription
names (#26476; `truncateClientMessage`).
- The kanban drop gate's dimmed lane carries no reason text (#26456),
against the disabled-control convention.
- After a failed datasource connect, `POST
/api/v1/datasources/NAME/test` answers 'no registered driver to
introspect', which names no cause (#26481).
## Verification
`node scripts/check-platform-checklist.mjs` exits 0 on the head. Run
`git diff origin/main...HEAD -- docs/qa/platform-checklist/areas` to see
that each hunk is the item's text plus one new history row.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01QSeKYkXktsD6m4eAJ18rUE
---
_Generated by [Claude
Code](https://claude.ai/code/session_01QSeKYkXktsD6m4eAJ18rUE)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 045cfa4 commit c6bc269
8 files changed
Lines changed: 389 additions & 131 deletions
File tree
- docs/qa/platform-checklist
- areas
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
283 | 283 | | |
284 | 284 | | |
285 | 285 | | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
290 | 294 | | |
291 | 295 | | |
292 | 296 | | |
| |||
347 | 351 | | |
348 | 352 | | |
349 | 353 | | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
350 | 371 | | |
351 | 372 | | |
352 | 373 | | |
| |||
376 | 397 | | |
377 | 398 | | |
378 | 399 | | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
379 | 405 | | |
380 | 406 | | |
381 | 407 | | |
| |||
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
| 48 | + | |
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
53 | | - | |
| 52 | + | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | | - | |
| 65 | + | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
144 | 150 | | |
145 | 151 | | |
146 | 152 | | |
| |||
0 commit comments