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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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

@claudeclaudeBot 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-authorauthors items per SWEEP.md, and checklist-testexecutes 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).

gateexitits own verdict line
node scripts/check-ci-filter-parity.mjs0OK: all 133 declared cross-package glob(s) (93 unique) are covered by core or crosspkg
node scripts/check-closing-keyword-parity.mjs0check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators)
node scripts/check-comment-mask-corpus.mjs0comment-mask corpus sweep: 5824 files, 0 disagree, 0 unparseable
node scripts/check-cross-package-test-inputs.mjs0OK: 25 package(s) read outside themselves, all declared
node scripts/check-shard-attestation.mjs02 aggregate gate(s) count 3 declared leg(s) across 3 attesting job(s)
node scripts/check-test-completeness.mjs3NOT 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-expressions022 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean
pnpm check:cross-package-test-inputs0ok
pnpm check:doc-authoring0doc authoring guard: 393 files clean — no bare metadata literals
pnpm check:nul-bytes0OK (scanned 8153 text file(s); no raw ASCII control bytes)
pnpm check:refd-timer-probe0the approved module may read the probe -> GREEN
pnpm check:watch-hint-literal0check-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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 3, 2026
@github-actionsgithub-actionsBot 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 added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit fddfc8dSep 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR 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

@os-steve@claude