Skip to content

docs(qa): step 6 of the coverage sweep no longer sends the run record to a git-ignored dir - #14983

Merged
os-steve merged 2 commits into
mainfrom
claude/issue-14595-sweep-step6-run-record
Sep 3, 2026
Merged

docs(qa): step 6 of the coverage sweep no longer sends the run record to a git-ignored dir#14983
os-steve merged 2 commits into
mainfrom
claude/issue-14595-sweep-step6-run-record

Conversation

@claude

@claude claude Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

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 neither runs/.gitignore nor runs/README.md was 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 add on 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-run GitHub issue per runs/README.md and RUNNER.md, not a file under runs/". 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:

  1. README.md lines 18-21 splits the two skills that drive this ledger: checklist-author authors items per SWEEP.md, and checklist-test executes them and emits "a run record, per RUNNER.md". A run record is the artifact of an execution against a build.
  2. .claude/skills/checklist-author/SKILL.md lines 24-29 states the sweep's deliverables in full — new or expanded areas/*.json items, the reconciled coverage.json, and the defects and docs drift appended to FOLLOW-UPS.md, all validated green and landed on a task branch. No run record is among them.
  3. Every one of the 20 most recently updated qa-run issues 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 under runs/ (git-ignored) but as one qa-run GitHub issue, and points at runs/README.md and RUNNER.md by 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 at 21ba6f28. Exit codes captured by redirect before any pipe; each row quotes the gate's own verdict text. Run through bash scripts/pm/os-verify-lock.sh (shared-box seconds).

gate exit its own verdict line
node scripts/check-ci-filter-parity.mjs 0 OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs 0 check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs 0 comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs 0 OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs 0 2 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs 3 NOT MEASUREDPREREQUISITE NOT MET — this gate grades a saved turbo run test log, and no log was named
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 22 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs 0 ok
pnpm check:doc-authoring 0 doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes 0 OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe 0 the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal 0 check-watch-hint-literal self-test: 57 cases pass

Eleven 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 to SWEEP.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 at 5bc2f272 produces 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.mjs does not exist in this tree. The nearest gates, check:adr-links and check:published-readme-links, cover docs/adr and published package READMEs, not docs/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 -naP over 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

…`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
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 3, 2026
@os-steve
os-steve marked this pull request as ready for review September 3, 2026 16:45
@os-steve
os-steve enabled auto-merge September 3, 2026 16:45
@os-steve
os-steve added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit fddfc8d Sep 3, 2026
31 checks passed
@os-steve
os-steve deleted the claude/issue-14595-sweep-step6-run-record branch September 3, 2026 17:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] SWEEP.md step 6 sends every sweep agent to land a run record under runs/, which is .gitignored with * — the instruction cannot be obeyed

2 participants