Two parse-error channels, one census: doctor and project_overview report 0 errors for a file index_coverage correctly reports as broken, and file_outline says nothing is wrong #148
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#148
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 a production-readiness review, on
tests/packages/xaml/fixtures/Broken.xaml— exactly the XAML customer's file class.Three surfaces, three different answers about the same file
index_coverageextraction_diagnostics: ["extract.parse_error"]✅ correctproject_overviewparse_errors: 0❌code-index doctor[ OK ] parse error rate 0/709❌file_outlineCause
files.parse_error(the builtin path) andfile_contributions.diagnostics(packaged extractors) are different columns, and only the first is counted. So a packaged extractor's parse failures are invisible to every census.This is #112's shape — a packaged language invisible to a host table — in the health surface rather than the resolver.
The
file_outlinenote is worse than a missing countserver.rs:12495returns a&'static str, unconditional, whose own comment asserts "nothing is wrong". ForBroken.xamlall three named causes are false: the extractor stopped at line 1 of 4. A user reading that note concludes the file is fine.An unconditional string that explains an observation it never checked is not a disclosure — it is a guess rendered as a measurement.
Note for the in-flight
partial_sourcesworkIt adds a repo-wide denominator here, but it matches by exact path string against the payload, so it will structurally miss the empty-outline case — which has no path in its body. Worth handling in the same change rather than discovering it later.
Related
derived_namescost only visible by greppingfiles.parse_error) — same column, same blind spot🤖 Generated with Claude Code
https://claude.ai/code/session_01K1zj5VcFJvJt3pQxe9259K
code-index doctoris blind to staleness, watcher health and resolve state, and check_disk_free only fires at literally zero bytes #150Triage 2026-09-06: CLOSING. All four surfaces the issue tabulated now agree, off one derivation with two readers.
Verified against master; landed in
6cc5b4f.The four surfaces
project_overviewcrates/mcp-server/src/server.rs:9251doctorcrates/cli/src/doctor.rs:91,:661,:680file_outlinecrates/mcp-server/src/server.rs:13965-14003crates/daemon/src/local_index.rs:1213,:2649The
file_outlinechange is the one that answers this issue's sharpest complaint. The unconditional&'static str— "nothing is wrong" — is gone, replaced byEmptyOutlineRespwhose note is, in its own words, "composed from the columns the probe returned, never a constant". A constant cannot be wrong about a broken file because it was never looking; a composed note can be, which is what makes it worth reading.The generalisation that made it stick
6cc5b4f's framing is worth keeping: every registry in this tree keys on a site — a surface, a cap, a stage, a reason code. None keys on a derivation. That is why a field can be correct at one site and wrong at another, and the mechanical cause is visible in the type:Surface::produceris&'static str, singular, so a surface running four renderers can name one while nothing proves the unnamed three exist.disclosure_derivation_registrykeys on(field, surface)instead.The forward-looking note in the issue is handled too
EmptyOutlineRespnow emits the routed relativepathin the body, specifically sopartial_sources' exact-path matcher can annotate the empty-outline case that structurally had no path to match on —server.rs:13982-14000.Runs (all exit 0)
Three surfaces, three suites, one derivation — which is the arrangement that makes a future fifth surface hard to get wrong.
Residual
None.
🤖 Triage lane, 2026-09-06, master
45cf6e4evidence_gaps.semanticstells the reader to consultpartial_sources, and no tool ever emits that field #216evidence_gaps.semanticstells the reader to consultpartial_sources, and no tool ever emits that field #216evidence_gapswarns on every reply that the answer may be short, and gives no way to find out which file —index_coverage(path)needs the path you are trying to learn #241