docs(qa): step 6 of the coverage sweep no longer sends the run record to a git-ignored dir - #14983
Merged
Merged
Conversation
…`runs/` SWEEP.md step 6 told every sweep agent to "land the run record under `runs/`". That directory is git-ignored (`*`, minus its README and .gitignore), so the instruction is unexecutable: `git add` on an ignored path is a near-silent no-op, and an agent that obeys the step believes it filed a record that does not exist. Two facts decide the replacement text, both measured rather than assumed: - `runs/README.md` and `RUNNER.md` name the destination for a run record -- one `qa-run` GitHub issue, text only, body contract in RUNNER.md. - A coverage sweep does not produce a run record at all. README.md splits the two skills: `checklist-author` authors items per SWEEP.md, `checklist-test` executes them and emits a run record per RUNNER.md. `checklist-author`'s own deliverables are the authored `areas/*.json` items, the reconciled `coverage.json` and the `FOLLOW-UPS.md` entries -- no record. Every one of the 20 most recent `qa-run` issues is an execution record whose title carries a build sha and PASS/PARTIAL/FAIL counts, none of which a sweep has. So step 6 now states the sweep's actual durable output and attributes the run record to `checklist-test`, pointing at both source docs by the names they use for themselves -- rather than sending a sweep to file a `qa-run` issue whose body contract it structurally cannot satisfy. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
os-steve
marked this pull request as ready for review
September 3, 2026 16:45
os-steve
enabled auto-merge
September 3, 2026 16:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #14595
What changed
One list item — step 6 of "How to run it" in
docs/qa/platform-checklist/SWEEP.md. Six lines replace three; no other file is touched, and neitherruns/.gitignorenorruns/README.mdwas edited.The defect
Step 6 told every coverage-sweep agent to "land the run record under
runs/". That directory is git-ignored (*, minus its own README and.gitignore), so the instruction cannot be obeyed:git addon an ignored path is a near-silent no-op, and an agent that follows the step believes it filed a record that does not exist.Why the replacement text is not the obvious one — the reviewable part
The triage ruling scoped this to "say a run record files a
qa-runGitHub issue perruns/README.mdandRUNNER.md, not a file underruns/". Writing exactly that sentence into SWEEP.md would have replaced one unexecutable instruction with another of the same class, because a coverage sweep does not produce a run record at all. Three measurements, none of them assumed:README.mdlines 18-21 splits the two skills that drive this ledger:checklist-authorauthors items per SWEEP.md, andchecklist-testexecutes them and emits "a run record, per RUNNER.md". A run record is the artifact of an execution against a build..claude/skills/checklist-author/SKILL.mdlines 24-29 states the sweep's deliverables in full — new or expandedareas/*.jsonitems, the reconciledcoverage.json, and the defects and docs drift appended toFOLLOW-UPS.md, all validated green and landed on a task branch. No run record is among them.qa-runissues is an execution record whose title carries a build sha and PASS / PARTIAL / FAIL / BLOCKED / NOT-RUN counts (QA run · all (214/215) · 502ff8b5 · 2026-08-30 · 39 PASS / 88 PARTIAL / 5 FAIL / 82 BLOCKED / 1 NOT-RUN #13404, QA run · scan-functionality 14-item scope · 7 pass / 7 fail (14/14 adjudicated) · 79ebb37 · 2026-08-21 #10663, QA run · tier2c:browser-2 (18/18) · e4e5c6e3 · 2026-08-18 · 10 PASS / 4 PARTIAL / 4 FAIL #9467 and so on). A coverage sweep has no per-clause verdicts, no selector scope and no build under test, so it cannot satisfy that title and body contract.So step 6 now states the sweep's own durable output and attributes the run record to
checklist-test— while still doing what the ruling asked of it: the corrected sentence says a run record never lands underruns/(git-ignored) but as oneqa-runGitHub issue, and points atruns/README.mdandRUNNER.mdby the names those documents use for themselves. If the reviewer prefers the literal ruled sentence, this is the line to change.Gates
Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no paths), which reported 12 families at21ba6f28. Exit codes captured by redirect before any pipe; each row quotes the gate's own verdict text. Run throughbash scripts/pm/os-verify-lock.sh(shared-box seconds).node scripts/check-ci-filter-parity.mjsOK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkgnode scripts/check-closing-keyword-parity.mjscheck-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)node scripts/check-comment-mask-corpus.mjscomment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseablenode scripts/check-cross-package-test-inputs.mjsOK: 25 package(s) read outside themselves, all declarednode scripts/check-shard-attestation.mjs2 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)node scripts/check-test-completeness.mjsPREREQUISITE NOT MET — this gate grades a saved turbo run test log, and no log was namedpnpm --filter @objectstack/lint run check:doc-formula-expressions22 record-scoped formula example(s) across 426 files / 1365 TS blocks judged cleanpnpm check:cross-package-test-inputsokpnpm check:doc-authoringdoc authoring guard: 393 files clean — no bare metadata literalspnpm check:nul-bytesOK (scanned 8153 text file(s); no raw ASCII control bytes)pnpm check:refd-timer-probethe approved module may read the probe -> GREENpnpm check:watch-hint-literalcheck-watch-hint-literal self-test: 57 cases passEleven green, one NOT MEASURED in the gate's own words — that gate grades a saved test log, prints "running the family locally, record this gate as NOT MEASURED", and says explicitly that it is not a red.
Two gates named in the dispatch as leads resolved differently, both reported rather than quietly dropped:
node scripts/check-platform-checklist.mjs— the file's own family, and correctly absent from the derived list: the script contains no reference toSWEEP.md, so it never reads the edited prose. Run anyway; it exits 1 with four UNCLASSIFIED coverage kinds. The same command on the base tree at5bc2f272produces byte-identical output, so it is pre-existing and unrelated to this diff. Already filed by another seat earlier today, so no new card: check:platform-checklist is red on main again — four coverage kinds UNCLASSIFIED (batch_endpoints, crud_endpoints, metadata_endpoints, route_generation) #14961.node scripts/check-doc-links.mjsdoes not exist in this tree. The nearest gates,check:adr-linksandcheck:published-readme-links, coverdocs/adrand published package READMEs, notdocs/qa. Both markdown links this edit adds are relative to the edited file's own directory and both targets exist on disk.Also checked beyond the derived families: a control-byte self-scan over the edited file (
grep -naPover the C0 range plus DEL) returns no matches.skip-changeset: this diff publishes nothing from any package — it edits one internal QA runbook.Generated by Claude Code
Generated by Claude Code