Repository navigation
Commit a3ac7fb
docs(qa): correct checklist items from QA run 31486 (#31524)
<!-- claude-projects-attribution: {"github_login":"zhuangjianguo"} -->
_Requested by **Steedos** · [project
thread](https://claude.ai/code/project/chan_018ETKaNwMZCNRYD7D8Q9Ubb?thread=cmsg_018ETKaNwMZCNRYD7D8Q9UbbXQ1XffyfWbgHS4nxAXKADA)_
Fixes #31499
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么**:按 QA 运行 #31486 的实测,改正平台测试清单里 25 个条目的文字(22 处条目纠正、4
处覆盖缺口写进各条目已有的 `knownGaps`、1 处夹具清理说明),每个条目升一个 revision 并加一行引用该运行的
history。
- **为什么改**:这些条目写的步骤或判据已与当前平台不符(工具数、路由、表名、请求体形状、界面入口等),照旧执行会让下一轮 QA
白跑或误判;缺口记在条目上,下一轮不必重新发现。
- **风险与回滚**:风险很低,只改 `docs/qa/platform-checklist/areas/*.json`
的文字,不动代码、测试或钩子,也不新增或拆分条目;回滚即还原这些 JSON。
- **先看**:`identity-auth.json` 的 `email-verification-loop`(改动最大:邮件改读
`sys_identity_email`,并改用 SMTP 收件桩);`records-forms.json` 的
`form-view-gallery`(覆盖层改走定制配对);`platform-core.json` 的
`package-lifecycle-enable-disable`。
- **两分钟验证**:`node scripts/check-platform-checklist.mjs`,预期打印
`check-platform-checklist: OK — 16 areas, 360 items` 并以 0 退出。
- **需要你做的**:无,席位落地。
## What changes
The QA run #31486 (owed:weekly, subject `0647dabb`) met 22
checklist-accuracy findings, 4 coverage gaps and one fixture-hygiene
note; the card lists each. This PR applies them to the named items of
`docs/qa/platform-checklist/areas/*.json`. Every touched item bumps
`revision` by one and gains one `history` row (date 2026-11-08, ref
`#31499`) that cites the run and the base it was read at. No item is
added, split or retired, and no file outside `areas/*.json` changes.
| Card line | Item | Fields |
|:--|:--|:--|
| 1 | `ai.mcp-http-surface` | acceptance[4] clause + verify: 15 HTTP
tools, stdio 10 |
| 2 | `studio-authoring.meta-save-preconditions-and-draft-rows` |
steps[1]: once the ACTIVE row exists |
| 3 | `dashboards.analytics-exposure-gate-and-measure-aggregate` |
fixtures.requires[2]: `enable: { apiEnabled: false }` |
| 4 | `cli.organization-ownership-ceremony` | steps[1], [3], [4]: apply
and comment-reactions take no `--dev` |
| 5 | `attachments-storage.field-accept-maxsize-server-enforced` |
fixtures.requires[2]: a direct database write |
| 6 | `studio-authoring.package-customize-restore-display` |
acceptance[3].verify, steps[6]: chip popover, `studio-override-restore`
|
| 7 | `studio-authoring.api-written-keys-survive-studio-save` |
variants[4]: `requiredPermissions` with `studio.access` |
| 8 | `studio-authoring.metadata-diagnostics-sweep` | steps[3], [6]:
`/studio/PKG/metadata`; steps[8]: `OBJECT.default` |
| 9 | `studio-authoring.record-page-roundtrip` | acceptance[3].verify:
title the card before publish |
| 10 | `studio-authoring.hooks-tab-authoring` | steps[3], [5]: one
record name per throwing hook |
| 11 | `studio-authoring.actions-tab-presets` | steps[1], [2], [4]:
label each preset; "More actions" overflow |
| 12 | `studio-authoring.validation-rules-authoring` |
acceptance[1].verify: no further PUT while the served verdict stands |
| 13 | `identity-auth.email-verification-loop` | requires[2],
knownGaps[1], steps[0], [2], acceptance[1], [3]: `sys_identity_email`,
SMTP sink |
| 14 | `integration-system.email-template-render` |
fixtures.knownGaps[1]: email channel suppressed on the log transport |
| 15 | `access-security.permission-matrix-edit-loop` | steps[2]: the
Setup door redirects into Studio's All metadata area |
| 16 | `automation.package-flow-override` | steps[0] `data.runs`,
steps[3] folded chip, steps[7] Restore |
| 17 | `cli.scaffold-first-run` | fixtures.requires[1] verdaccio rules;
steps[4] `npx skills add CHECKOUT --list` |
| 18 | `platform-core.package-lifecycle-enable-disable` | steps[5],
acceptance[4]: meta read; acceptance[5]: named not-found state |
| 19 | `records-forms.form-view-gallery` +
`ux-conventions.disabled-control-reason` | requires[0]: the ADR-0146 D11
pair recipe; variants[1]: run before the pair exists |
| 20 | `records-forms.bulk-select-all-matching` | steps[7]: deleteMany
takes `{"ids": [...]}` |
| 21 | `i18n.notification-localized-and-clears` | steps[4]: a member
popover may draw the Activity tab |
| 22 | `ux-conventions.disabled-control-reason` | variants[5]: the task
list's "Reassign…" with no row selected |
| gap | `attachments-storage.chunked-upload-integrity` | knownGaps:
acceptance[3] needs a second organization (group boot) |
| gap | `automation.package-flow-override` | knownGaps: acceptance[2]
needs a topology-changing edit or its pin |
| gap | `studio-authoring.no-entry-property-matrix` | knownGaps: 9 rows
per runner budget; own runner or split, the split owed |
| gap | `studio-authoring.package-customize-restore-display`,
`studio-authoring.validation-rules-authoring` | knownGaps: acceptance[6]
and acceptance[2] unpinned halves |
| hygiene | `studio-authoring.picklist-bound-select` |
fixtures.requires[0]: make the scratch copy in the run's own linked
worktree, where the Bash guard allows `rm -rf` |
`platform-core.json` was edited last and `origin/main` merged in before
this PR opened, as the claim orders (the #31497/#31498 pair edits two
other items in that file).
## Tests
No test, code or hook changes. The checklist validator is the gate on
this diff: `node scripts/check-platform-checklist.mjs` exits 0. A
semantic diff against `origin/main` (both sides parsed as JSON) shows
exactly the 25 named items changed, each with `revision` +1 and
`history` +1, no area-level key changed, and item sets and order
unchanged.
## Acceptance notes
- Step-1 spot-check on `origin/main` 4894cfe: the premises of lines 1,
4, 8, 13, 18 and 20 all hold, so no line is dropped. Line 1:
`wireBridgeTools` in `packages/mcp/src/mcp-http-tools.ts` registers 15
data and action tools, and the federation pair is scope-gated. Line 4:
`migrate/apply.ts` and `migrate/comment-reactions.ts` declare no `dev`
flag. Line 8: `AppContent.tsx` sends `/apps/APP/metadata` and
`metadata/_diagnostics` to `SetupMetadataRoute`, which redirects to
`studioMetadataAreaPath`. Line 13: `IDENTITY_EMAIL_OBJECT` is
`sys_identity_email`. Line 18: no `packages/:id/published` route exists.
Line 20: `batch-routes.ts` parses `deleteMany` through
`DeleteManyDataRequestSchema`.
- Line 4 is worded "apply and comment-reactions take no `--dev`", not
"only organization-ownership and serve do":
`migrate/packageless-overlays.ts` and
`migrate/security-catalog-overlays.ts` declare `--dev` too. The seat
accepted this wording.
- Placement readings: line 8's `OBJECT.default` note sits on steps[8],
the planted-row leg it describes, since steps[3] and [6] plant nothing.
Line 16's `data.runs` note sits on steps[0], the item's first runs read,
because steps[8] (New similar) reads no runs list. Line 19's "variant 2"
is read 1-based, as variants[1] (Studio Publish on a read-only package).
Line 11 names no index, so steps[1], [2] and [4] carry it. Line 1 also
widens acceptance[4].verify's degradation list to the file pair.
- Fixture hygiene was measured by feeding the Bash guard's own hook
script `rm -rf examples/qa-picklist-showcase` with each cwd: the shared
primary checkout answers exit 2 (blocked), a linked worktree exit 0.
- The run's close-out also parked `identity-auth.auth-method-matrix`
acceptance[0] and `integration-system.email-template-render`
acceptance[5] on #31499. The card's coverage-gaps list does not name
them, so they are untouched.
## Verification
All readings are on objectstack `claude/project-thread-eiodyp`. The
edits were read at base `4894cfe1`, and the gates ran at the merged head
`c1789f47` (main `9431c45d` plus the two commits).
<details><summary>Derived gates</summary>
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` at merged head `c1789f47` derived 16
families for the 13 changed paths (288 changed lines, under the 3000
human-merge threshold). All 16 exit 0: `check-adr-links` (+
`--self-test`), `check-closing-keyword-parity` (+ `--self-test`, on this
body), `check-comment-mask-corpus`, `ci/plan-test-core-shards
--self-test`, `@objectstack/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` and `check:watch-hint-literal`.
`check:doc-formula-expressions` first exited 3 (PREREQUISITE NOT MET,
nothing measured) in the fresh worktree. After its named prerequisite,
`turbo run build --filter=@objectstack/formula
--filter=@objectstack/lint` under the verify lock (VERDICT command-exit
0), it exited 0. `dispatch-gates --ran` reconciliation: 16 derived, 16
run, 0 NOT-MEASURED, 0 UNRUN.
Not local, per the derivation: CI's `Plan Test Core shards` step and the
conditional `Type Check UI` lane, which no path in this diff feeds.
</details>
Dogfood battery: n/a, no `!` in the title and no (narrowing) arm.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01QsR2jTF22yU6xKsdoYV5Gp)_
<!-- signed: domain:devx#2 · zhuangjianguo ·
session_01QsR2jTo666XXx9e1Gm21C6 -->
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 86e3766 commit a3ac7fb
13 files changed
Lines changed: 204 additions & 84 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2319 | 2319 | | |
2320 | 2320 | | |
2321 | 2321 | | |
2322 | | - | |
| 2322 | + | |
2323 | 2323 | | |
2324 | 2324 | | |
2325 | 2325 | | |
| |||
2337 | 2337 | | |
2338 | 2338 | | |
2339 | 2339 | | |
2340 | | - | |
| 2340 | + | |
2341 | 2341 | | |
2342 | 2342 | | |
2343 | 2343 | | |
| |||
2431 | 2431 | | |
2432 | 2432 | | |
2433 | 2433 | | |
| 2434 | + | |
| 2435 | + | |
| 2436 | + | |
| 2437 | + | |
| 2438 | + | |
| 2439 | + | |
2434 | 2440 | | |
2435 | 2441 | | |
2436 | 2442 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
137 | | - | |
| 137 | + | |
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
| |||
185 | 185 | | |
186 | 186 | | |
187 | 187 | | |
188 | | - | |
| 188 | + | |
189 | 189 | | |
190 | | - | |
| 190 | + | |
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| |||
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
228 | | - | |
| 228 | + | |
| 229 | + | |
229 | 230 | | |
230 | 231 | | |
231 | 232 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1030 | 1030 | | |
1031 | 1031 | | |
1032 | 1032 | | |
1033 | | - | |
| 1033 | + | |
1034 | 1034 | | |
1035 | 1035 | | |
1036 | 1036 | | |
| |||
1039 | 1039 | | |
1040 | 1040 | | |
1041 | 1041 | | |
1042 | | - | |
| 1042 | + | |
1043 | 1043 | | |
1044 | 1044 | | |
1045 | 1045 | | |
| |||
1135 | 1135 | | |
1136 | 1136 | | |
1137 | 1137 | | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
1138 | 1144 | | |
1139 | 1145 | | |
1140 | 1146 | | |
| |||
1252 | 1258 | | |
1253 | 1259 | | |
1254 | 1260 | | |
1255 | | - | |
| 1261 | + | |
1256 | 1262 | | |
1257 | 1263 | | |
1258 | 1264 | | |
| |||
1264 | 1270 | | |
1265 | 1271 | | |
1266 | 1272 | | |
1267 | | - | |
| 1273 | + | |
| 1274 | + | |
1268 | 1275 | | |
1269 | 1276 | | |
1270 | 1277 | | |
| |||
1355 | 1362 | | |
1356 | 1363 | | |
1357 | 1364 | | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
1358 | 1371 | | |
1359 | 1372 | | |
1360 | 1373 | | |
| |||
0 commit comments