Live probe on yggdrasil: the queued deployment is not starved. Each time a
continuity restart completes it seals and publish_expected replaces the one
Expected slot for odin with the candidate's; the incumbent's next heartbeat
fails activation-expected-projection against its own catalog and it exits.
notes/odin-cycle-mechanism-2026-09-10.md carries the timeline, snapshots'
decode, the authority map, and the fork to decide. projection_authority_probe
is the ignored dev test that decoded the captured projection versions.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Verified on yggdrasil 2026-09-10T19:23Z: units exit after 2.5-16 min, not
~96 s; that number is the RUDP ack timeout. Unit hashes are per-activation,
not the release hash. Unprivileged journalctl returns a false zero.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Odin had no AGENTS.md, no CLAUDE.md and no notes/ or state/, so every
session started cold in the repo whose deployment is the least routine in
the estate.
AGENTS.md carries what is specific to Odin rather than repeating estate
doctrine: that the host is authoritative, that a local compile says
nothing about the Linux release, that /etc/machine-id must be mounted or
identity tests fail in a way that looks like broken code, and the two
listing traps that have each misled a reading -- an alphabetically
truncated unit list, and odin.service being active while owning no
process.
notes/odin-deployment-handoff-2026-09-10.md records why Odin currently
cycles and why the two obvious interventions fail: an engaged lifecycle
brake parks a continuity transaction on the target and blocks deployment,
which the operator doctrine says it must not; and freeze_one_queued_command
only runs when continuity made no progress, so a queued deployment is
starved on exactly the unstable target it exists to repair.
Both defects are named with the state that proves them rather than left
as a description of a bad night.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>