ledger: narrow two zero-evidence entries that no longer reproduce (gitgalaxy#2729) - #58
Merged
Merged
Conversation
…tgalaxy#2729) Both were validated 2026-09-04, the day BEFORE the gitgalaxy#2729 corpus wave merged (#53, 2026-09-05 00:10), and both close on a prediction that turned out wrong in the corpus's favour: "it resolves when gitgalaxy#2727 gives these languages orphans again". The fix came through the api RULE instead, so neither needed #2727. Their own evidence line dates them: `raw_arch_api` sat "exactly on the corpus median of 0", which was only ever true pre-wave. * risk-api-exposure-zero-api-shortcircuit: 5 languages -> 1. dockerfile, haskell and yaml were resolved by the wave itself, which planted the file-level surface their rules can see (raw_arch_api 0 -> 1 each, so api_hits is no longer 0 and _calc_api_exposure's guard never fires); ada by gitgalaxy#2730, which taught its rule the column-0 library-level subprogram its .adb bodies actually contain (0 -> 3.25). Measured now: ada 7.335, dockerfile 4.041, haskell 1.763, yaml 3.526. sqlite remains, for the reason the entry always gave -- every form its api rule accepts already moves a planted count -- and it resolves when api-no-plantable-idiom's sqlite half does. * risk-documentation-zero-evidence-guard: retired. All four of its languages measure rather than pin (41.665 / 19.175 / 16.544 / 16.674), so the shape reproduces nowhere. Entry kept with languages_seen emptied per GATING.md. Recorded rather than quietly inherited: its note excluding sqlite ("carries load-bearing undocumented slices, so its documentation risk is measured") was wrong about the value -- sqlite reads 0.0, and did when the note was written -- but right that this entry does not own it. sqlite's risk_documentation belongs to path-and-extension-modifiers, so retiring this entry transfers nothing. Fresh verifying scan at engine main 0e521e8d, per GATING.md's rule against flipping still_reproduces without one. Ledger-only change plus the regenerated report: bias_report.py --gate still exit 0, 0 unexplained; na_check.py --ci clean. Ledgered cells 184 -> 180 and derived 115 -> 120 -- five cells that were being excused by a stale ledger claim now resolve through a real derivation edge instead, which is the more accurate of the two verdicts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WfeHRWra1d6Z5uSReFajSq
Conflict was in the generated report only: bias-history auto-committed a regenerated docs/ set on main (2d18562) after #57 merged, while this branch carried its own regen. Resolved the same way as any generated file -- took origin/main's docs/, then re-ran bias_report.py so they are recalculated from the merged ledger rather than stitched together. deviation_ledger.json merged clean and both narrowed entries survived verbatim. The regenerated delta against origin/main is exactly the narrowing and nothing else: ledgered 185 -> 180, derived 115 -> 120, and the two retired entries drop out of ada / dockerfile / haskell / yaml's findings tables (their explained-by- ledger counts fall 7->5, 14->12, 12->10, 14->12). Gate still exit 0, 0 unexplained. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WfeHRWra1d6Z5uSReFajSq
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.
Follow-up to #57, closing out squid-protocol/gitgalaxy#2729. Ledger-only, plus the regenerated
report.
What was stale
Two entries claimed a shape that measurement no longer supports. Both were validated 2026-09-04
— the day before the gitgalaxy#2729 corpus wave merged (#53, 2026-09-05 00:10) — and their own
evidence line dates them:
raw_arch_apisat "exactly on the corpus median of 0", which was onlyever true pre-wave.
Both also closed on the same prediction: "it resolves when gitgalaxy#2727 gives these languages
orphans again." That prediction was wrong, in the corpus's favour — the fix came through the api
rule, and neither entry needed #2727.
risk-api-exposure-zero-api-shortcircuit— 5 languages → 1_calc_api_exposureopensif api_hits == 0: return 0.0. Four of its five languages no longerreach that guard:
raw_arch_apirisk_api_exposuredockerfileEXPOSE <port>)haskellyamlon:trigger block)adaadais the one that needed the rule fixed rather than the corpus planted: its rule could onlymatch a package spec, which lives in a different compilation unit from the
.adbbodies thiscorpus ships.
sqliteremains, for the reason the entry always gave — every form its api rule acceptsalready moves a planted count (
CREATE [TEMP] VIEWis afunc_starthit,CREATE VIRTUAL TABLEaclass_starthit) — soraw_arch_apiis still 0 and the guard still pins it. It resolves whenapi-no-plantable-idiom's sqlite half does, not before.risk-documentation-zero-evidence-guard— retiredAll four of its languages now measure rather than pin (
ada41.665,dockerfile19.175,haskell16.544,
yaml16.674), so the shape reproduces in no language.languages_seenemptied andstill_reproducesfalse; the entry is kept per GATING.md as the audit trail for why those cellsused to read 0.
One correction recorded rather than quietly inherited: the entry excluded sqlite on the grounds
that "it carries load-bearing undocumented slices, so its documentation risk is measured rather
than pinned." sqlite's
risk_documentationis in fact 0.0, and was 0.0 when that note waswritten. It is 0.0 for a different reason and is owned by a different entry
(
path-and-extension-modifiers), so retiring this one transfers nothing to sqlite — the exclusionnote was wrong about the value and right about the ownership.
Verification
Fresh verifying scan at engine
main0e521e8d, per GATING.md's rule against flippingstill_reproduceswithout one.bias_report.py --gate— exit 0, 0 unexplainedna_check.py --ci— cleanledger claim that no longer holds now resolve through a real derivation edge instead. That is the
more accurate of the two verdicts, and it is why the totals move in opposite directions rather
than the unexplained count rising.
Cross-repo
Nothing on the engine side. squid-protocol/gitgalaxy#2729's two halves are already merged
(gitgalaxy#2743, gitgalaxy#2747, and #57 here); this is the last stale claim its close-out audit
turned up, and #2729 closes on it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WfeHRWra1d6Z5uSReFajSq