Skip to content

ledger: narrow two zero-evidence entries that no longer reproduce (gitgalaxy#2729) - #58

Merged
squid-protocol merged 2 commits into
mainfrom
ledger/2729-narrow-zero-evidence-entries
Sep 5, 2026
Merged

ledger: narrow two zero-evidence entries that no longer reproduce (gitgalaxy#2729)#58
squid-protocol merged 2 commits into
mainfrom
ledger/2729-narrow-zero-evidence-entries

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

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_api sat "exactly on the corpus median of 0", which was only
ever 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_exposure opens if api_hits == 0: return 0.0. Four of its five languages no longer
reach that guard:

language resolved by raw_arch_api risk_api_exposure
dockerfile the #2729 wave (EXPOSE <port>) 0 → 1 0 → 4.041
haskell the #2729 wave (module header) 0 → 1 0 → 1.763
yaml the #2729 wave (on: trigger block) 0 → 1 0 → 3.526
ada gitgalaxy#2730 (column-0 library-level subprogram) 0 → 3.25 0 → 7.335

ada is the one that needed the rule fixed rather than the corpus planted: its rule could only
match a package spec, which lives in a different compilation unit from the .adb bodies this
corpus ships.

sqlite remains, for the reason the entry always gave — every form its api rule accepts
already moves a planted count (CREATE [TEMP] VIEW is a func_start hit, CREATE VIRTUAL TABLE a
class_start hit) — so raw_arch_api is still 0 and the guard still pins it. It resolves when
api-no-plantable-idiom's sqlite half does, not before.

risk-documentation-zero-evidence-guard — retired

All four of its languages now measure rather than pin (ada 41.665, dockerfile 19.175, haskell
16.544, yaml 16.674), so the shape reproduces in no language. languages_seen emptied and
still_reproduces false; the entry is kept per GATING.md as the audit trail for why those cells
used 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_documentation is in fact 0.0, and was 0.0 when that note was
written. 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 exclusion
note was wrong about the value and right about the ownership.

Verification

Fresh verifying scan at engine main 0e521e8d, per GATING.md's rule against flipping
still_reproduces without one.

  • bias_report.py --gate — exit 0, 0 unexplained
  • na_check.py --ci — clean
  • Ledgered cells 184 → 180, derived 115 → 120: five cells that were being excused by a
    ledger 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

squid-protocol and others added 2 commits September 5, 2026 10:10
…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
@squid-protocol
squid-protocol merged commit 3b76b48 into main Sep 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant