Skip to content

disposition queue #844/#840/#728 is fully staged and approval-blocked — two cross-identity reviews unblock the train #854

Closed

Description

@Amperstrand

State (all staged, nothing left to prepare)

PR head what it is closes on merge gate
#844 77064b3 global-ARG hoist in Dockerfile.client + fragment — re-lights every cloud-lab lane (client/killer images are unbuildable from scratch without it) #724 1 approving review
#840 08c015f both #834 audit halves (NUT-07 value-correlation + journal dir-fsync) + ported shortfall test #834 1 approving review
#728 0a8079d FROM-ARG scope fence, guard-only (hardened: refuses vacuous passes) — review after #844 + a one-line rebase

#843 was the duplicate sibling — closed with the disposition record; its unique test lives in #840 now. Auto-merge (squash) is queued on #844 and #840 — each fires the moment its review lands.

The blocker, exactly

Branch protection on main requires ≥1 approving review from an identity with write access other than the PR author. The author identity (Amperstrand) is the only credential on the review lane's machine; GitHub forbids authors approving their own PRs, and both gh pr merge and gh pr merge --admin are refused with "At least 1 approving review is required by reviewers with write access." Cross-identity approval is this repo's documented governance (the @felixfelix-bot requests on #840/#728/#844).

There is no other blocker. Fragments, tests, dispositions, merge ordering and the auto-merge queue are all done; the post-merge tree is pre-verified (below).

What resolves it — exact steps, in order

  1. Approve fix(cloud-lab): Dockerfile.client's GO_VERSION must be a global ARG — the client image cannot build from scratch #844 → queued squash fires → main gets the fix + fragment, cloud-lab Dockerfile.client: mid-file ARG invisible to FROM — client and killer images unbuildable on docker/buildkit 29 (golang:-bookworm) #724 closes itself, the rig's cloud-lab lanes can build from scratch again.
  2. Approve fix(wallet,merchant): correlate NUT-07 answers by value; fsync journal directories after rename (#834) #840 → squash fires → audit hardening: NUT-07 checkstate should correlate returned Ys by value; journal renames should fsync the directory #834 closes itself.
  3. test(contract): FROM-ARG scope fence for cloud-lab Dockerfiles #728 finishes: one-line rebase onto the new main (the fence flips red→green — pre-proven on the simulated tree), then its own approving review.

Post-merge tree — pre-verified while waiting

Simulated full landing (sim-all = main c7dbd74b + all three heads, merged):

Rig runs still outstanding (handoff: /tmp/opencode/release-week/rig-handoff-wave3.md, quoted here for durability)

Operational notes

Review trail: #843/#844 wave3 reviews, #843 close record, #840 merge-record, approval asks (issuecomments 6092350810, 6092351042, 6106661992, 6106665143, 6106786703).

Activity

  1. Amperstrand commented on Oct 11, 2026

    @Amperstrand
    CollaboratorAuthor

    Fork-retirement delta (#758 migration, 2026-10-11 ~09:45): the queue was migrated to new PR numbers — #840 → #876, #728 → #861; #844 unchanged. The migration pushed stale heads over both staged branches: #876 opened at ff0bc28 (dropping the reviewed test-port commit), #861 at 52c2f9a (the broad original its rewritten guard-only body explicitly disclaims). Both branches restored (08c015f1 fast-forward, 0a8079d1 force) and verified; #876's auto-merge re-queued (squash, fires on review); #861 stays manual behind #844 per merge order. Continuation comments posted on both new threads. The blocker and resolution steps are unchanged — just with #876 in place of #840 in steps 2. Migration is active (batch through #878) — if heads move again, check for the same stale-push pattern before assuming intent.

  2. Amperstrand commented on Oct 11, 2026

    @Amperstrand
    CollaboratorAuthor

    Update (11:0x): still zero approving reviews; all three branches verified intact through the ongoing migration (no re-clobber; #879 is the latest batch member). Two additions to the record:

    1. Independent verification pass on fix(cloud-lab): Dockerfile.client's GO_VERSION must be a global ARG — the client image cannot build from scratch #844 (11:02, other lane): spec rule confirmed, placement parity with Dockerfile.tollgate, manifest version match, fragment correct — land, no findings.
    2. New blocker fact from that pass: wallet init bricks into degraded mode on Unknown Keyset after mint rotation — no self-heal despite reachable mint (rc1, real hardware) #818 — the stop-ship keyset-rotation wallet-brick repro — is the first consumer of the client image and has been waiting on exactly this fix. fix(cloud-lab): Dockerfile.client's GO_VERSION must be a global ARG — the client image cannot build from scratch #844 is not just lane infrastructure: it gates an open stop-ship repro. Strongest single reason to approve it first.

    Reminder for outreach: the policy needs one approving review from any write-access identity other than the author — felixfelix-bot or c03rad0r both satisfy it. Steps unchanged: approve #844 (fires queued squash, closes #724, unblocks #818's repro) → approve #876 (closes #834) → #861's one-line rebase + review.

  3. Amperstrand commented on Oct 11, 2026

    @Amperstrand
    CollaboratorAuthor

    wave3 addendum: completed a delta re-review of #846 (the last open merchant test PR) — both prior blockers resolved, verdict land (#846 (comment)). In the process, found and filed #882: a third stray-AUTH leak vessel with a deterministic 4-second repro (victim + TestReceiveIntentIsDurableBeforeTheMoneyMoves), pre-existing on main and not covered by #846's drains — worth whoever owns the #733 soak ledger knowing the 1-in-8 has a third contributor. Queue PRs (#844/#876/#861) unchanged: zero reviews, branches intact.

  4. Amperstrand commented on Oct 11, 2026

    @Amperstrand
    CollaboratorAuthor

    #876 MERGED (11:19, 6804ad7) — #834 CLOSED. The audit fix is on main with everything the disposition staged: value-correlation, symmetric dir-fsync error semantics (journal_durability.go), the ported shortfall test, and the conforming fragment (changelog.d/840-audit-hardening.fixed.md). Verified on main directly: TestCheckTokenSpent* green, changelog-assemble.py check green (15 fragments). Wave3 verified this exact content pre-merge (full tollwallet -race 45.4s; merchant full suite 373.8s on the simulated tree, now real).

    Queue status: 1 of 3 landed. Remaining:

    1. fix(cloud-lab): Dockerfile.client's GO_VERSION must be a global ARG — the client image cannot build from scratch #844 — still the next click (zero reviews as of this check). Approving it fires the queued squash, closes cloud-lab Dockerfile.client: mid-file ARG invisible to FROM — client and killer images unbuildable on docker/buildkit 29 (golang:-bookworm) #724, re-lights the cloud-lab lanes, and unblocks the wallet init bricks into degraded mode on Unknown Keyset after mint rotation — no self-heal despite reachable mint (rc1, real hardware) #818 stop-ship repro.
    2. test(contract): FROM-ARG scope fence for cloud-lab Dockerfiles #861 — after fix(cloud-lab): Dockerfile.client's GO_VERSION must be a global ARG — the client image cannot build from scratch #844 merges: one-line rebase (fence flips red→green, pre-proven), then its own review.

    Also filed since last update: #882 (third stray-AUTH vessel, deterministic repro, found during #846's re-review — #846 itself is verdict-land pending its review).

  5. Amperstrand commented on Oct 11, 2026

    @Amperstrand
    CollaboratorAuthor

    #844 MERGED (bd2d7d4, 11:52Z) — #724 CLOSED. The cloud-lab lanes can build from scratch again and the #818 stop-ship repro is unblocked. (Merge mechanics: the auto-merge churn had desynced the PR head from the branch ref; cured with a re-sync commit — pattern documented on #861.)

    #861 rebased onto post-#844 main (aa72d851) and the fence's planted-drift verdict is complete: red on the branch while main carried the bug → green immediately after bd2d7d4 — the fence demonstrably bites the class it fences. Closing evidence: #861 (comment)

    Queue status: 2 of 3 landed. Remaining: ONE approving review on #861 (guard-only, 15-file-free — a single Python contract check + fragment) and the wave3 disposition is fully retired.

  6. Amperstrand commented on Oct 12, 2026

    @Amperstrand
    CollaboratorAuthor

    Post-rc3 refresh (2026-10-12 evening): rc2 (#903) and rc3 (#907) shipped with the queue's three test/docs PRs still awaiting reviews — correct, none were release-blocking. All three are now refreshed onto the rc3 base and re-verified: #861 fence 944def8e (guard green), #846 drain 6f14ae6b (battery green), #891 rename d8c3f8cd (now five drifted fragments — #907 added one; the credential series rewrote two bodies, preserved verbatim). #855 closes via #891. Everything remains one-click review-ready for the next session.

  7. Amperstrand commented on Oct 23, 2026

    @Amperstrand
    CollaboratorAuthor

    Closing — the disposition queue DELIVERED its purpose: #844 merged; #840/#728 closed with their content migrated to the refreshed upstream PRs (#876/#861 per the retirement map); rc2 (#903) and rc3 (#907) shipped through the unblocked train. The refreshed test/docs PRs live in the standing owner queue (tracker #965).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions