v1.108.237 - a YAML symbol's byte extent describes real source, not a reconstruction
_append_virtual_symbol took byte_offset from the file and byte_length from len(signature). The signature is rebuilt from parsed data, never quoted from the source, so the two came from different coordinate systems and their product was a slice of arbitrary bytes. It held for 237 of 237 virtual symbols.
In .github/workflows/health-radar-comment.yml the uses key, whose reconstructed signature is 74 bytes, returned 74 bytes spanning two entirely different sibling keys. Round-tripping also inflates: name: Health Radar Comment is 27 bytes of source and reconstructs to 28, because the rebuild quotes the scalar.
What changed
byte_offset and byte_length now describe the symbol's actual source line, so they share a coordinate system. content_hash covers the same bytes the extent names, which is what lets verify succeed at all — content_verified had been returning False for YAML symbols while the response verdict still read ok.
An unlocatable symbol now gets a zero extent rather than a plausible slice. Refusing beats confidently returning somebody else's text. Seven symbols in this repository take that path, all with a line number past end-of-file.
Measured at get_symbol_source on a fully re-parsed index: byte_length == len(signature) fell from 100% to 1.6% (the residue is lines whose real length coincidentally equals their signature's), and content_verified is true for 1415 of 1422 virtual symbols, the exceptions being exactly the zero-extent seven.
Known issue this isolates but does not fix
line is still mislocated for roughly a quarter of YAML symbols. Affected symbols now return a real line rather than fabricated bytes, which is a strict improvement, but it may be the wrong line. Previously the two defects compounded and could not be told apart; any remaining wrongness now has exactly one cause. A fix is in progress.
Upgrade note
No INDEX_VERSION bump, so existing indexes keep the old extents until re-parsed. Re-index a file, or let the watcher do it, to pick up the correction.
Tests deliberately assert the extent is a real, whole, self-consistent line and say nothing about which line, so neither defect's regression can hide inside the other's test.
Verification status: full suite 6842 passed / 7 skipped / 1 failed. The single failure is test_v1_108_207::test_warms_sentence_transformers, which fails identically on the unmodified previous release commit: it is environment-coupled and goes red on any machine without the optional sentence-transformers dependency. Not related to this change and not a regression.