Skip to content

academy_batch: a restore session carries the capture and footprint it restores to, and the admitted lane is inserted where it is made; no required input is read back from an Option (touch-clean for card 0f52dd80) - #5711

Merged
joelteply merged 2 commits into
canaryfrom
cormac/deploy-custody-wake
Nov 3, 2026

Conversation

@joelteply

Copy link
Copy Markdown
Contributor

Four run-time complaints ('missing original restore session', 'private teacher missing',
'restore capture missing', 'original serving footprint missing') are now unrepresentable:
Restoring { session, capture, bytes } is set once when the restore begins, and cleanup reads
all three from it; the borrower is the lane prepared now or admitted after retirement, inserted
once. continuum-serving serving_daemon 129/2 (the two host-dependent budget tests, as on canary).

Co-Authored-By: Claude Opus 5.5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE

joelteply and others added 2 commits November 2, 2026 13:55
…er for a free engine wakes on the release, never a timer (card 0f52dd80, part A)

IntelMac 2026-11-02: deploy-consume refused fd1673e at 17:39:58Z on a busy gate (ensure_serving
wedged 17:36-17:47Z, age 640 s against a 180 s bound) and the actuator then waited its 54 min build
bound with no build started. Part B makes that deferral wake on the gate's release; this part gives
the gate a release anything can wait on.

- serving_lifecycle: the three loose Arcs (held flag, start, step) become one private GateState
  with a watch generation that every release bumps, after the flag clears. LifecycleGate::new takes
  only the planner's settled flag; try_operation, is_held, in_flight (start + step) and
  subscribe_release are the API (subscribe first, then read is_held: a release between the two is
  a change the receiver still sees). ServingOperation::acquire is private.
- The serving daemon holds one `lifecycle: LifecycleGate` in place of reconciling /
  reconcile_started_ms / reconcile_step; every reader and the two operation sites go through it.

Tests: engine serving_lifecycle 4/0, including every_release_is_a_change_a_subscriber_sees_with_the_gate_free
(a subscriber before a release wakes and reads free, one after reads free, a reacquire reads held,
two releases are two generations). Mutation receipt: no release published fails it at its 5 s
bound. continuum-serving serving_daemon 129/2. The two failures (budget.rs:464,
budget.rs:689) fail identically on canary on this host (host-dependent, card c4d84be3).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE
… restores to, and the admitted lane is inserted where it is made; no required input is read back from an Option (touch-clean for card 0f52dd80)

Four run-time complaints ('missing original restore session', 'private teacher missing',
'restore capture missing', 'original serving footprint missing') are now unrepresentable:
Restoring { session, capture, bytes } is set once when the restore begins, and cleanup reads
all three from it; the borrower is the lane prepared now or admitted after retirement, inserted
once. continuum-serving serving_daemon 129/2 (the two host-dependent budget tests, as on canary).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE

@joelteply joelteply left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PASS at d3ba119 (source read, no local rerun; CI 28 pass / 0 fail).

  • Gate: GateState replaces the three loose Arcs behind a private acquire, and every caller goes through try_operation(). Drop clears held before bumping the release generation, so a woken waiter reads the gate free. subscribe_release documents subscribe-then-read, which closes the release-before-subscribe race.
  • Test: every_release_is_a_change_a_subscriber_sees_with_the_gate_free covers Codex's release, reacquire, release case (two generations, held again between them).
  • academy_batch: the session, capture and footprint now travel as one Restoring, deleting three read-back complaints. borrower.insert(lane) binds the admitted lane where it is made. The one remaining ok_or_else ("incumbent restoration footprint is unknown") fails at the seam that builds the state, which is where it belongs.

@joelteply
joelteply merged commit e865a91 into canary Nov 3, 2026
31 checks passed
@joelteply
joelteply deleted the cormac/deploy-custody-wake branch November 3, 2026 05:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant