Nothing prices a bind end to end: the cost gate and the recall gate measure different repo sets #198
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#198
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found while pricing #69's receiver widening (lane report, 2026-09-06). Filing because it is a property of the gates, not of #69.
The gap
corpus_costmeasuresvm_step/fullscan_stepover seven pinned repos: rust-ripgrep, python-flask, ts-zod, js-express, php-guzzle, ruby-sinatra, cs-dapper.The recall side (
corpus_tier3_ratchetand the resolved-bind counts) also covers rust-analyzer and py-django, whichcorpus_costnever indexes.For #69 that split is not marginal:
corpus_costreposSo the cost per bind the project can actually compute — 21,535 opcodes/bind — is derived from 12% of the binds, and specifically the least favourable eighth. rust-ripgrep, the one large multi-crate repo in the priced set, is 4,630 opcodes/bind, nearly 5x cheaper; the two unpriced repos are the ones structurally most like it.
The lane did not extrapolate, which was right. But it means a change can be affordable or ruinous on the repos where its benefit actually lands and no gate would report it either way.
Why it matters beyond one change
Every cost/benefit argument in this tree currently joins two numbers taken over different populations. That is the same shape as the corpus being blind to hyphenated crate dirs (#165) and as
precision_gategrading 0 corpus repos (#188): the measurement is sound, the denominator is silently not the one the claim needs.What would close it
Not "add the two repos to
corpus_cost" reflexively — rust-analyzer is large and the cost job has a wall-clock budget. Options, cheapest first:corpus_coststates which repos it prices and which recall-measured repos it does not, so a per-bind figure can never be quoted as if it covered the whole gain. Cheap, honest, and immediately true.(1) and (3) are the honest minimum; (2) is the one that actually widens the denominator.
Evidence
Per-repo table, #69 rebased onto
9d0e06a:ruby-sinatra is the control: driver x1.00, +0.26%, zero binds admitted.
Status after #259 — the diagnostic half is closed, the GATE half is not
Worth updating rather than leaving to be re-derived, because #259 moved
one of the two populations and it is easy to read that as more than it
is.
What changed.
cost_attributioncovered three repos when this wasfiled (
cs_dapper,php_guzzle,rust_ripgrep) — and, notably, noteither of the two this issue is about. It now covers all nine pinned
repos, selected by
COSI_ATTRIBUTION_REPO. So rust-analyzer andpy-django can be priced per statement, on demand, for the first time.
What did not change.
cost_attributionis#[ignore]d and is aDIAGNOSTIC. The GATE —
corpus_cost— still prices the same seven. Soevery ratcheted cost claim still joins two numbers over different
populations, and options 1, 2 and 3 above are all still open.
Today's release is a worked example of the gap
#259's own bless reason contains this paragraph:
That is option 1 being performed by hand, in prose, once per bless.
It worked because the author was careful; it is not a property of the
gate, and the next bless has to remember to do it again. That is the
argument for making the disclosure structural rather than editorial.
A fresh measurement toward option 2
Measured today on
017c6d8, this box, via the newly-reachable path:Two things that bear on the "rust-analyzer is too big for the cost job"
concern:
says the measurement is as stable on this repo as on the priced seven
(the gate documents ~0.02% run-to-run jitter).
which rust-analyzer is the bulk. The stated obstacle is the cost job's
wall-clock budget — that number is worth re-checking against it,
because option 2 may be cheaper than it looked when this was filed.
Neither point settles it on CI hardware, and I have not measured it
there. But if option 2 is affordable, it is the one that actually widens
the denominator rather than annotating it.
Correction to the timing in my previous comment
I wrote "the whole nine-repo attribution run took 30 s wall clock, of
which rust-analyzer is the bulk." That is wrong, and it is wrong in the
direction that flatters option 2, so it needs correcting rather than
leaving.
That run had
COSI_ATTRIBUTION_REPO=rust-analyzerset. Eight reposreported
skipped by COSI_ATTRIBUTION_REPOand did no work. Thefinished in 30.10sis therefore rust-analyzer alone, not the set.Against CLAUDE.md's recorded figure for the same harness — 13.8 s for the
tier-1 seven — the honest reading is:
So adding rust-analyzer to
corpus_costwould roughly triple thatjob's indexing time, not add a slice to it. That does not kill option 2 —
the issue already proposes putting it behind the nightly tier-3 job,
which pays for rust-analyzer today — but it does mean it cannot simply be
added to the per-push tier-1 job, and my previous comment implied
otherwise.
The two claims that stand: the measurement agrees with #259's to 0.013%,
and it is now reachable at all. The affordability claim does not.