A validation program for /audit:issues, and the reason for one: the skill has been executed exactly once, by hand, as a runbook — never as a skill. Its abstractions (the doctrine, the deliverable shape, the five phases) are generalised from that single execution, and three more skills are planned on top of them. This is the audit counterpart to what #10 and #14 did for benchmark, and it settles the open question parked in #12 — whether the shared method deserves more structure, or less.
What prompted it
A read of the whole plugin (2026-07-27) started from the suspicion that it was over-complicated. That is not what it found. Line count is not the problem; abstraction ahead of evidence is. Compare benchmark:review-acceleration, which is comparably long but earns it with reproduced verdicts, dated validation runs, calibration anchors, and sentences like "never present warm-only speedups as the headline — ge_arrow measured 1.4–4.8× faster warm and ~45× slower as-used." One sentence like that prevents a class of wrong report. /audit:issues has good categories — fixed-but-open, scheduled-but-escaped, agreed-but-never-filed — and not one worked instance of any of them.
Three defects were real enough to fix without a run, and are done (audit 0.1.1):
| Fixed |
Was |
| Phase checkpoints are named, and phase 2 appends per item |
Resumability was promised in three files, but phases 2 and 3 named no artifact — so a lost session resumed only if the next one guessed the same filename. Phase 2 is also the phase a long run dies inside, and it was specified to write on completion. |
| The bundle scales to the tracker |
Four documents were unconditional; under ~30 open issues that is three files of padding, and padding makes a report less checkable. |
meta.fetched_by replaces meta.authenticated |
The old field could only ever be true — preflight exits on every unauthenticated path. A provenance field that cannot vary is not evidence. |
Everything else needs a run to settle, which is what this issue is for.
The claims under test
Each of these is asserted somewhere in the plugin and is currently unfalsified. A run that does not try to break them is not a test.
| Claim |
Asserted in |
How a run falsifies it |
| Resumes across a lost session |
README, SKILL.md, doctrine §4 |
Kill the run mid-phase-2 and restart. Does it resume at the right item — not re-verifying the whole set, not silently skipping the item it died on? |
| Thread-complete on the closed side |
doctrine rule 3 |
Spot-check closed issues whose decisive content is only in the thread. Does the report reflect it, or only the title and stateReason? |
| Every claim carries an evidence class |
doctrine §2 |
Sample findings. Any untagged claim is a defect by the doctrine's own rule; any [verified] whose citation does not support it is worse. |
| The self-audit closes gaps rather than disclosing them |
doctrine §5 |
Are unaccounted numbers explained one by one, or waved at collectively? |
| Read-only |
doctrine §3 |
Tracker and working-tree diff either side of the run. Must be empty. |
| Sibling checks catch wave escapes |
quantecon-context.md |
Does it find at least one real cross-repo miss? If a repo has none, seed a known one and check it is caught. |
| Tiering slots into the repo's existing plan |
SKILL.md phase 4 |
Does the report name the plan anchor it discovered, and would a maintainer agree with T0? |
Run matrix
Sizes measured 2026-07-27. Sequenced deliberately — these are multi-hour runs and the first one has to be the anchor.
| # |
Repo |
Family |
Open issues |
All items |
What it tests |
| 1 |
QuantEcon/action-translation |
action-* |
55 |
228 |
Regression anchor. The only tracker the runbook has been through, so the skill run can be diffed against the hand run — the benchmark calibration pattern. Also: consumer-visible tiering, and verify-against-the-tag rather than main. |
| 2 |
QuantEcon/lecture-jax |
lecture-* |
29 |
341 |
Small open set, large PR history. Exercises the new bundle scale rule right at its boundary, and campaign/sibling detection where SYNC: PRs are the norm. |
| 3 |
QuantEcon/meta |
org-wide |
161 |
319 |
The hardest case for the doctrine: issues with no code to verify against. What does [verified] mean when the artifact is a decision? If the answer is "nothing", the doctrine needs a fourth evidence class or an explicit exclusion. |
| 4 |
QuantEcon/lecture-python.myst |
lecture-* |
73 |
1003 |
Endurance, and a stretch goal. Does phase 2 judgement hold quality at item 70 the way it did at item 5? Scope to issues, using PRs as evidence only. |
One private project-* repo is worth adding if a run is cheap, since it is the only way to exercise the auth path that quantecon-context.md § Access describes.
What each run records
A run document in reviews/, following the convention set by reviews/validation-run-ge_arrow-2026-07-22.md: reviews/audit-run-<repo>-<date>.md. Not the bundle itself — the bundle belongs in the audited repo per deliverables.md.
- Snapshot provenance: repo, timestamp,
fetched_by, item counts, unaccounted numbers.
- Cost and duration: wall clock and rough token spend per phase, so "expect hours, not minutes" stops being a guess.
- Every claim in the table above, marked held or broken, with the evidence.
- Interruption log: where it was killed, what resuming actually did.
- What the doctrine did and did not transfer. This is the payload. A rule that was cited and load-bearing, a rule that never came up, and a rule the run had to work around are three different verdicts, and only the third is a bug.
- A maintainer's read of the tiering — the one thing no self-audit can check.
Exit criteria
The program is done when all of these hold, not when the runs finish:
The packaging question, deliberately deferred
The plugin ships three plugin-level reference files for a family of one, and docs/developing-skills.md says the opposite in its own words: "Only SKILL.md is required … Adding either before you need it just makes the skill harder to read." The observable cost today is small — about six passages exist purely to disclaim the generality they just asserted (deliverables.md opens by calling itself "a worked example, not a contract"), and the split changes nothing about what the skill produces.
That is a reason to leave it alone until there is evidence, not a reason to refactor now. Run 3 is the sharpest test: QuantEcon/meta is far enough from action-translation that whatever survives it is probably genuinely general, and whatever does not was a description of the first execution wearing a doctrine's clothes. Decide after run 3 — merge, split, or leave — and record the reasoning here.
Tracking: #12 (the audit plugin plan).
A validation program for
/audit:issues, and the reason for one: the skill has been executed exactly once, by hand, as a runbook — never as a skill. Its abstractions (the doctrine, the deliverable shape, the five phases) are generalised from that single execution, and three more skills are planned on top of them. This is theauditcounterpart to what #10 and #14 did forbenchmark, and it settles the open question parked in #12 — whether the shared method deserves more structure, or less.What prompted it
A read of the whole plugin (2026-07-27) started from the suspicion that it was over-complicated. That is not what it found. Line count is not the problem; abstraction ahead of evidence is. Compare
benchmark:review-acceleration, which is comparably long but earns it with reproduced verdicts, dated validation runs, calibration anchors, and sentences like "never present warm-only speedups as the headline — ge_arrow measured 1.4–4.8× faster warm and ~45× slower as-used." One sentence like that prevents a class of wrong report./audit:issueshas good categories — fixed-but-open, scheduled-but-escaped, agreed-but-never-filed — and not one worked instance of any of them.Three defects were real enough to fix without a run, and are done (
audit0.1.1):meta.fetched_byreplacesmeta.authenticatedtrue— preflight exits on every unauthenticated path. A provenance field that cannot vary is not evidence.Everything else needs a run to settle, which is what this issue is for.
The claims under test
Each of these is asserted somewhere in the plugin and is currently unfalsified. A run that does not try to break them is not a test.
stateReason?[verified]whose citation does not support it is worse.Run matrix
Sizes measured 2026-07-27. Sequenced deliberately — these are multi-hour runs and the first one has to be the anchor.
QuantEcon/action-translationaction-*benchmarkcalibration pattern. Also: consumer-visible tiering, and verify-against-the-tag rather thanmain.QuantEcon/lecture-jaxlecture-*SYNC:PRs are the norm.QuantEcon/meta[verified]mean when the artifact is a decision? If the answer is "nothing", the doctrine needs a fourth evidence class or an explicit exclusion.QuantEcon/lecture-python.mystlecture-*One private
project-*repo is worth adding if a run is cheap, since it is the only way to exercise the auth path thatquantecon-context.md§ Access describes.What each run records
A run document in
reviews/, following the convention set byreviews/validation-run-ge_arrow-2026-07-22.md:reviews/audit-run-<repo>-<date>.md. Not the bundle itself — the bundle belongs in the audited repo perdeliverables.md.fetched_by, item counts, unaccounted numbers.Exit criteria
The program is done when all of these hold, not when the runs finish:
audit/references/examples/— a real issue through verification to catalog entry, with its evidence tag. This is the single highest-value artifact the program produces, and it is whatbenchmarkhas andauditdoes not.reconcileandrequire_thread_objects(carried from #12;coverage.jsonis load-bearing evidence and currently untested)The packaging question, deliberately deferred
The plugin ships three plugin-level reference files for a family of one, and
docs/developing-skills.mdsays the opposite in its own words: "OnlySKILL.mdis required … Adding either before you need it just makes the skill harder to read." The observable cost today is small — about six passages exist purely to disclaim the generality they just asserted (deliverables.mdopens by calling itself "a worked example, not a contract"), and the split changes nothing about what the skill produces.That is a reason to leave it alone until there is evidence, not a reason to refactor now. Run 3 is the sharpest test:
QuantEcon/metais far enough fromaction-translationthat whatever survives it is probably genuinely general, and whatever does not was a description of the first execution wearing a doctrine's clothes. Decide after run 3 — merge, split, or leave — and record the reasoning here.Tracking: #12 (the
auditplugin plan).