Files
observer/crates
grenadeandClaude Opus 5 289a80a7eb
deploy / build (push) Successful in 7m19s
deploy / deploy-web (push) Successful in 4s
deploy / deploy-api (push) Successful in 15s
fix: a single-runtime chain lost the one fact worth having
`discover_runtimes` seeded its map with two plain inserts — the runtime at
block 1 and the runtime at the tip. On a chain that has only ever run one, both
probes report the same `spec_version` and the second insert overwrote the
first, so the recorded height was the tip rather than block 1.

Mainnet therefore read "in force from #13,501", which is where this observer
started watching and not where the runtime started. Heisenberg hid it: its two
ends are different runtimes, so nothing was overwritten and all six boundaries
came out right.

Both call sites and the recursion now go through one `note` helper that keeps
the lowest height seen. That is the invariant the whole search rests on —
bisection meets a runtime inside its reign before it finds where the reign
began, so a probe can only improve the bound and none may worsen it — and it
was previously written out twice, correctly in the recursion and not at the
seed.

`lower_first_seen` takes the minimum, so the wrong row corrects itself on the
next discovery pass rather than needing a migration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jp6a8EDar9ueEhAxzep4V5
2026-09-09 17:57:02 +03:00
..