Skip to content

skills(checklist-test): write run close-out, supersede and re-test triggers into the skill - #9508

Merged
os-support-ai merged 2 commits into
mainfrom
claude/issue-9484-checklist-test-closeout-process
Aug 18, 2026
Merged

skills(checklist-test): write run close-out, supersede and re-test triggers into the skill#9508
os-support-ai merged 2 commits into
mainfrom
claude/issue-9484-checklist-test-closeout-process

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Fixes#9484

Lands the run close-out and re-test process into .claude/skills/checklist-test/SKILL.md, per the maintainer authorization quoted on the card (2026-08-18, 「同意你的落地动作」). Zero new labels — every state rides an existing carrier. ADR-class: draft PR, human merge; never flipped ready, queued or auto-merged.

What landed

New section §5 收口 —— 一张 qa-run 记录什么时候才算关闭, placed after §4 (the run-record filing section) and before Guardrails, written in the file's own register:

  • Four-way disposition for every fail, as a table judged on the record's own evidence: product defect (extract a standalone card — dup-check, repo where the fix lands, no pm labels, normal triage) / assertion defect (test-fix card in the repo owning the item) / stale spec (re-point card citing the ruling) / invalid pairing (a blocked note, no card). The four are stated as exhaustive: a fail that fits no cell means the judging is not finished.
  • A boundary clause the spec implies but no existing text drew: a fail-derived assertion defect or stale spec gets its own card, while accuracy findings merely noticed during the run still park on the wave anchor per §4 / RUNNER. The divider is whether there is a red row someone owes green. Without it the two rules read as two answers to one question.
  • partial coverage gaps are named, never dropped — per-area pin-upgrade cards, or parked on the wave anchor. not-run is left to §4's existing completion criterion (the handover list) rather than restated.
  • Machine-greppable close-out linesExtracted: / Parked-on: / Superseded-by: / Carried-forward:, one per line in the close-out comment, each with its field shape.
  • QA-source: traceability on every extracted card — greppable, no label.
  • Supersede protocol — the old record closes not_planned with Superseded-by: only after verdicts the new run did not re-derive are carried forward. The text says which line lands on which record (carry-forward on the new one, supersede on the old), since the protocol is unusable if that direction is left ambiguous.
  • Re-test triggers, three and only three — release candidate ⇒ full Tier-1 re-run; a QA-sourced fix card lands ⇒ the accepting seat appends the affected items to the wave anchor's re-test checklist (same discipline as cross-repo follow-ups: the first producer is the accepting seat); maintainer names a target.
  • Open qa-run count = outstanding close-out debt, same construction as the bare finding count, with the explicit "never close records to make the number look better".

Two merges rather than new rows, so the file gains no duplicate statement:

  • the §4 label bullet gains the lifecycle half (the record's label surface stays qa-run through close-out and closing) plus the observed drift shape — tests / tracking / bug added to records after the fact;
  • the §4 extraction bullet gains one pointer sentence to §5.

Durable process rules only: no wave ids, card counts or dates as rule content. docs/qa/** is untouched — RUNNER.md owns "what to extract", this section owns "when a record is closed", and the RUNNER carve-out belongs to a different card.

The item locator (review round, commit 315b57f5c)

Item 2's QA-source: line reached the card body with its placeholders stripped by the GitHub body sanitizer, so the three field names were reconstructed rather than read. Review corrected the middle field: it is the dotted area.item bare id, not a bare item segment — the form the selector resolver already documents in §0 (platform-core.console-login), the form the run record's per-clause table locates items by, and the form the QA-source lines already in the wild use. Extracted: and Carried-forward: reuse the same locator, so all three greps hit each other.

Both blocks now show placeholders without angle brackets, and §5 states why: < plus a letter is eaten by the GitHub body writer, which would silently delete the traceability line these templates exist to produce. Placeholders are Chinese words; the real value is filled in directly.

Verification — gate union re-run at the final commit, git rev-parse --short HEAD = 315b57f5c

Families re-derived from the actual diff (node scripts/pm/dispatch-gates.mjs, self-deriving its change set) — 4 matched, a subset of the dispatch list, nothing new; re-run in full after the review commit, not carried over from the first round:

  • pnpm check:doc-authoring (+ self-test) — 377 files clean, no bare metadata literals
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions (+ self-test, 24 cases) — 22 record-scoped formula examples across 396 files / 1411 TS blocks clean, plus 9 spec TSDoc examples (built the @objectstack/lint dependency closure first in the fresh worktree)
  • pnpm check:skill-frame-sync (+ self-test, 12 cases) — 4 copies structurally isomorphic, 3 axes
  • pnpm check:nul-bytes (+ self-test, 75 assertions) — 6136 text files clean, plus a direct control-byte scan of the edited file
  • node scripts/check-adr-merge-approval.mjs — HTTP 401 locally (no GitHub credentials in this container), expected; CI is the real reading

check:pm-skill-ratchet does not cover this file — its ceilings are the pm-dispatch surface plus .claude/agents/os-dev.md, read from scripts/pm/check-skill-line-ratchet.mjs rather than recalled. Net +70/-1 lines.

No changeset: .claude/-only, releases nothing (skip-changeset).


Generated by Claude Code

…iggers into the skill (#9484)
Four-way disposition for every fail, named partial gaps, the machine-greppable
close-out lines, the QA-source traceability line, the supersede protocol and the
three re-test triggers — all on existing carriers, zero new labels.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rn7aaamsR99FXRqLcpL99q
@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation labels Aug 18, 2026
@os-zhuangos-zhuang added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 18, 2026 — with Claude
#9484)
Review round: the close-out and traceability lines locate an item by the §0
bare id (area.item), matching the run record's per-clause table, the selector
resolver and the QA-source lines already in the wild. Placeholders written
without angle brackets, which the GitHub body writer strips.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rn7aaamsR99FXRqLcpL99q
@os-support-ai
os-support-ai marked this pull request as ready for review August 18, 2026 06:17
@os-support-ai
os-support-ai added this pull request to the merge queueAug 18, 2026
Merged via the queue into main with commit 072b55aAug 18, 2026
22 of 25 checks passed
@os-support-ai
os-support-ai deleted the claude/issue-9484-checklist-test-closeout-process branch August 18, 2026 06:47
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills(checklist-test): write the run close-out and re-test process into the skill — four-way disposition, record lifecycle, re-test triggers

4 participants

@os-zhuang@hotlong@os-support-ai@claude