Repository navigation
feat(minvmd): check a minted box id against retained revocations with no proxy (T89) - #2643
Conversation
…xy (T89) When no Box Egress Proxy answers its control socket, holds_box_id reads the revocation records in the proxy's audit log beside the socket. A record that names the minted id refuses the creation, and the warn line names the record. A log that is not read whole refuses the creation too.
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
Spec lint
Advisory. None of this blocks the merge; the review decides. Advisory, and never a merge gate. Linter: |
|
Approved: every review thread resolved at @norrietaylor resolved the last thread, which releases the approval this review had withheld. Nothing to do. |
There was a problem hiding this comment.
arch-review: PASS_WITH_CONDITIONS · 1 condition · the full ruling
The no-proxy collision check conforms to Gatehouse §6.10 line 839. It reads every retained audit segment with the same reader that a proxy start uses. It also refuses when the log is not read whole. One stale comment in holds_box_id still says that no revocation is in force with no proxy. That text contradicts line 839 and the code under it. Delete it as C1 says.
Ruled at 69a9533 against gominimal/arch@109541a48c31 by claude-opus-5-5.
…nted-box-id-against-retained-revocatio
Drop the stale no-proxy comment in holds_box_id. The AuditUnread refusal now names bep serve --quarantine-unreadable and the quarantine directory, and the spec comment for BEP-070 says so.
|
Round 1 of 10 on the runtime's review findings, pushed as
Verify Review threads the coder judged:
With no Box Egress Proxy running, a minted box id that a revocation record in the retained audit log holds is refused. The refusal names that record. An audit log with an unreadable line refuses the creation and names Notes from the agent: Revise round 1. I deleted the stale comment in holds_box_id. The AuditUnread refusal now names |
There was a problem hiding this comment.
arch-review: PASS · the full ruling
The change conforms to Gatehouse §6.10 line 839. With no proxy, the collision check reads the revocation records that the next bep serve start restores. The check refuses the creation when it cannot read the log whole, so it fails closed. This push removes the stale comment and names bep serve --quarantine-unreadable as the way out. That closes the points from the ruling on 69a9533e. No conditions remain.
Ruled at 16f78b3 against gominimal/arch@109541a48c31 by claude-opus-5-5.
There was a problem hiding this comment.
minimal-review — approval withheld
Verdict COMMENT — APPROVE withheld: 3 unresolved threads — minimal-foundry[bot] crates/minvmd/src/box_registry.rs, minimal-foundry[bot] crates/minvmd/src/box_registry.rs:3135, minimal-arch[bot] crates/minvmd/src/box_registry.rs. 1 finding, 1 inline.
Panel: 3 of 3 personas ran (correctness, security, supply-chain).
There was a problem hiding this comment.
minimal-review — approved
Verdict APPROVE — every review thread is resolved; @norrietaylor closed the last one. The review of 16f78b3edc03 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.
There was a problem hiding this comment.
Own review at 16f78b3. With no proxy on the control socket, holds_box_id now reads the revocation records in the proxy's audit log (audit_revocation_holding). Those are the records a bep serve start puts back in force, so a minted id that one of them holds is refused. A log that is not read whole fails closed with AuditUnread, which names --quarantine-unreadable, as a bep serve start does. a_minted_id_a_revocation_holds_is_refused_with_no_proxy writes the revocation through Records and checks the refusal.
Generated by Claude Code
There was a problem hiding this comment.
Babysitter approval at 16f78b3: every merge gate passes at this head (arch PASS at 16f78b3, zero open threads, every lane aggregator green). Squash title feat(minvmd): check a minted box id against retained revocations with no proxy (T89) and the squashed message pass commitlint. Queued for squash merge.
Generated by Claude Code
T89 — Check a minted box id against retained revocations when no proxy runs
slice: S12
kind: task
covers: BEP-070
size: M
est: 100 code, 100 tests
executor: agent
difficulty: unknown ground
model: strongest
diagnostics: a refused id names the revocation record that holds it
observability: one warn line per colliding mint
layers:
- collide:
- crates/minvmd/src/box_registry.rs: when no proxy answers,
holds_box_idreads the box ids that the retained audit segments' revocation records hold, or refuses creation; the choice is the implementer's and the arch review's (#2616)- docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md: the BEP-070 limit comment states the no-proxy case as the code does it
test: cargo nextest run -p minvmd a_minted_id_a_revocation_holds_is_refused_with_no_proxy
produces: none
consumes: none
proof: A minted box id that a retained revocation record holds is refused with no proxy running.
depends on:
- blocked by #2585
Generated by Claude Code
Proof
With no Box Egress Proxy running, minvmd refuses a box creation whose minted id a revocation record in the proxy's audit log names. The refusal is CollidingBoxId, and its single warn line names the record line and the audit directory.
Notes from the agent: Design choice (#2616): with no proxy, holds_box_id reads the revocation records and does not refuse every creation. It reads the audit directory beside the control socket (
<socket dir>/audit). For the home socket that minvmd uses, this is ~/.minimal/bep/audit, the directorybep servewrites (bep::audit::default_dir). I derived the path from the socket so that run.rs, which is outside the layers, needs no change, and so that tests stay hermetic. Abep serve --controlat a custom path still writes ~/.minimal/bep/audit, but minvmd always uses the home socket, so the two paths agree in practice. The check fails closed when the log is not read whole: an I/O error other than a missing directory, or a complete line that does not parse. In that case it returns the new AllocationError::AuditUnread, and the printed text names the audit directory and the segment. IdHolder lostCopybecause it now carries the record's line. The spec edit adds averify:line for the new test and replaces the limit comm 8000 ent.just lint-prosedid not run because vale is not installed on this box.Tests
cargo nextest run -p minvmd a_minted_id_a_revocation_holds_is_refused_with_no_proxyVerify
min task run agent-verifyexited 101 under rustc 1.98.1, which the repository does not pin (1.99.0 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.Closes #2616