Skip to content

docs: the hot-plug migration guide — fuse to plug-and-play - #269

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/q2-osm-map-reencoding-56p5e2
Aug 14, 2026
Merged

AdaWorldAPI merged 1 commit into
mainfrom
claude/q2-osm-map-reencoding-56p5e2

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Docs only. The guide for the migration operator-directed on 2026-08-14 — "the compile-time fuse is deprecated and should be migrated to the ogar-vocab + hotplug.rs pattern", "akin to USB plug and play" — written from the migration that has now landed (lance-graph #954).

What it covers

  • Why the fuse shape is wrong. A hand-maintained mirror plus a global equality assert is a device that works only if you also patch the host's driver table by hand, in another repo, in another PR.
  • The incident that forced it. osm_street_node (0x0F0B) minted with its mirror row in a second, unopened PR → E0080 at const-eval → a production deploy dead at compile, for a concept it never used.
  • The three roles — zero-dep socket / OGAR authority / consumer — and why the socket must stay dependency-free (a path dep breaks every CI cargo invocation at workspace-load time).
  • The four migration steps, with the HotPlug const and activate call written out.
  • Each ActivationDrift arm as an instruction, not noise — what it means and what to do.
  • A verification recipe that reproduces the incident's shape rather than arguing from the diff.

Three generalisations, stated because they outlive this one fuse

  1. It asserted a global invariant for a local need — no consumer needs the whole codebook to agree, only the ids it uses.
  2. It fired in the wrong place — the crate is workspace-excluded, so it never gated the producer's CI, only every consumer's build.
  3. It could only detect, in a repo that cannot resolve the mismatch.

Two traps worth not re-deriving

  • A length check cannot see a wrong id. If a mirror row points at the wrong classid, counts still match and a COUNT_FUSE is blind. MirrorDrift carries mirror_id: Option<u16> so missing and wrong stay distinguishable.
  • Test a mirror checker against a deliberately-wrong table. With the real mirror there is, by construction, no disagreeing concept — a test using it asserts only the happy path and still passes with the checker deleted.

Scope

Complements CONSUMER-MIGRATION-HOWTO.md, which covers classid-first migration; this one is about how the two sides stay honest about each other. No code, no codebook change.


Generated by Claude Code

Operator direction (2026-08-14): the compile-time fuse is deprecated; migrate
to the ogar-vocab + hotplug.rs pattern, "akin to USB plug and play". This is
the guide for doing that, written from the migration that has now landed.

Covers: why a hand-maintained mirror plus a global equality assert is the
OPPOSITE of plug-and-play; the incident that forced it (osm_street_node 0x0F0B
minted with its mirror row in a second unopened PR -> E0080 at const-eval ->
production deploy dead at COMPILE, for a concept it never used); the three
roles (zero-dep socket / OGAR authority / consumer) and why the socket must
stay dependency-free; the four migration steps; a table reading each
ActivationDrift arm as an instruction rather than noise; and the verification
recipe.

Three generalisations are stated explicitly, because they outlive this one
fuse:
- it asserted a GLOBAL invariant for a LOCAL need — no consumer needs the whole
  codebook to agree, only the ids it uses;
- it fired in the wrong place — the crate is workspace-EXCLUDED, so the fuse
  never gated the producer's CI, only every consumer's build;
- it could only DETECT, in a repo that cannot resolve the mismatch.

And two traps worth not re-deriving: a length check cannot see a WRONG id
(counts still match), which is why MirrorDrift carries mirror_id: Option<u16>;
and a mirror checker must be tested against a deliberately-wrong table, because
with the real mirror there is by construction no disagreeing concept — such a
test asserts only the happy path and passes with the checker deleted.

Complements CONSUMER-MIGRATION-HOWTO.md (classid-first migration); this one is
about how the two sides stay honest about each other.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NMeiLmtDKhomJNSo2ecbJw
@cursor

cursor Bot commented Aug 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_732da873-ec7d-4d18-9784-a6970a2153c7)

@AdaWorldAPI
AdaWorldAPI merged commit 295d4ff into main Aug 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants