8000 test(minvmd): keep clone and push working across a signing rotation (T52) by minimal-foundry[bot] · Pull Request #2551 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

test(minvmd): keep clone and push working across a signing rotation (T52) - #2551

Merged
norrietaylor merged 2 commits into
mainfrom
agent/2533-a-signing-rotation-under-a-running-grant-box-kee
Oct 25, 2026
Merged

norrietaylor merged 2 commits into
mainfrom
agent/2533-a-signing-rotation-under-a-running-grant-box-kee

Conversation

@minimal-foundry
@minimal-foundry minimal-foundry Bot commented Oct 25, 2026 •
Copy link
Copy Markdown
Contributor

T52 — A signing rotation under a running grant box keeps clone and push working, end to end

slice: S9
kind: task
covers: BEP-061
size: M
est: 40 code, 200 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: the e2e case prints the root fingerprint from min box spec before and after the rotation, and they match
observability: none beyond the case's own output
layers:
- e2e:
- scripts/session-e2e.sh: starts a grant box, clones and pushes, rotates through bep rotate-signing, clones and pushes again from the same box; records NOT RUN off macOS, without a sign-in or without E2E_BEP_PRIVATE_REPO, as bep_first_slice_end_to_end does
test: ./scripts/session-e2e.sh bep_signing_rotation_keeps_running_box_working
produces: none
consumes: none
proof: A running grant box clones and pushes before and after a signing rotation without being re-created, and its root fingerprint is unchanged.
depends on:
- blocked by T51

Proof

A person on the macOS lane can now run ./scripts/session-e2e.sh bep_signing_rotation_keeps_running_box_working. The transcript shows one grant box that clones and pushe 8000 s before and after bep --rotate-signing, under the same box id and still listed by min ls. It also shows the root CA fingerprint from min box spec before and after the rotation, and the case fails if they differ. This box did not run the live path: the case records NOT RUN here, so the proof is not yet observed.

Notes from the agent: The task says bep rotate-signing, but the bep CLI has no subcommand with that name. The real command is the flag bep --rotate-signing (crates/bep/src/main.rs), and the case runs that with --control $HOME/.minimal/bep/control.sock. The case uses MINVMD_BEP_BIN for the bep binary, or else the bep beside minvmd on PATH, which is how minvmd resolves it. The live path is unverified: it needs macOS, a VM with MINVMD_GVPROXY_BIN, a min auth login sign-in and E2E_BEP_PRIVATE_REPO, and #2500 owns that lane. As in bep_first_slice_end_to_end, the clone meets the known gap #2499 (no git credential helper in the box), so the clone step will fail on a lane that runs it until #2499 lands. The case is also in the whole-lane order, after bep_first_slice_end_to_end. bash -n and shellcheck are clean.

Tests

line exit tail
./scripts/session-e2e.sh bep_signing_rotation_keeps_running_box_working 0 ::group::Box Egress Proxy signing rotation: a running grant box clones and pushes before and after bep_signing_rotation_keeps_running_box_working: NOT RUN (no private repository named: set E2E_BEP_PRIVATE_REPO to /, a private repository the signed-in account can push to) ::endgroup:: se

Verify

min task run agent-verify exited 101 under rustc 1.98.1, which the repository does not pin (1.97.0 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

hecking ssh-encoding v0.3.0
    Checking p256 v0.14.0
    Checking keccak v0.2.0
    Checking curve25519-dalek v5.0.0
    Checking ed25519 v3.0.0
    Checking poly1305 v0.9.1
    Checking blowfish v0.10.0
    Checking blake2 v0.11.0-rc.6
    Checking ssh-cipher v0.3.0
    Checking bcrypt-pbkdf v0.11.0
    Checking ed25519-dalek v3.0.0
    Checking argon2 v0.6.0-rc.8
    Checking generic-array v0.14.7
    Checking sha3 v0.11.0
    Checking p384 v0.14.0
    Checking p521 v0.14.0
    Checking hash32 v0.3.1
    Checking module-lattice v0.2.3
    Checking kem v0.3.0
    Checking sponge-cursor v0.1.0
    Checking constcat v0.6.1
    Checking data-encoding v2.11.1
    Checking ml-kem v0.3.2
    Checking sha3 v0.12.0
    Checking ssh-key v0.7.0-rc.11
    Checking heapless v0.9.3
    Checking generic-array v1.4.4
    Checking russh-cryptovec v0.62.0
    Checking num-bigint v0.5.1
    Checking russh-util v0.52.0
    Checking managed v0.8.0
    Checking hex-literal v1.1.0
    Checking bitflags v1.3.2
    Checking is_executable v1.0.6
    Checking minimald-rpc v0.0.1 (/workbench/crates/minimald-rpc)
    Checking russh v0.64.1
    Checking smoltcp v0.14.0
    Checking clap_complete v4.6.11
    Checking tinyvec_macros v0.1.1
    Checking switch v0.0.1 (/workbench/crates/switch)
    Checking tinyvec v1.12.0
    Checking sysinfo v0.39.6
    Checking hickory-proto v0.26.3
   Compiling stdlib v0.0.22 (/workbench/crates/stdlib)
    Checking mfile v0.0.1 (/workbench/crates/mfile)
    Checking netlink-packet-core v0.8.1
    Checking generational-arena v0.2.9
    Checking konst_macro_rules v0.2.19
    Checking netlink-sys v0.8.8
    Checking decode v0.0.1 (/workbench/crates/decode)
    Checking derive_builder v0.20.2
    Checking konst v0.2.20
    Checking nix v0.30.1
    Checking const_format v0.2.36
    Checking checkouts v0.0.1 (/workbench/crates/checkouts)
    Checking netlink-packet-route v0.25.1
    Checking procfs-core v0.18.0
    Checking hash32 v0.2.1
    Checking itertools v0.15.0
    Checking spin v0.9.9
    Checking hashbrown v0.14.5
    Checking strum v0.27.2
error: using `chunks_exact` with a constant chunk size
   --> crates/minimald-rpc/src/trace.rs:199:46
    |
199 |     for (byte, pair) in out.iter_mut().zip(s.chunks_exact(2)) {
    |                                              ^^^^^^^^^^^^^^^
    |
help: consider using `as_chunks::<2>()` instead
   --> crates/minimald-rpc/src/trace.rs:199:46
    |
199 |     for (byte, pair) in out.iter_mut().zip(s.chunks_exact(2)) {
    |                                              ^^^^^^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#chunks_exact_to_as_chunks
    = note: `-D clippy::chunks-exact-to-as-chunks` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::chunks_exact_to_as_chunks)]`

error: could not compile `minimald-rpc` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

Residuals

Closes #2533


Generated by Claude Code

The case bep_signing_rotation_keeps_running_box_working starts a grant
box, clones and pushes, runs bep --rotate-signing, and clones and pushes
again from the same box id. It checks that min box spec prints the same
root CA fingerprint before and after (BEP-061). Off macOS, without a
sign-in or without E2E_BEP_PRIVATE_REPO, it records NOT RUN.
@coderabbitai
coderabbitai Bot commented Oct 25, 2026 •
Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e0f889e6-15ef-4fa0-bb63-8a09786dfd81

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@minimal-foundry
minimal-foundry Bot commented Oct 25, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: every review thread resolved at cee7324c5783.

@norrietaylor resolved the last thread, which releases the approval this review had withheld.

Nothing to do.

@minimal-foundry minimal-foundry Bot 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.

minimal-review — advisory review

Verdict COMMENT — 1 finding, 1 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

Comment thread scripts/session-e2e.sh Resolved
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

arch-review: PASS_WITH_CONDITIONS · 1 condition · the full ruling

The new e2e case conforms to Gatehouse §6.10 line 839. One box keeps its id across bep --rotate-signing, and the root fingerprint must not change. The live leg records NOT RUN here, and the clone cannot pass until #2499 lands. Thus the proof of BEP-061 stays open. C1 keeps it open until a live macOS run on the #2500 lane passes. Do not soften the clone failure before then.

Ruled at a5c2225 against gominimal/arch@109541a48c31 by claude-opus-5-5.

Comment thread scripts/session-e2e.sh Resolved
grep -q exits on its first match, and under pipefail the SIGPIPE in the
pipeline can fail a healthy box. Capture the output, then glob it.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on the runtime's review findings, pushed as cee7324c5783.

line exit tail
./scripts/session-e2e.sh bep_signing_rotation_keeps_running_box_working 0 ::group::Box Egress Proxy signing rotation: a running grant box clones and pushes before and after bep_signing_rotation_keeps_running_box_working: NOT RUN (no private repository named: set E2E_BEP_PRIVATE_REPO to /, a private repository the signed-in account can push to) ::endgroup:: se

Verify min task run agent-verify exited 101 under rustc 1.98.1, which the repository does not pin (1.97.0 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

 Checking argon2 v0.6.0-rc.8
    Checking ssh-cipher v0.3.0
    Checking ed25519-dalek v3.0.0
    Checking generic-array v0.14.7
    Checking sha3 v0.11.0
    Checking p384 v0.14.0
    Checking p521 v0.14.0
    Checking hash32 v0.3.1
    Checking module-lattice v0.2.3
    Checking kem v0.3.0
    Checking sponge-cursor v0.1.0
    Checking constcat v0.6.1
    Checking data-encoding v2.11.1
    Checking ml-kem v0.3.2
    Checking sha3 v0.12.0
    Checking heapless v0.9.3
    Checking ssh-key v0.7.0-rc.11
    Checking generic-array v1.4.4
    Checking russh-cryptovec v0.62.0
    Checking num-bigint v0.5.1
    Checking russh-util v0.52.0
    Checking is_executable v1.0.6
    Checking bitflags v1.3.2
    Checking managed v0.8.0
    Checking hex-literal v1.1.0
    Checking clap_complete v4.6.11
    Checking minimald-rpc v0.0.1 (/workbench/crates/minimald-rpc)
    Checking smoltcp v0.14.0
    Checking russh v0.64.1
    Checking tinyvec_macros v0.1.1
    Checking tinyvec v1.12.0
    Checking switch v0.0.1 (/workbench/crates/switch)
    Checking hickory-proto v0.26.3
    Checking sysinfo v0.39.6
   Compiling stdlib v0.0.22 (/workbench/crates/stdlib)
    Checking mfile v0.0.1 (/workbench/crates/mfile)
    Checking netlink-packet-core v0.8.1
    Checking generational-arena v0.2.9
    Checking konst_macro_rules v0.2.19
    Checking netlink-sys v0.8.8
    Checking decode v0.0.1 (/workbench/crates/decode)
    Checking konst v0.2.20
    Checking derive_builder v0.20.2
    Checking const_format v0.2.36
    Checking nix v0.30.1
    Checking checkouts v0.0.1 (/workbench/crates/checkouts)
    Checking netlink-packet-route v0.25.1
    Checking procfs-core v0.18.0
    Checking hash32 v0.2.1
    Checking itertools v0.15.0
    Checking spin v0.9.9
    Checking fixedbitset v0.5.7
    Checking strum v0.27.2
    Checking hashbrown v0.14.5
    Checking oci-spec v0.10.0
    Checking heapless v0.7.17
    Checking dashmap v6.2.1
    Checking procfs v0.18.0
    Checking netconfig-rs v0.1.6
    Checking pathrs v0.2.5
    Checking nix v0.29.0
    Checking netlink-packet-route v0.31.0
error: using `chunks_exact` with a constant chunk size
   --> crates/minimald-rpc/src/trace.rs:199:46
    |
199 |     for (byte, pair) in out.iter_mut().zip(s.chunks_exact(2)) {
    |                                              ^^^^^^^^^^^^^^^
    |
help: consider using `as_chunks::<2>()` instead
   --> crates/minimald-rpc/src/trace.rs:199:46
    |
199 |     for (byte, pair) in out.iter_mut().zip(s.chunks_exact(2)) {
    |                                              ^^^^^^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#chunks_exact_to_as_chunks
    = note: `-D clippy::chunks-exact-to-as-chunks` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::chunks_exact_to_as_chunks)]`

error: could not compile `minimald-rpc` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

Review threads the coder judged:

  • 👍 valid — scripts/session-e2e.sh: Captured the min ls output in sr_ls, stripped carriage returns, and matched the box id with a glob, so no pipe runs under pipefail.

With a sign-in and E2E_BEP_PRIVATE_REPO on macOS, the case shows one running grant box that clones and pushes before and after bep --rotate-signing, stays listed in min ls under the same id, and prints the same root fingerprint from min box spec before and after. This box can not run it, so the case records NOT RUN here.

Notes from the agent: This round replaces the mnl ls | tr | grep -qF pipeline with capture-then-glob. The case ran here only up to its NOT RUN gate (no macOS, no sign-in, no E2E_BEP_PRIVATE_REPO). The macOS e2e lane still owes the end-to-end evidence.

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

arch-review: PASS_WITH_CONDITIONS · 1 condition · the full ruling

The compare changes only the min ls check after the rotation. It now captures the output and does not pipe it into grep -q, so pipefail cannot fail a healthy box. The case still fails closed. The case conforms to Gatehouse §6.10 line 839: a signing rotation under an unchanged root re-creates no box and keeps the root. The leg records NOT RUN, and C1 keeps it open under #2500 and #2499 until a live lane observes it.

Ruled at cee7324 against gominimal/arch@109541a48c31 by claude-opus-5-5.

Comment thread scripts/session-e2e.sh Resolved
@minimal-foundry minimal-foundry Bot 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.

minimal-review — approval withheld

Verdict COMMENT — APPROVE withheld: 3 unresolved threads — minimal-foundry[bot] scripts/session-e2e.sh, minimal-arch[bot] scripts/session-e2e.sh:12141, minimal-arch[bot] scripts/session-e2e.sh:12038. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@minimal-foundry minimal-foundry Bot 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.

minimal-review — approved

Verdict APPROVE — every review thread is resolved; @norrietaylor closed the last one. The review of cee7324c5783 withheld this approval on the threads open then. Posted as a comment: the App cannot approve its own pull request; the check and the label carry it.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Oct 25, 2026
@norrietaylor norrietaylor changed the title T52 — A signing rotation under a running grant box keeps clone and push working, end to end test(minvmd): keep clone and push working across a signing rotation (T52) Oct 25, 2026
@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Babysitter approval at cee7324: every merge gate passes at this head (arch's conditions are the macOS legs, filed as residual #2565 by the epic owner's decision; zero open threads; every lane aggregator green). Squash title test(minvmd): keep clone and push working across a signing rotation (T52) and the squashed message pass commitlint. Queued for squash merge.


Generated by Claude Code

@norrietaylor
norrietaylor added this pull request to the merge queue Oct 25, 2026
Merged via the queue into main with commit 00864d8 Oct 25, 2026
37 checks passed
@norrietaylor
norrietaylor deleted the agent/2533-a-signing-rotation-under-a-running-grant-box-kee branch October 25, 2026 17:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review:approved minimal-review approved the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T52 — A signing rotation under a running grant box keeps clone and push working, end to end

1 participant

0