evidence_gaps.partial_sources_in_index: 1 fires on EVERY reply while partial_sources is never populated — a three-state disclosure that only ever renders its unfalsifiable state #200
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#200
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 by two independent observers in the same session, neither looking for it.
Measured
Every single
code-indexMCP reply in this session —search_text,read_code,search_symbols,file_outlinealike — carried:partial_sourceswas never present. Not once, across dozens of replies of every shape, including replies that named exactly one file.A lane working #41/#45/#51 reproduced this independently and reported it without having seen the other observation.
Why this is a defect and not a working disclosure
The block is honest in construction and is doing the opposite of its job in practice.
It says a count is a lower bound and an absent row is not evidence of absence — for every answer this index produces. It then declines to name which file, in every reply, forever. A caller has three possible readings and no way to choose between them:
partial_sourcesis never populated on this path at all.Under (1) the block is correct and near-useless. Under (2) or (3) it is a permanent, unfalsifiable qualification attached to every answer the product gives, which is worse than silence: it trains readers to skip it, and it will still be there on the day a real partial extraction matters.
This is the failure this repo has closed repeatedly on other fields — a disclosure that can be vacuously true fires hardest when it is most wrong (#101, #99, #114). It is unusual only in being at the outermost layer, on every reply.
What is not yet known
I did not determine which of (1)/(2)/(3) holds, and the issue should not be closed by asserting one. Three checks, cheapest first:
index_coverageon it should say so, and that immediately separates (1) from (2)/(3).partial_sourcespopulated on ANY code path, in any test? If no test asserts a non-emptypartial_sources, that is the vacuity, and the anti-vacuity shape this repo already uses applies: a floor test that fails when the list is empty on an index that provably contains a partial source.partial_sourceslists only the ones this reply does name", and a reply that names no file is currently indistinguishable from a reply whose named files are all clean.What must NOT be done
partial_sourcesis empty. That collapses "measured, and none of the files in this reply are partial" into "did not report", which is the two-states-one-rendering error this field exists to avoid.partial_sourceswith the whole index's partial files on every reply. The prose is deliberate that it names only files this reply mentions; widening it would put an unbounded list on every answer, and the payload budget has 30 tokens of headroom (#197).Related
#101 and #99 (the same asymmetry on truncated extractions and structural zeros — this may be the same mechanism seen from the caller's side), #197 (the payload budget any fix has to fit), #40 (three-state discipline generally).
Corroborated by two observers, 2026-09-06, against
code-index-mcp 0.26.1 (8d90075).Not a defect. Closing — the disclosure is working, and I filed this without doing the one check that would have told me so.
A lane chased it to ground:
project_overview.extraction_diagnosticsreportsfiles: 1, and the file is the XAML package's incomplete extraction (de.h-dv.xaml/xaml, 2 files, 0% resolution). So reading (1) from the issue above holds — one genuinely partial source is in the index, and the counter is correct.partial_sourceswas absent from every reply for the reason the prose already states: it names only the files this reply mentions, and none of my replies named a XAML file. The field's pointer toindex_coverage(path)is accurate and resolves it in one call.Two things worth keeping from this being wrong:
project_overviewcall, and it separates the working case from the two broken ones outright. I wrote the check down and then filed anyway.Recorded here rather than deleted so nobody re-chases it, which is what the lane asked for.