Identity is code + start + end + detail — the WHOLE region, never the code
alone. That distinction is the entire point: the retired note channel
de-duplicated by stringified note, so two over-depth events at bytes 40 and
900 became one "over-depth" entry and the second offset was gone. Here they
are two defects.
Order is stable (first occurrence wins) so a caller can report defects in
discovery order without sorting; callers that want source order should sort by
start themselves, since discovery order differs between the statement walk
and the bracket walk.
The key is JSON rather than a joined string so that an ABSENT detail and an
empty-string one stay distinguishable, and so the separator cannot be a raw
control byte sitting invisibly in this file.
Concatenate defect lists, dropping exact duplicates.
Identity is
code + start + end + detail— the WHOLE region, never the code alone. That distinction is the entire point: the retired note channel de-duplicated by stringified note, so twoover-depthevents at bytes 40 and 900 became one"over-depth"entry and the second offset was gone. Here they are two defects.Order is stable (first occurrence wins) so a caller can report defects in discovery order without sorting; callers that want source order should sort by
startthemselves, since discovery order differs between the statement walk and the bracket walk.The key is JSON rather than a joined string so that an ABSENT
detailand an empty-string one stay distinguishable, and so the separator cannot be a raw control byte sitting invisibly in this file.