Found by gitar-bot on hyperpolymath/verisimdb-data#72 and verified against the actual diff before filing. Both findings are correct.
Symptom
A rescan with no upstream change produces a diff of +20,277 / −20,277 across 249 files — exactly symmetric, because essentially none of it is real.
1. Array ordering is unstable
Elements are re-emitted in a different order with identical content. Verified in scans/dafniser.json:
+ "disk",
- "memory",
- "disk"
+ "memory"
gitar cites the same pattern in recommended_attacks (Axiom.jl.json:916-921), dependency_graph.edges (hermeneia.json:385-437, cloudguard-server.json:161-310) and taint_matrix.rows (kea.json:240-281, chapeliser.json:152-196).
Suggested fix: sort before serialising — edges by from/to, rows by source_category+sink_axis, attack lists lexically. If these are built from a HashMap/HashSet, that is the likely cause; BTreeMap or an explicit sort at the emit boundary fixes it.
2. Language classification flips, and inconsistently
Verified in the diff:
- "language": "idris"
+ "language": "rust" # scans/dafniser.json
- "language": "elixir"
+ "language": "scheme" # anvomidav
gitar additionally reports halideiser idris→rust, lustreiser rust→idris (the opposite direction), awesome-idris2 scheme→idris, i-human zig→idris, unified-dataset-vocab idris→zig, refugia nickel→shell, rescript-ecosystem javascript→shell.
The mutual inconsistency is the tell: if this were a genuine reclassification the flips would share a direction. Opposite-direction flips in the same run point at an arbitrary tie-break on multi-language repos.
Suggested fix: make detection deterministic — stable ordering, with an explicit tie-break by file count and then by a fixed language priority.
Why this matters beyond noise
- Any downstream analysis keyed on
language is being fed a value that changes for no reason.
- A 249-file symmetric diff cannot be reviewed, so a genuine regression arriving in the same rescan would pass unnoticed. That is a review gate defeated by noise rather than by a bug.
Filed from verisimdb-data#72; both gitar threads there point here.
Found by gitar-bot on
hyperpolymath/verisimdb-data#72and verified against the actual diff before filing. Both findings are correct.Symptom
A rescan with no upstream change produces a diff of +20,277 / −20,277 across 249 files — exactly symmetric, because essentially none of it is real.
1. Array ordering is unstable
Elements are re-emitted in a different order with identical content. Verified in
scans/dafniser.json:gitar cites the same pattern in
recommended_attacks(Axiom.jl.json:916-921),dependency_graph.edges(hermeneia.json:385-437,cloudguard-server.json:161-310) andtaint_matrix.rows(kea.json:240-281,chapeliser.json:152-196).Suggested fix: sort before serialising — edges by
from/to, rows bysource_category+sink_axis, attack lists lexically. If these are built from aHashMap/HashSet, that is the likely cause;BTreeMapor an explicit sort at the emit boundary fixes it.2. Language classification flips, and inconsistently
Verified in the diff:
gitar additionally reports
halideiseridris→rust,lustreiserrust→idris (the opposite direction),awesome-idris2scheme→idris,i-humanzig→idris,unified-dataset-vocabidris→zig,refugianickel→shell,rescript-ecosystemjavascript→shell.The mutual inconsistency is the tell: if this were a genuine reclassification the flips would share a direction. Opposite-direction flips in the same run point at an arbitrary tie-break on multi-language repos.
Suggested fix: make detection deterministic — stable ordering, with an explicit tie-break by file count and then by a fixed language priority.
Why this matters beyond noise
languageis being fed a value that changes for no reason.Filed from
verisimdb-data#72; both gitar threads there point here.