carlos / platform Public

zdd-readiness: final review round 2, roll notes qualify the epoch bound and mixed-version retries

Astra R2 item 9 and ledger rulings: the finding 5 closure cites fb55d199 and says what round 2 found; the reopen's 2^20 sequence advance is a bound, not a guarantee (and its enforcement is listed as still owed); an older box does not check the grant's book or epoch, so mixed-version retry sequencing stays a flag gate; a declined box's book saves (reconciliation, the reopen advance) are attempts whose failure is logged while the box continues.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 81a1ffa36c01ff678cd1ccd9a36f4a39013b50ca parent fb55d19
1 file changed, +36 −10
  • docs/superpowers/plans/2026-10-07-zero-downtime-deploys-6-roll-notes.md +36 −10
diff --git a/docs/superpowers/plans/2026-10-07-zero-downtime-deploys-6-roll-notes.md b/docs/superpowers/plans/2026-10-07-zero-downtime-deploys-6-roll-notes.md
index 3ed3e5ea2..3e10f710f 100644
--- a/docs/superpowers/plans/2026-10-07-zero-downtime-deploys-6-roll-notes.md
+++ b/docs/superpowers/plans/2026-10-07-zero-downtime-deploys-6-roll-notes.md
@@ -50,8 +50,8 @@ dormant and `CARLOS_SWAP` must stay unset until everything below is closed.
- N5 to N7: gaps in the hold-ran marker. N7 is a disagreement over how it
treats an existing failure record. Closed on zdd-flag-readiness (b402bc0e,
42865b81; N6 with 0d6029b3, 3e875ff2; final review round 1: 1e842f89,
- c327f703, e72e68d2), pending merge. That covers markers keeping records,
- blocking the worker fallback and signed-rollback provenance, with marker =
+ c327f703, e72e68d2; final review round 2: fb55d199), pending merge. That
+ covers markers keeping records, blocking the worker fallback and signed-rollback provenance, with marker =
installed = good boots (ruling 205). N6 and the retry ordering use a
persisted book sequence and per-execution markers, so a pre-retry outcome
never undoes a retry. The round 1 fixes: an execution's identity carries
@@ -60,11 +60,22 @@ dormant and `CARLOS_SWAP` must stay unset until everything below is closed.
clears nothing of the new one (1e842f89); a retry that removes only a
marker still orders a late failure of an execution that began before it
(c327f703); and a host retry of a build the instance does not want yet
- keeps its canary for that build (e72e68d2).
+ keeps its canary for that build (e72e68d2). Round 2 found e72e68d2 kept
+ only one entitlement per host, so a retry of a second restricted build
+ took away the first build's canary, and the first build could then never
+ be retried again (the book already listed the host as retried for it).
+ Since fb55d199 entitlements are kept per host and build: each is spent
+ only by the adoption onto its own build, comes back if that adoption is
+ proven to have run nothing, and is dropped once the book no longer lists
+ the host as retried for that build.
- F5: failure-record durability across a failed write followed by a restart.
Closed on zdd-flag-readiness (8836e521: write-ahead intents, schema-2 book,
startup reconciliation; f46d3142, 4416872e: a shutdown join so planned
- restarts leave no intent), pending merge.
+ restarts leave no intent), pending merge. A box that declined the flag
+ also reconciles an armed run's intents into records, but its save of the
+ reconciled book is an attempt: a failed save is logged and the box carries
+ on with the records in memory, and reconciles the intents again on its
+ next start.
- Ruling 206: an uncertain nested start is a hold failure. Closed on
zdd-flag-readiness (c453a798), pending merge.
- Boxes that declined to arm: worker restarts; refusals checked only at plan
@@ -170,9 +181,15 @@ on #272 too.
restriction's epoch and to the identity of the box's failure book, and
every box ignores an unsigned retry. The book identity (c12c35c3) stops a
grant for one book's restriction clearing another book's at the same
- epoch, and every open of the book moves its sequence past any epoch an
- earlier run handed out unsaved. A
- console with no signing key answers 503, and the text of that refusal is
+ epoch. Every open of the book also advances its sequence by 2^20 (about a
+ million), so a run does not hand out again an epoch an earlier run handed
+ out but never saved. That is a bound, not a guarantee: an epoch could be
+ reused only if an earlier run made more than a million book changes
+ without one successful save, and nothing enforces that limit (see "Still
+ owed"). An armed agent saves the advance when it opens the book, or
+ refuses managed starts. A box that declined the flag keeps the advance in
+ memory until its next write of the book, and that write is an attempt: a
+ failed save is logged and the box continues. A console with no signing key answers 503, and the text of that refusal is
new copy awaiting review (`copy-review/strings.json`).
- `provision.ListRecords` silently skips unreadable instance records (Astra
plan 6 R3). A relevant fleet can then drop out of the deploy watch's
@@ -246,6 +263,11 @@ blocker, and the fix wave for that round did not close them.
A future feature.
- Spec section 11 still says a retry is a re-signed pointer. The spec needs a
revision for console-signed host-retry grants.
+- The reopen epoch bound (c12c35c3): the 2^20 advance is not enforced, so a
+ run with more than a million unsaved book changes could let a later run
+ reuse an epoch. Before the flag goes on, enforce the bound, reserve epochs
+ durably, or get Paul's ruling that the limit is acceptable (Astra, final
+ review round 2).
- Mixed-version retry sequencing: the order in which boxes and consoles take
the signed, book-bound grants needs writing down and checking on dev before
the flag goes on (see "Retries: boxes before consoles" below).
@@ -261,9 +283,13 @@ by 076bd9c0 (final review round 1), pending merge.
Since c12c35c3 a grant must also name the box's failure book: a box on
this branch drops a grant from a console that does not sign one, and the
log line says the grant is for book "". A box from before this branch
- handles a retry as it does today. Nothing is cleared that should not be,
- but a retry asked between the two rolls may have to be asked again once
- the console is updated.
+ handles a retry as it does today: it does not check the grant's book or
+ epoch, so receiving the extra field gives it none of this protection. Until
+ every box runs this branch, an older box can apply a retry that a box on
+ this branch would refuse (one for a stale epoch or for another book), so
+ retry sequencing across a mixed-version roll stays a flag gate (see
+ "Still owed"). A retry asked between the two rolls may also have to be
+ asked again once the console is updated.
- **Schema 2 failure book.** The failure book file is written as schema 2.
Downgrading an agent with the flag on makes that box refuse managed starts.
Recover by upgrading the agent again. Do not delete the file to get past