8000 test(e2e): close the Box Egress Proxy round-three conditions in one walk (T94) by minimal-foundry[bot] · Pull Request #2673 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

test(e2e): close the Box Egress Proxy round-three conditions in one walk (T94) - #2673

Merged
norrietaylor merged 4 commits into
mainfrom
agent/2640-round-three-conditions-closed-end-to-end
Oct 28, 2026
Merged

norrietaylor merged 4 commits into
mainfrom
agent/2640-round-three-conditions-closed-end-to-end

Conversation

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

T94 — Round-three conditions closed, end to end

slice: S12
kind: integration
covers: BEP-039, BEP-041, BEP-018, BEP-070, BEP-063, BEP-032
size: M
est: 0 code, 200 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: each case prints PASS or NOT RUN with its gate
observability: none beyond the cases' own output
layers:
- e2e:
- scripts/session-e2e.sh: one walk over the round-three conditions; NOT RUN where its gate is missing
test: ./scripts/session-e2e.sh bep_round_three_conditions_closed
produces: none
consumes: none
proof: The third round of residuals is done: the spec names the audit jti and the quarantine, a real kernel rejects a blocked cohort's pre-flip UDP 443 socket, min finalize-install names the QUIC block helper and uninstall removes it, a minted id is checked with no proxy running, a stranded box frees its client key, a widened store rule and a min --config-dir rule reach bep serve without a restart. Its tasks re-cover requirements whose origin tasks merged with an arch condition held on a filed residual; the owner accepted that double coverage on 2026-10-26 so the residuals dispatch as slices.
depends on:
- blocked by #2600
- blocked by #2613
- blocked by #2606
- blocked by #2607
- blocked by #2616
- blocked by #2617
- blocked by #2618
- blocked by #2620
- blocked by #2631
- blocked by #2257
- assumes OQ3 (the mint reads the root certificate's own expiry, and the root is generated with a fixed default validity in one constant that gominimal/arch#85's ruling replaces)

Proof

A person can run ./scripts/session-e2e.sh bep_round_three_conditions_closed. The walk prints PASS or NOT RUN with its gate for each round-three condition. On this native Linux box, three cases passed. The spec names the audit jti in BEP-039, the quarantine directory in BEP-041, and the refused start that names bep serve --quarantine-unreadable in BEP-068. min finalize-install --show lists the QUIC block helper. The installer uninstall names the helper and its sudoers rule, and its remedy removes both. Four cases are written but did not run here. They are the pre-flip UDP 443 leg on a real kernel (it needs passwordless sudo and nft), the minted id check with no proxy, the stranded box client key, and the widened store rule without a restart (these three need the macOS lane with gvproxy and a GitHub sign-in). The --config-dir rule case is NOT RUN on every lane, so the proof is not fully delivered for that half.

Notes from the agent: The min --config-dir rule half of the proof is not delivered end to end. mint_store_handle has no caller in box creation (crates/minimal/src/mint.rs says so, #2525), so no min command reaches the check that refuses a --config-dir rule. The case bep_r3_config_dir_rule_reaches_bep_serve records NOT RUN with that reason on every lane. Its unit tests in mint.rs still pin the check. On this box, the pre-flip UDP 443 case was NOT RUN (no sudo). The three live-proxy cases were NOT RUN (not macOS). Nobody has run them yet. The macOS lane with gvproxy and a sign-in must run them before anyone trusts them. Design notes for the reviewer: (1) The pre-flip case runs the T87 root integration test (cargo nextest run -p minimald --test netns_root_integration --run-ignored only) from the e2e and keeps that test's own NOT RUN gate. On a native lane, that compiles the minimald test binary. (2) The minted-id case kills bep serve and plants a new audit segment in ~/.minimal/bep/audit with one line that does not parse. It expects minvmd to refuse t…[truncated]

Arch conditions at f69ba56a

case condition evidence
pre-flip UDP 443 on a real kernel C1 (§5.3 line 150, §5.7 line 218) PASS on a native Linux lane with sudo and nft: the minimald-root-integration job (122564124380) at f69ba56a printed PASS [6.756s] (20/20) minimald::netns_root_integration a_blocked_cohort_rejects_a_pre_flip_udp_443_socket. The e2e case runs the same test.
minted id with no proxy, stranded box client key, widened store rule without a restart C1 (no CI lane calls the walk) and C2 (§6.10 lines 839 and 842) Held on #2500 (T82, run the Box Egress Proxy legs on the macOS lane) and #2657 (stage bep in the macOS CI testbed). These cases print NOT RUN until the macOS lane runs them.
min --config-dir rule reaches bep serve BEP-032 Held on #2525 (a store handle sealed as a store member kind). The case prints NOT RUN on every lane until #2525 lands, and then it becomes a hard assertion.

Tests

line exit tail
./scripts/session-e2e.sh bep_round_three_conditions_closed 0 ::group::BEP spec: the audit record names the handle jti, and an unreadable segment moves to quarantine BEP-039 names the handle's 'jti' among the audit record's fields BEP-041 names the move of a segment with an unreadable line into the 'quarantine' directory BEP-068 refuses a start over an unreada

Verify

min task run agent-verify passed ([tasks.verify]).

Closes #2640


Generated by Claude Code

Add bep_round_three_conditions_closed. It walks one case per residual of
the third round: the spec's jti and quarantine text, the pre-flip UDP 443
leg on a real kernel, the QUIC block helper in min finalize-install and
in uninstall, the minted id check with no proxy, the stranded box's
client key, and a store rule widened under a running bep serve. Each
case prints PASS or NOT RUN with its gate at the end of the walk.

The --config-dir rule case is NOT RUN on every lane: box creation mints
no store handle yet (#2525), so no min command reaches that check.
The spec states the refused start over an unreadable audit line under
BEP-068, not BEP-041. The round-three spec case now reads it there.
@coderabbitai
coderabbitai Bot commented Oct 28, 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: c96e5b7b-ab18-47e8-897f-cebda252fece

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 28, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: every review thread resolved at f69ba56adc6b.

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

Nothing to do.

@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 walk conforms to Gatehouse §6.10 and networking §5.7. Each case asserts what the design line requires, and no product code changes. Four cases were NOT RUN on your lane: the pre-flip UDP 443 leg and the three live-proxy cases. A NOT RUN leg is open, and no CI lane runs this walk. C1 tells you how to close them: record a PASS run from each lane, or file one issue that names the four cases. The --config-dir case stays a residual on #2525.

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

Comment thread scripts/session-e2e.sh Resolved
Comment thread scripts/session-e2e.sh Resolved
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 — 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
r3_proxy_down and the store-rule case matched every '/bep serve ' process.
They now match 'serve --listener' on this run's socket under
$XDG_STATE_HOME, so a proxy from another checkout keeps running (T94).
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

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

line exit tail
./scripts/session-e2e.sh bep_round_three_conditions_closed 0 ::group::BEP spec: the audit record names the handle jti, and an unreadable segment moves to quarantine BEP-039 names the handle's 'jti' among the audit record's fields BEP-041 names the move of a segment with an unreadable line into the 'quarantine' directory BEP-068 refuses a start over an unreada

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👎 invalid — scripts/session-e2e.sh:13770: No change to the script can close this. The gate is correct: the kernel leg needs root for the classifier install and the QUIC helper, and this lane has no passwordless sudo. The evidence must come from a native Linux run with sudo and nft, or the case must be named in a C1 issue. Filing that issue
  • 👎 invalid — scripts/session-e2e.sh:14199: The fact is correct: the whole-lane order does not call this walk, and it does not call the round-two walk bep_conditions_closed_end_to_end either. I did not add the walk to the required macOS lane without a run there. Its cases kill the proxy, respawn the daemon pair and install packet-filter table
  • 👎 invalid — scripts/session-e2e.sh:14172: This is already the case on this branch. The not_run names T98 — Seal a store handle per accepted store rule at box creation #2525 as its gate, so the residual is recorded. The hard assertion can replace it only after T98 — Seal a store handle per accepted store rule at box creation #2525 gives the sealed member list a store kind, and that is not on this branch. No change is due now.
  • 👍 valid — scripts/session-e2e.sh:13900: Added r3_proxy_pids, which matches 'serve --listener' on this run's socket under $XDG_STATE_HOME. r3_proxy_down and the store-rule pid check use it, so a bep serve from another checkout or a person's own proxy keeps running.

A person can run ./scripts/session-e2e.sh bep_round_three_conditions_closed. It prints one PASS or NOT RUN row per round-three condition, and each NOT RUN row names its gate. On this Linux box, three rows PASS: the spec names the audit jti and the quarantine, min finalize-install names the QUIC block helper, and uninstall removes it. The kernel UDP 443 leg, the three live-proxy legs and the --config-dir leg print NOT RUN with their gates. So this branch does not yet deliver the whole proof. The kernel leg needs a lane with sudo and nft. The live-proxy legs need a macOS lane. The --config-dir leg waits on #2525.

Notes from the agent: Revise round 1. Fixed the foundry finding: the new r3_proxy_pids helper matches 'serve --listener' on this run's socket under $XDG_STATE_HOME, the argument that minvmd passes to bep serve. r3_proxy_down and the store-rule case's before and after pid capture now use r3_proxy_pids. The older proof_bep_destroy_with_proxy_down_refuses_by_attachment (near line 12447) has the same pgrep '/bep serve ' pattern. It is not part of this task, so I did not change it, and it needs its own fix. The arch C1 threads ask for lane evidence or a filed C1 issue. I have no gh credential, so a person must file the issue and link it from the PR body. bash -n and shellcheck -S warning are clean.

@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 round-three cases have the shape that Gatehouse §6.10 and networking §5.3 give, and each case fails closed. The compare narrows the bep serve match to this run's proxy, and an empty match fails the case. Four cases did not run, and no CI lane calls the walk. A NOT RUN leg is open, not a pass. Do C1 in the PR body: give a PASS line or a filed issue for each NOT RUN case. The --config-dir case stays a residual on #2525.

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

Comment thread scripts/session-e2e.sh Resolved
The shell captures only stdout from the python check, so a sys.exit
message on stderr left the error line with an empty reason.
@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: 6 unresolved threads — minimal-arch[bot] scripts/session-e2e.sh:13770, minimal-arch[bot] scripts/session-e2e.sh:14206, minimal-arch[bot] scripts/session-e2e.sh:14179, minimal-foundry[bot] scripts/session-e2e.sh:13907, minimal-foundry[bot] scripts/session-e2e.sh:13847, …. No findings.

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

@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 · 2 conditions · the full ruling

The compare changes only the error text of the finalize-install JSON check, and the gate stays as hard as before. The earlier ruling stands for the rest of the walk. Four legs did not run at this head, and section 5.3 and section 6.10 govern them. C1 is the pre-flip UDP 443 leg on a native Linux lane with sudo and nft. C2 is the three live-proxy cases on the macOS gvproxy lane. Issue #2525 owns the --config-dir half of BEP-032.

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

Comment thread scripts/session-e2e.sh Resolved
Comment thread scripts/session-e2e.sh Resolved
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on the runtime's review findings, pushed as f69ba56adc6b.

line exit tail
./scripts/session-e2e.sh bep_round_three_conditions_closed 0 ::group::BEP spec: the audit record names the handle jti, and an unreadable segment moves to quarantine BEP-039 names the handle's 'jti' among the audit record's fields BEP-041 names the move of a segment with an unreadable line into the 'quarantine' directory BEP-068 refuses a start over an unreada

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — scripts/session-e2e.sh:13847: The check now prints each reason on stdout and exits 1, so the ::error:: line shows it. Invalid JSON is reported the same way.

The round-three walk runs each condition. On this Linux lane it shows PASS for the spec jti and quarantine text, for min finalize-install naming the QUIC block helper, and for uninstall removing it. It shows NOT RUN with the gate for the kernel UDP 443 case (no passwordless sudo), the three live-proxy cases (macOS only), and the --config-dir store rule case (#2525). Those cases still owe evidence from a lane that has their gate. When the finalize-install JSON check fails, its error line now shows the reason.

Notes from the agent: Revise round 2: the python check in proof_bep_r3_finalize_install_names_quic_helper now prints its reason on stdout and exits 1. It also reports a report that is not valid JSON in the same way. I ran the failure path by hand with an empty items list and with invalid JSON, and both reasons reached the captured output. Two sys.exit("...") calls near line 1464 belong to another case outside this task, and I did not change them.

@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 f69ba56adc6b 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 28, 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 review at f69ba56a. I read the walk bep_round_three_conditions_closed in scripts/session-e2e.sh and checked it against the T94 plan block. Each round-three condition has a case that prints PASS or NOT RUN with its gate. The three cases that can run on a native box (spec text for BEP-039/041/068, min finalize-install --show naming the QUIC block helper, uninstall removing the helper and its sudoers rule) pass in the Tests line. The pre-flip UDP 443 case runs the T87 root test, and the minimald-root-integration job on this head passed it under sudo. The two LOW findings are fixed: r3_proxy_pids scopes the kill to this run's proxy socket, and the QUIC helper check prints its reason on stdout. The three macOS live-proxy cases are held on #2500 and #2657, and the --config-dir case on #2525. The PR body records each one under "Arch conditions". No further findings.


Generated by Claude Code

@norrietaylor norrietaylor changed the title T94 — Round-three conditions closed, end to end test(e2e): close the Box Egress Proxy round-three conditions in one walk (T94) Oct 28, 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 f69ba56: every merge gate passes at this head (arch PASS at f69ba56, zero open threads, every lane aggregator green). Squash title test(e2e): close the Box Egress Proxy round-three conditions in one walk (T94) 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 28, 2026
Merged via the queue into main with commit 2a3cf86 Oct 28, 2026
37 checks passed
@norrietaylor
norrietaylor deleted the agent/2640-round-three-conditions-closed-end-to-end branch October 28, 2026 07:02
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.

T94 — Round-three conditions closed, end to end

1 participant

0