Skip to content

qa(checklist): re-point eight stale checklist items across five cards to the product at e540baf8 - #33273

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-33032-checklist-repoint-fold
Nov 14, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-33032-checklist-repoint-fold

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #33032
Fixes #33054
Fixes #33060
Fixes #33086
Fixes #33091

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:平台测试清单里 8 个条目的验收文字改成与产品现状一致(唯一键 409 现在报出字段、元数据开关路由数 4/14、内部字段测试文件新路径、os validate 的 controlled_by_parent 分支与新的 os lint 子句、Studio「未运行」原因的显示位置、非参与者伪造审批得 404、仍按部署唯一持有的类型从 webhook 改为 connector),每条都升了 revision 并补了 history 行。
  • 为什么改:这些条目是产品对、清单文字落后,QA 每轮都会把它们误判为失败;不改产品行为。
  • 风险与回滚:只改 docs/qa/platform-checklist/areas/ 下 6 个 JSON 文件,不发布、不进运行时;回滚即 revert 本 PR。
  • 先看:areas/platform-core.json(bare-name 条目改指 connector,并改为按 NAMESPACE_SCOPED_BARE_NAME_TYPES 的补集取类型)、areas/cli.json(新增 acceptance[3] 的 os lint 子句)、areas/approvals.json(acceptance[4] 的 404/403 分界)。
  • 两分钟验证:pnpm check:platform-checklist,预期最后一行 check-platform-checklist: OK — 16 areas, 427 items,symbol anchors 为 1635/1645 resolved。
  • 需要你做的:无,席位落地。

What changes

One commit per card; every edited item bumps revision and appends a history row naming its card and the base it was read at (e540baf8).

Card Item Rev What moved
#33032 records-forms.field-unique-enforcement 13 to 14 acceptance[0] and automated.ref: the bare unique: true collision names the field ('A record with this SKU already exists', field 'sku'), as 28a1527 made it
#33032 api-backend.error-sentences-and-unique-violation-wire-code 8 to 9 acceptance[2] and automated.ref: details exactly {developerMessage, field, object}, field = the duplicated column. This is also the trailing note on #33086, done once here
#33032 ai.mcp-read-file-pdf-word-extraction 2 (unchanged) no edit: 29f9d3c (#33021) already landed r2 (60 ms budget, the zero-page shape as a fixture signal, showcase_invoice_line.receipt) after the reading the card came from
#33086 api-backend.rest-metadata-config-contract 9 to 10 maintenance removes 4 routes (adds POST {prefix}/_migrate-record-currency-codes), item removes 14 (adds GET {prefix}/:type/:ns/:name); steps[5] to [7], acceptance[2], two variant rows. The duty to enumerate each switch's radius from a route-table diff (the #15542 ruling) is kept
#33086 api-backend.second-object-exposure-and-internal-fields 3 to 4 automated.ref: the moved position pin packages/objectql/src/protocol-data-door-internal-field-positions.test.ts plus the delegation twin in packages/metadata-protocol
#33086 cli.validate-v18-authoring-verdicts 2 to 3 the cbp arm plants the shapes the parse refuses (no master_detail; two required ones, inline and through objectExtensions); the optional master is a control; the lint-only shape moves to a new os lint clause, acceptance[3]
#33054 studio-authoring.flow-status-matches-runtime 5 to 6 acceptance[1]: the rail and header title carry the worded unboundCause (else the reason), the reason verbatim is the Problems note's detail; negative[] untouched (ruling 6545938831 item ①)
#33060 approvals.record-page-decisions 5 to 6 acceptance[4] and steps[8]: a non-participant who cannot read the request gets 404 REQUEST_NOT_FOUND; 403 FORBIDDEN stays the answer to a reader with no slot
#33091 platform-core.bare-name-one-holder-refusal 3 to 4 acceptance[0] and [3] drive connector (the only covered type outside NAMESPACE_SCOPED_BARE_NAME_TYPES at this base); webhook joins the per-namespace leg with the requires: ['webhooks', 'realtime'] fixture note; the driven type is named as that list's complement

No product code, no changeset (nothing here is in any package's published files[]; skip-changeset rides the create). coverage.json and FOLLOW-UPS.md were not touched: the gate neither regenerated nor required them.

Tests

No test file changed. The judging gate and the derived local families, run at head 51098eec:

pnpm check:platform-checklist
check-platform-checklist: OK — 16 areas, 427 items (419 active, 3 planned); coverage: 40 kinds mapped, 4 waived; traps: 19 documented, 19 in use; provisioning: 10 area recipes, 18 item references resolved (5 area-qualified), 10/10 recipes referenced; ... symbol anchors: 1635/1645 resolved by symbol-anchors.mjs ... 10 on the named residual, 18 file floors held

At base e540baf8 the same gate read 1621/1631 resolved: the 14 new anchors this diff cites all resolve, and the residual stays 10.

derived families (node scripts/pm/dispatch-gates.mjs --commands, 16)

All 16 exit 0, each exit 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, @objectstack/lint check:doc-formula-expressions (exit 3 PREREQUISITE NOT MET on the first run, an unbuilt @objectstack/formula / @objectstack/lint; exit 0 after building those two under the verify lock), 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. dispatch-gates --ran: 16 derived, 16 run, 0 NOT-MEASURED, 0 UNRUN.

Acceptance notes

Verification

pnpm check:platform-checklist
node scripts/pm/dispatch-gates.mjs --commands    # 16 families, all run green at 51098eec

Session: session_017xRBcRZn9wGkMSrznVX4JS (seat domain:devx#2).


Generated by Claude Code

…l (card 33032)

records-forms.field-unique-enforcement r14: acceptance[0] and automated.ref
expect the bare `unique: true` collision on the live SQLite leg to name the
field ('A record with this SKU already exists', developerMessage '... a
unique constraint on 'SKU' already holds this value.', `field` 'sku'), as
28a1527 made it and the dogfood pin already asserts.

api-backend.error-sentences-and-unique-violation-wire-code r9:
acceptance[2] and automated.ref expect details exactly
{developerMessage, field, object} with field = the duplicated column.

Item 3 of the card (ai.mcp-read-file-pdf-word-extraction acceptance[3]) is
already satisfied at this base: 29f9d3c landed its r2 (60 ms budget, the
zero-page shape named as a fixture signal, showcase_invoice_line.receipt)
after the reading the card was drafted from. No edit.

Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…e product (card 33086)

api-backend.rest-metadata-config-contract r10: the `maintenance` radius is
four (POST {prefix}/_migrate-record-currency-codes joined it) and `item` is
fourteen (GET {prefix}/:type/:ns/:name rides the item read), as
packages/rest/src/rest-config-mount-table.pin.test.ts measures. steps[5]
to [7], acceptance[2] and the two variant rows re-counted; the duty to
enumerate each switch's radius from a route-table diff is kept.

api-backend.second-object-exposure-and-internal-fields r4: automated.ref
names the moved position pin in packages/objectql and the door's
delegation twin in packages/metadata-protocol, in place of a file that no
longer exists.

cli.validate-v18-authoring-verdicts r3: the controlled_by_parent arm
plants the shapes the parse refuses (no master_detail; two required ones,
inline and through objectExtensions); the optional master is a control;
the lint-only shape (an omitted `required` on the only master_detail)
moves to a new `os lint` clause, acceptance[3].

The card's fourth note, error-sentences acceptance[2], is the same clause
as item 2 of card 33032 and was re-pointed once, in that card's commit.

Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…unning cause (card 33054)

studio-authoring.flow-status-matches-runtime r6: for a known unboundCause
the rail and header title read the worded cause (on a default boot,
deployment_policy), and the platform's reason verbatim is the Problems
note's detail, which describeFlowRunStatus does on purpose. acceptance[1],
steps[3], the title, automated.ref (adds the runStatus unit pin) and
source[0] follow; the note still counts as no problem, and negative[] is
untouched.

Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…4 a non-reader's forged decision gets (card 33060)

approvals.record-page-decisions r6: the step's contributor-bound member
can read the project but not its request, and every door that acts on a
request answers such a caller REQUEST_NOT_FOUND, exactly as a missing id
(ApprovalService.refuseUnreadableRequest), so the forged approve answers
404 and the request stays pending. 403 FORBIDDEN stays the answer to a
reader who holds no slot. steps[8], acceptance[4] (clause, verify,
evidence) and source[5] follow; negative[2] is unchanged.

Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…connector (card 33091)

platform-core.bare-name-one-holder-refusal r4: webhook (e55347d) and tool
(c747cf0) both joined NAMESPACE_SCOPED_BARE_NAME_TYPES, so at this base
the one covered type still held once per deployment is connector.
acceptance[0] and [3], the title, fixtures, steps[1], negative[0], the
variant and source[4] now drive a connector catalog descriptor qa_conn;
webhook joins the per-namespace leg of acceptance[1] beside flow and agent,
with the fixture note that a webhook-declaring package declares
requires: ['webhooks', 'realtime']. acceptance[0] names the driven type
as the complement of NAMESPACE_SCOPED_BARE_NAME_TYPES within the covered
types, so the next narrowing reads as a re-check rather than a stale FAIL.

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

Copy link
Copy Markdown
Contributor Author

domain:devx#2 · sunhaolin · session_017xRBcRZn9wGkMSrznVX4JS

席位核对 · ACCEPT · 2026-11-14T15:21Z · head 51098eec

席位意见:文字对齐产品,不改产品行为;可由席位落地(非受管面、+101/−51,未达人工合并阈值)。

Verdict: ACCEPT, checked against GitHub and origin/main e540baf8, not against the report (6879560259).

  1. Shape. Draft PR against main. Lines 1–5 of the body read Fixes #33032, Fixes #33054, Fixes #33060, Fixes #33086 and Fixes #33091, one per fold member, each merge meant to close its card. The other closing-keyword hits in the body point at closed or merged numbers only. There are five commits, one per card (549d5a6, ef78485, 5505803, c6c56d4, 51098ee). Clause-②: no and Metadata-protocol: none stand on their own lines. With none and no narrowing arm, no Skills-docs: line is owed. The path face from pulls/33273/files is six files, all under docs/qa/platform-checklist/areas/ (api-backend +31/−13, approvals +8/−7, cli +20/−7, platform-core +18/−12, records-forms +10/−4, studio-authoring +14/−8), inside the claimed surface. No governed path. skip-changeset fits a docs-only QA diff.
  2. Premises, measured by the seat:
  3. Gates. Check-runs on 51098eec at this comment: 14 success, 23 skipped, 0 failed, 8 in progress (Test Core 1–3/8, the five Lint jobs, both Type Check jobs). Landing waits until every check is green or an expected skip. Locally the dev ran 16 of 16 derived families, check:platform-checklist exit 0, dispatch-gates --ran 0 UNRUN. Those runs are local and are not counted for CI.
  4. Accepted deviations.
  5. Out of scope.
  6. Landing. Once every check is green, one relay stroke: pr_ready + automerge_enable. Merging closes the five cards; the seat then clears pm:dispatched and follows the PR to MERGED.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#2 · sunhaolin · session_017xRBcRZn9wGkMSrznVX4JS

Landing · 2026-11-14T15:30Z · head 51098eec

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 14, 2026 15:30
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 14, 2026
Merged via the queue into main with commit fdb76fb Nov 14, 2026
52 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-33032-checklist-repoint-fold branch November 14, 2026 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment