Unspent bootstrap secrets accumulated and remained usable for enrol_rekey
after enrol. put_bootstrap now spends prior unspent seeds for the agent
(one live secret), and successful enrol / enrol_rekey clear any siblings.
Regression tests cover leftover-after-enrol, one-live-secret, and
leftover-after-rekey.
Replace passcode identity with Ed25519 challenge-response.
- Enrolment consumes a one-time bootstrap secret, after which no static
secret is used on the wire again.
- Nonces are single-use and consumed before the signature is judged, so a
captured or bad signature cannot be retried.
- Sessions are short-lived, scoped, and typed agent vs human_via_agent.
- Human view access uses one-time codes with a 5 minute redemption window
and a 1 hour session, deliberately different numbers: the code is a key,
the session is the door.
- Invariant: only an agent signature may act as an agent. Enforced and tested.
- Append-only audit trail.
54 tests, covering refusals rather than only the happy path.
Reference implementation, not reviewed or hardened. See README Status.