Audit: self-referential reasoning — 20 more instances, published as a reference register of the recurring shapes - #598
Merged
Conversation
WilfordGrimley
force-pushed
the
docs/self-referential-reasoning-audit
branch
from
July 30, 2026 08:41
4d0dd3c to
71d0e63
Compare
…eport A read-only audit (2026-07-29) hunted deliberately for places the pipeline measures itself against itself, or consumes its own output as independent evidence — after seven such instances had each been found by accident. It found 20 more: 9 CIRCULAR (the measurement cannot return a different answer), 11 CONTAMINATED (it can, but the sample is biased), plus 5 that look circular and provably are not. Published as docs/reference/self-referential-reasoning.md rather than docs/reports/ or docs/audits/ because both of those are in docs_lint's ARCHIVE_PREFIXES — frozen buckets the orphan graph does not traverse. A doc whose whole purpose is to be found BEFORE someone writes the next gate cannot live somewhere the index does not reach. Leads with eight named SHAPES (six from the commission, two that fell out of the findings), each stated as a smell checkable against a diff, because the shape is the part with a shelf life. The findings register below it is the evidence the shapes are real. The five FINE findings are kept: they record what was checked and found sound, so nobody re-litigates them, and F6 — the audit's own false alarm, corrected before reporting — is kept verbatim in substance as evidence the audit was honest about its method. Indexed in docs/README.md and docs/MANIFEST.md (authority: reference — the findings are diagnoses, and the rulings they need are open issues). docs_lint.py --strict is clean. Rulings filed as #592 (soak gate passes runs that never happened), #593 (a zero-weight vote still buys the outcome on 8,207 cards), #594 (does the zero-weight ruling reach eligibility filters?), #595 (the golden set), #596 (the D1 gate that has never excluded anything), #597 (test_guard_master executed by nothing). The roster-tether finding extends #577 and is a comment there, not a duplicate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013NhYmT1PxCcyemA16dFDxN
WilfordGrimley
force-pushed
the
docs/self-referential-reasoning-audit
branch
from
July 30, 2026 08:44
71d0e63 to
07a05ad
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Docs only. One new file, two index edits, no code changed:
docs/reference/self-referential-reasoning.md.Publishes the 2026-07-29 read-only audit that hunted deliberately for self-referential reasoning — places the pipeline measures itself against itself, or consumes its own output as if it were independent evidence — after seven such instances had each been found by accident.
The seven were not everything. 20 further instances: 9 CIRCULAR (the measurement cannot return a different answer), 11 CONTAMINATED (it can, but the sample is biased), plus 5 that look circular and provably are not, kept so nobody re-litigates them.
Where it went, and why
docs/reference/, notdocs/reports/and notdocs/audits/.The mechanical reason is decisive: both of those directories are in
docs_lint.py'sARCHIVE_PREFIXES, so they are exempt from the orphan check — frozen buckets the index graph does not traverse.MANIFEST.mdclassifies both ashistorical: "never for what's true now."Several of these findings are standing hazards a reader needs before writing a measurement, not history. A doc whose whole purpose is to be found before someone writes the next gate cannot live somewhere the index does not reach.
reference/is the bucketMANIFEST.mddefines as "background, methodology, or a lookup index" — which is exactly what this is.Not folded into
pipeline-fidelity-gate.md(BINDING, scoped to one named gate; these findings span the feed, the soak gate, the importer, the lexicon, the tests and the lint) and not intotheory.md(owner-approved, written for an external reader as the federation pitch's technical annex — 20 unsoundness findings do not belong in it).Authority is
reference, deliberately: the findings are diagnoses, and the rulings they need are open issues. Promoting it to BINDING is itself one of the open questions.It leads with the SHAPE, not the instances
The register is long, but the part with a shelf life is the eight named shapes at the top — six from the commission, two that fell out of the findings — each stated as a smell you can check a diff against:
COUNTsIt closes with five review questions in the order they are cheapest to answer. The findings register underneath is the evidence the shapes are real.
The sharpest findings
run_idthat has never existed returnsall_passed = True, and the report printsVERDICT: PASS — safe to widen to the next step. Three of six criteria abstained and the abstentions were dropped. The criterion that abstains is the only one comparing output against an intended cohort — and it is uncomputable for 97.9% of runs (16 of 995 ledger rows carry the key it reads).CanonicalCards, 14,940 haveprintings_count == 1, because that column is a count over our own rows (113,143 agree with a liveCOUNT(*), 0 disagree).The five FINE findings are kept
They record what was checked and found sound — the confidence invariant (the persisted column is write-only; nothing compares confidences, which is why it is safe that the zero-weight cohort asserts the highest ones), the closed version-bump quorum bug,
compute_covered_printing_pks, theUNRESOLVEDeligibility filter, andevidence_transfernot double-counting.F6is the audit's own false alarm, corrected before reporting, kept verbatim in substance — and the corrected number turned out to be the stronger argument.Relationship to #586
Deliberately separate, cross-linked at the one point they meet. #586 is a verdict on one named gate with a governing status page and a natural home in the dated record. This is a cross-cutting pattern catalogue that has to stay findable by someone who has never heard of issue #154.
They meet at shape 4. #586 found the gate's 83.2% "cross-method" headline is computed where both sides are the same decoder;
F6here measures the same non-independence from the other direction (disagreements strictly one-directional = strict subset). Two methods, same conclusion — which, unlike the agreement rate either is examining, is genuine corroboration.Rulings filed
Each self-contained, written for a reader who has not seen the audit:
.claude/hooks/test_guard_master.py— 26KB of tests, executed by nothingNo duplicate filed for the roster tethers — that is issue #577, and the four extensions the audit found (the skip-reason tether has the same shape; three bare literals in
local_fallback.pybypass the derivation; two soft checks are mention-only; the tether's own tests cannot fail) are a comment there instead.K5and blockingrun_name_frequency_eliminationwere deliberately not filed — reasons stated in the doc.Verification
python3 .github/scripts/docs_lint.py --strict→docs-lint: clean.(every backtick code path in the register resolves to a real file atorigin/master)docs/README.md("Understanding the system") anddocs/MANIFEST.md(authorityreference)Provenance
Audit ran read-only against production
85d88bfewhile reading code atorigin/master6bc3e16; functions behind quoted figures were diffed between the two trees and confirmed identical. No source mutated, no test suite run, no dormant command invoked, no row written.🤖 Generated with Claude Code
https://claude.ai/code/session_013NhYmT1PxCcyemA16dFDxN