Every spacing constant was tuned against a snapshot and silently broke when content changed. The layout now derives all distances from the content, so overlap is impossible by construction.
v0.19.112026-07-12
·Adaptive pipeline: DERIVE → MEASURE → ALLOCATE → PLACE → VERIFY, zero distance constants
·Nodes overlapping their neighbour: 65.1% → 16.4% → 0.0%
·Magic "8 units" test replaced by relational invariant: dist(a,b) ≥ r(a)+r(b)
·50-finding append-only ledger + 9 characterization guards that fail when facts change
·Guard found GD-050 on first run: isSun is computed, then deleted on the next line
·Deleted the dead renderer scaffolding — 5 things that looked like a seam and weren't