Repository navigation
docs(checklist-test): a QA security finding gets no card and goes privately to the PM session, runners only test, and runner dispatches state effort by card shape - #27642
Conversation
…vately to the PM session, runners only test, and runner dispatches state effort by card shape RUNNER.md rule 2 and the checklist-test skill carry one rule in two places. A security finding (an authentication or authorization hole, or any finding whose reproduction is an exploit recipe) now gets no GitHub card at all; the run record keeps one row, and the runner reports the reproduction privately to the session that dispatched it. That PM session dispatches the fix through pm-dispatch and owns every PR the run produces. Every write and every issue or PR handling step of a run goes through the pm-dispatch doors; a refused door stages the writes and hands them to the dispatching session. The skill's section 2 now states runner effort by card shape (high for a run card, xhigh only for a security-fix os-dev and adversarial re-verification), how each backend takes it, and the spend line. os-dev.md gains the no-card report path in two existing lines. The checklist-test ceiling rises 246 to 259 under the ruling of record that orders the text. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cxs6a1nUyBHTEo84qV
…ot the retired card wording
access-security.platform-owner-email-anchor, identity-auth.two-factor-enrollment-reveal
and identity-auth.two-factor-verify-to-activate pointed at RUNNER rule 2's carve-out in
the retired shape ("item + clause + detail withheld pending maintainer", and "existence
published"). Each now names what rule 2 says after this PR: no card, and one run-record
row `area.item · clause · security finding — detail withheld, reported to PM`. Revision
bumped with a history row on each; no clause, oracle or status changed.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cxs6a1nUyBHTEo84qV
|
A second commit,
Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head 2d15ca6 · 2026-10-29T17:39Z Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Inputs read: card #27382 (body + 5 comments, rulings 6493929972 and 6493958591, claim 6500623670, os-dev report 6501662628), card #27390 (body + 2 comments), PR #27642 (body, 6-file list, net diff against main, 2 comments), the 44 check-runs on the head. Hits files read whole in the committed tree; cited code read on the head where the PR touches it and on origin/main where it does not. The rest of the diff (RUNNER.md, the two area JSON files, the ratchet script) is the lane seat's ACCEPT at TIER_DEFAULT; it is read here only to judge the two hits files. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Holds:
Must-fix 1 — the refused-door hand-off no longer reaches a cloud runner's staged writes. On main, §4 reads "待发文本落文件、终报给出路径与正文,放行后照序补发": the final report carried the path AND the text. On the head it reads "待发文本落文件,路径交派发会话,由它读过照序经同一写入门补发": the path alone. The scenario this rule is accepted against is card comment 6493929972's wave-3 reading: W3-C1, W3-C2b and W3-UX were Should-fix 1 — §5's four-way disposition is declared exhaustive ("四选一是穷尽的 … ⛔ 永不把它留成一条无处置的红行") and its 产品缺陷 row says "抽取独立缺陷卡"; the security FAIL row fits no row and is forbidden a card. The two ⛔ lines collide at close-out, and the machine-grep close-out grammar ( Should-fix 2 — the old fallback "runner 无派发通道时由派它的会话接手" was removed and nothing replaces it for a runner with no session-to-session channel. The channel is measured for the wave-3 shape (W3-C3b, 6493958591), and a subagent's final report reaches its dispatcher by construction, so this is narrow; but pm-dispatch's runbook lesson 五 ⑥ records a cloud shape that can neither receive a poke nor send a message. One clause saying what the runner does then (holds the reproduction in-session, reports blocked without it) closes the gap. Should-fix 3 — §2's "pm-dispatch 管写入门(§4)、安全修复派卡与 PR 持有(Guardrails)": 派卡 reads as dispatching a card, and the Guardrails it points at say no card is dispatched. "安全修复派发" or "派修复" says what the rule does.
Holds:
Should-fix 4 — the rest of the file stays keyed on an issue number the no-card path does not have: rule 1's worktree and branch ( Verdict basis: must-fix 1 is a regression from main in a hits file, in the exact scenario the clause was written for; it fails the record. Implemented-by: VERDICT: FAIL Generated by Claude Code |
…itself, and a security row closes on its own Contract-review findings on the previous head. - A runner whose own permission check refuses a write door now hands the dispatching session the path and the staged text, in its final report or by session-to-session message. The dispatching session cannot read a file in a cloud runner's container, so a path alone was not a hand-off. This is written in both places: RUNNER rule 2 and the skill's section 4. - A runner with no session-to-session channel keeps the reproduction in its own session and reports the hand-off as blocked, without the reproduction. This is also written in both places. - Section 5's four-way disposition now says it is exhaustive except for a security finding, whose row is its own disposition: no card and no Extracted line. - Section 2 says the PM dispatches a security fix, not a fix card. - os-dev: a no-card dispatch order names the branch, the report's issue field is null, and the description admits a no-card order. Line counts are unchanged: 259 against 259 and 402 against 402. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cxs6a1nUyBHTEo84qV
|
This answers contract review 6504269255. All five findings are fixed in
The gates were re-run in full on Generated by Claude Code |
|
domain:devx#1 · os-elon-musk · session_01LKHDniRQSWjRJyDtacwpEd 席位核对Verdict: ACCEPT at head Against the cards and the rulings (#27377 6500750765), read line by line
Gates at head
Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head 4e5517c · 2026-10-29T18:56Z Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Delta review on record 6504269255 (FAIL, head ① Derived judgments
② Semver levelStands as judged in record 6504269255: ③ Boundary flags
④ Design judgment
Must-fix 1 of 6504269255 (refused-door hand-off carried a path only) — landed. §4 lines 139 to 141 now read: 写入门被本会话权限拦下 ⛔ 不绕行:待发文本落盘,路径与正文随终报或会话间消息交派发会话,由它照序经原写入门补发;其中 ⛔ 无安全复现 —— 写入未落地即未收口. The staged text travels with the hand-off, by either channel a runner has (a subagent's final report reaches its dispatcher by construction; a cloud card's final report is read by Should-fix 1 (§5 exhaustiveness claim collided with the no-card rule) — landed. Lines 187 to 189: 除安全发现外,四选一是穷尽的 … 安全发现那一行本身即处置:⛔ 不立卡、不写 Should-fix 2 (runner with no session-to-session channel) — landed in both places. Guardrails line 249 to 250: 复现经会话间消息私报给派发它的 PM 会话(无此通道则留本会话,终报报 blocked); RUNNER rule 2 lines 91 to 93: keeps it in its own session and reports the hand-off as blocked, without the reproduction. This is the runbook lesson 五 ⑥ shape (no poke in, no message out; only PR and report comments go back), and the text keeps the reproduction off GitHub in that shape too, which is the ruling's hard line. The bullet was compressed in place (⛔ 不立任何卡 replaces the longer withheld-card sentence; RUNNER keeps the explicit "no withheld-detail card", and 不立任何卡 subsumes it) and the record row moved to the bullet's end; every clause of ruling 6493958591 item 2 and 3 is still present. Should-fix 3 (§2 安全修复派卡) — landed: line 114 reads 安全修复派发与 PR 持有(Guardrails). Everything else in the file stands as judged in 6504269255: the Guardrails "runner 只测试" bullet, the §4 extraction line, §2 effort by card shape, per-backend effort and the spend line, the one-rule-in-two-places clause. Should-fix 5 (new, in the §5 region the move touched; not a FAIL). §5's three re-test triggers (lines 226 to 232) re-verify a fixed item through trigger 2, "QA 抽取的修复卡落地 ⇒ 接受该卡的座位把受影响的项追加到波次锚卡的重测清单". On main the security finding had a withheld card, so its fix landing fired this trigger. On the head a security hardening has no card, and the Guardrails forbid naming the item on the anchor or a tracking card, so trigger 2 cannot fire and the item is re-verified only by a release-candidate Tier 1 rerun (trigger 1, which does not reach a Tier 2 item) or the maintainer's word (trigger 3). The disclosure rule is kept, which is the ruling's priority, and the hardening PR carries its own tests, so this is narrow; but one clause on trigger 2 — the PM session that landed a security hardening re-runs the item itself, naming it on no card — would close the gap. The file has no headroom, so it is an in-place edit or a ratchet raise under the same ruling.
Should-fix 4 of 6504269255 (the rest of the file keyed on an issue number) — landed within the surface. Line 15: 无卡时派发令即卡并点名分支 — the dispatch order names the branch, so rule 1's The gates still agree with the rule, as judged in 6504269255: Breaks nothing judged before. The delta hunks are confined to the five findings; the Guardrails bullet, §4 paragraph and §5 paragraph keep every clause the previous record listed as holding; RUNNER rule 2 still cites the 2026-08-18, 2026-10-27 and 2026-10-29 rulings side by side and still ends with "one rule written in both places, not a precedence claim by either"; the RUNNER Run-records paragraph (line 784) and Extraction-obligation bullet (lines 880 to 882) are unchanged and consistent with the rule. Verdict basis: the one must-fix of record 6504269255 is landed in both places and in the scenario it was written for; the move lands the four should-fixes and adds nothing outside them; the check-runs on the head are 28 success, 21 skipped, none failing or pending. Should-fix 5 is new and narrow and does not fail the record. Implemented-by: VERDICT: PASS Generated by Claude Code |
Requested by Elon · project thread
Fixes #27382
Fixes #27390
Clause-②: no
Metadata-protocol: none
维护者速读
high,修安全与对抗复核xhigh),并记花费。docs/qa/platform-checklist/RUNNER.md规则 2 的两条子项;.claude/skills/checklist-test/SKILL.md的 Guardrails 与 §2。pnpm check:pm-skill-ratchet && node scripts/check-platform-checklist.mjs,两者 exit 0。What changes
One rule, written in both places —
docs/qa/platform-checklist/RUNNER.mdrule 2 and.claude/skills/checklist-test/SKILL.md— and neither text claims precedence over the other.Security findings (#27382). A security finding is an authentication or authorization hole, or any finding whose reproduction is an exploit recipe.
area.item · clause · security finding — detail withheld, reported to PM. That row is a completed verdict, and the title counts it as aFAIL.os-devsubagent atxhigh, with the reproduction only in the dispatch prompt and hardening-only wording in the PR, commit and changeset. A finding that needs a contract decision first goes to the maintainer.Runners only test (#27382, widened to issues and PRs).
os-devand never drives a PR. The dispatching PM session owns every PR the run produces: review, contract review where it is owed, readiness and landing.Runner effort (#27390), skill §2 only.
high.xhighis only for theos-devthat fixes a security finding and for adversarial re-verification of a contested verdict.Agentsubagent getseffortpassed explicitly, and the skill line is what makes passing it lawful.create_session) takes no effort. Its record carries no effort field either (measured, below), so the dispatch note says "not set" plus the dispatching session's own level. When that level is above the card's shape, the dispatcher follows the dispatch-runbook's 〈云卡五课〉 item 五 ② line, which the skill cites rather than restates, or opens a project thread instead and sets its effort at spawn.get_sessionexternal_metadata.usage.cost_usd.Files.
docs/qa/platform-checklist/RUNNER.md: rule 2's carve-out is rewritten, and a new sub-bullet, "The runner only tests", is added. Two later mentions of the retired card shape now match it: the Run records paragraph and the Extraction obligation bullet..claude/skills/checklist-test/SKILL.md:.claude/agents/os-dev.md: two existing lines now carry the no-card dispatch. The dispatch prompt stands in for the card, there is noFixes #, and the report is the final message only. No line is added (402 lines, ceiling 402).scripts/pm/check-skill-line-ratchet.mjs: thechecklist-test/SKILL.mdceiling goes from 246 to 259.Why
The maintainer's words on 2026-10-29 in the dispatching session, verbatim and untranslated, all collected on #27377 in comment 6500750765 (the ruling of record):
pm-skill line ratchet raise. Ruling of record: #27377 comment 6500750765. Measured line delta: +13,
.claude/skills/checklist-test/SKILL.md246 → 259. TheCEILINGSrow moves by exactly that amount. No other ceiling moves, andos-dev.mdstays at 402.Measured before writing (#27390 item 2)
All readings were taken with
get_sessionon 2026-10-29, between 15:20Z and 15:30Z.session_context.effort_levelsession_016WV4cyMsvviaf7j5XzQrfClowsession_016WV4cxs6a1nUyBHTEo84qVxhighsession_016WV4d1oYpq8eEjYF141fC3xhighsession_01LKHDniRQSWjRJyDtacwpEdhighsession_01HjR8RUwTPQ3TgbfKihmxp9xhighsession_01GDoMKJFY45jdSGzFmyumij(originclaude_code_mcp_seed)create_sessioncloud cardsession_018VqJPGA1NDNSCZsnecsChPxhighsession_013JuCowY7RrGXYbGEv3cWsQ(originclaude_code_mcp_seed)create_sessioncloud cardWhat this shows:
create_sessioncard's record carries no effort level at all, so nobody can read back the level it ran at. That is why the skill tells the dispatcher to record "not set" and the dispatching session's level, and does not claim an inherited level.usage.cost_usdsits atexternal_metadata.usage.cost_usd, and a session with no finished turn has nousageblock yet (this thread's own record at 15:18Z).Verification
All at head
6b95c870, on a fresh worktree offmainat9c513147.pnpm check:pm-skill-ratchet(self-test and gate): exit 0.checklist-test/SKILL.mdis 259 lines against a ceiling of 259, every line is within 120 bytes, and the table-row pin is unchanged.os-dev.mdis 402 against 402.node scripts/check-platform-checklist.mjs: exit 0. That is 16 areas and 352 items.pnpm check:pm-skill-id-lint: exit 0, with no issue number inos-dev.md.node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0.pnpm exec eslint scripts/pm/check-skill-line-ratchet.mjs: exit 0.node scripts/pm/dispatch-gates.mjs --ranaccounts for all 43 derived families: 43 run, 0 unrun, every one exit 0.check:doc-formula-expressionsfirst exited 3 (its prerequisite was not met). It passed afterpnpm --filter '@objectstack/lint...' build.The 43 derived families and their exit codes
Acceptance notes
docs/qa/**is not governed. Declared to the seat.detail withheld pending maintainerwording, as pointers to rule 2's carve-out: one inareas/access-security.jsonand two inareas/identity-auth.json. They defer to rule 2, which governs. Rewording them is an item revision (arevisionbump and ahistoryrow), which is outside this card's surface. Left for the seat: either a follow-up or noted only.dispatch-runbook.md〈云卡五课〉 item 五 ② says a session that cannot take effort inherits the seat's level. The readings above cannot confirm that forcreate_sessioncards, because their record has no effort field. The runbook is not edited here (pm-dispatch is outside this surface). The skill cites the line and records what can be read..claude/agents/os-dev.mdmakesdispatch-gates --tierderive a MANDATORY contract-review tier for the surface. The two-line amendment there is one-line-class and mechanical. The build ran at the default tier, and the contract-tier review the seat arranges is the compensating control.os-dev.mdsays a PR carries none, and the maintainer reaches the PR through the seat's hand-off.Human Minimum
packages/specholds no runtime logic. (packages/specis not touched.)pnpm lintpasses. (eslint on the one.mjsfile changed: exit 0.)main, one pull request. (Two cards folded into one PR by the seat's dispatch order; one branch offmainat9c513147.)skip-changeset. Both declaration lines are above.)packages/spectouched: its generated artifacts are regenerated and committed. (Not touched.)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code