8000 feat(bep): deny Minimal's infrastructure domains in the box CA and store rules (T55) by minimal-foundry[bot] · Pull Request #2582 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

feat(bep): deny Minimal's infrastructure domains in the box CA and store rules (T55) - #2582

Merged
norrietaylor merged 14 commits into
mainfrom
agent/2536-replace-the-provisional-ca-deny-set-with-the-dec
Oct 26, 2026
Merged

norrietaylor merged 14 commits into
mainfrom
agent/2536-replace-the-provisional-ca-deny-set-with-the-dec

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T55 — Replace the provisional CA deny set with the decided infrastructure deny set

slice: S9
kind: task
covers: BEP-013
size: S
est: 60 code, 120 tests
executor: agent
difficulty: routine
model: standard
diagnostics: min box spec shows the root's excluded subtrees, and a refused rule names the deny-set entry it hit
observability: none beyond the refusal text
layers:
- ca:
- crates/bep/src/ca.rs: DENY_SET becomes the decided set from one shared definition: min.internal, minimal.dev, the tenant issuer, the BEP, EGW and relay endpoints, the registry and build cache, and the node-plane baseline set; localhost, .local, home.arpa and .internal stay allowed (owner's ruling of 2026-10-24 on #2441)
- crates/boxes/src/core/bep.rs: the BEP-034 check reads the same definition
- docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md: names the set
test: cargo nextest run -p bep root_excludes_every_deny_set_name
test: cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule
produces: none
consumes: none
proof: The root certificate excludes every name of the decided deny set, and a store rule naming any of them is refused.
depends on:
- blocked by T3
- blocked by T50


Generated by Claude Code

Proof

The root certificate that bep issues now carries min.internal, minimal.dev and minimal.farm as excluded subtrees, and it issues no leaf for any of them or a name under them. A [secret-store-rules] rule that names one of those names, or a name under one, is refused, and the refusal names the entry it hit. printer.local, nas.home.arpa, svc.corp.internal and localhost stay allowed.

Notes from the agent: The hostnames are my inference. The task text and the spec excerpt name the decided set by category (tenant issuer, BEP/EGW/relay endpoints, registry, build cache, node-plane baseline set), not by hostname. The ruling on #2441 was not available to me. I mapped the categories to three DNS entries from what the tree uses: min.internal (box-internal names, the proxy's in-box address, the node-plane names), minimal.dev (cache.minimal.dev, go.minimal.dev, and the issuer and registry by inference) and minimal.farm (agents.minimal.farm, cache.minimal.farm, and EGW/relay by inference). The node-plane baseline set is addresses (crates/minvmd/src/net/baseline.rs), and the root already excludes every IP address. A reviewer must check this mapping against the ruling. If the ruling names other hosts, change only the DENY_SET list in ca.rs and the two pinned asserts in the tests. One shared definition: boxes does not depend on bep, and bep does not depend on boxes. Adding a dependency would change a Cargo.toml outside the layers. At runtime the BEP-034 check already reads bep::ca::DENY_SET through minimal::config::store_deny_set. The boxes tests now read the list from crates/bep/src/ca.rs with include_str!, in place of a copied literal, so a change to the set reaches them. Printed text: the refusal for a host under an entry (not the entry itself) now reads 'The secret-store rule in names , which is under . A secret can never be sent to or a name under it. Remove or change the rule.' This serves the diagnostics line. The refusal for the …[truncated]

Tests

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-76ec... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 18.31s ──────────── Nextest run ID 09229445-74f6-4123-82b3-0492a51011ba with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-072e... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify

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

Base

The base branch moved while the coder worked; it was merged in before the tests ran.

Closes #2536

The store-rule refusal now names the deny-set entry a host is under.
The tests read bep::ca::DENY_SET from its source, the one definition.
@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: 022e1330-c706-4002-bd1e-59401759760f

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.

@github-actions
github-actions Bot commented Oct 25, 2026 •
Copy link
Copy Markdown
Contributor

Spec lint

docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md — 18 finding(s)

docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:113: P004 BEP-003 names test 'bep_second_box_needs_no_sign_in', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:170: P004 BEP-007 names test 'bep_box_env_holds_sealed_value_only', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:214: P004 BEP-011 names test 'bep_root_ca_present_in_box_trust_store', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:230: P004 BEP-012 names test 'bep_proxy_env_and_no_proxy_are_set', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:284: P004 BEP-015 names test 'bep_git_and_gh_against_private_repo', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:468: P004 BEP-032 names test 'store_reference_injects_in_registered_form', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:473: P004 BEP-033 names test 'store_value_read_per_request_never_written', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:517: P004 BEP-065 names test 'injected_value_is_exactly_prefix_plus_value', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:522: P004 BEP-066 names test 'crlf_in_value_or_prefix_refuses_injection', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:572: P004 BEP-068 names test 'segment_rotation_continues_chain', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:609: P004 BEP-043 names test 'bep_destroyed_box_values_refused_within_60s', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:618: P004 BEP-044 names test 'bep_logout_refuses_every_reference_at_next_request', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:631: P004 BEP-070 names test 'box_id_is_a_csprng_uuidv7_per_creation', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:652: P004 BEP-045 names test 'deleted_keychain_item_refuses_next_injection', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:661: P004 BEP-047 names test 'bep_and_gvproxy_are_separate_processes_and_users', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:670: P004 BEP-049 names test 'prop_audit_chain_detects_unrecomputed_edit', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:709: P004 BEP-054 names test 'replaced_secret_is_injected_on_next_request', which was not found in the repository
docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md:713: P004 
8000
BEP-079 names test 'secret_set_writes_user_level_store_rule', which was not found in the repository

Advisory. None of this blocks the merge; the review decides.

Advisory, and never a merge gate. Linter: gominimal/foundry@fb5932b8, spec format: How Minimal Writes Specs.

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

Approved: every review thread resolved at e0e93c83b96a.

@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 — 2 findings, 2 inline.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs 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: CONDITIONS · 2 conditions · the full ruling

The deny-set mechanism conforms, and bep::ca::DENY_SET is the one definition of the set. The record does not conform. The doc comment and spec line 242 say that the owner's ruling on #2441 decided these three domains. The PR body says the hostnames are an inference, and that nobody read the ruling. Make C1, which states the mapping as this change's reading and keeps the #2441 tracking. Make C2, which limits the claim that the baseline set is addresses to the built-in baseline of an un-enrolled host (§5.1 line 109). The escalation asks whether a configured registry or build cache must be in the set.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
The node-plane baseline set is addresses, which the root excludes as IP
addresses. The DENY_SET entry comment and the spec note said names.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

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

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-140f... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 16.46s ──────────── Nextest run ID 358cc9cd-6bc9-43ab-9abd-bbafb5afa0f7 with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-79f8... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — crates/bep/src/ca.rs:67: The finding holds: the three domains are my inference, and I cannot read Decide and share the fixed deny set for the box CA name constraints (BEP-013, BEP-034) #2441. No code change can settle it. A maintainer must check DENY_SET against the ruling before merge.
  • 👍 valid — crates/bep/src/ca.rs:61: I removed 'node-plane baseline names' from the min.internal entry comment and from the spec note. The baseline is addresses, and the root excludes every IP address.

The root certificate excludes min.internal, minimal.dev and minimal.farm, and every name under them. A [secret-store-rules] rule that names any of them is refused. The two tests show both facts against the one DENY_SET definition.

Notes from the agent: Revise round 1. I removed the 'node-plane baseline names' claim from the min.internal entry comment in ca.rs. I made the same change in the spec note, so the two match. The node-plane baseline is an address (100.72.0.1 in the minimald classifier tests), and the root excludes every IP address. I still cannot read the ruling on #2441. The three domains in DENY_SET are my inference from the categories that the task names. A maintainer must confirm them before merge.

@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 crates/bep/src/ca.rs 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: CONDITIONS · 2 conditions · the full ruling

The deny set lives in the right place, and the root and the store-rule check read one definition. The spec note and the DENY_SET comment credit the owner's ruling on #2441 with three domains that the PR body calls an inference. C1 makes that record exact. Gatehouse §6.10 line 849 also refuses a configured registry or cache and the baseline members that have DNS names, which a fixed list cannot hold. C2 files that gap as a residual and limits the claim that the baseline set is addresses only.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
The categories come from the task text. The domain mapping and the
minimal.farm entry are this change's reading. Only the built-in baseline
of an un-enrolled host is addresses.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

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

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-02ab... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 18.69s ──────────── Nextest run ID 9e487c08-c078-4f52-8c4c-c4250de06de1 with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-7b45... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify passed.

Review threads the coder judged:

The root certificate excludes every name of the deny set (min.internal, minimal.dev, minimal.farm), and a store rule naming any of them is refused. The doc comment and the spec now say that the domain mapping and minimal.farm are this change's reading and wait for confirmation on #2441.

Notes from the agent: This round changed only comments. The ruling on #2441 was not available to me, so I could not check the three entries against it. A person must confirm them on #2441 before merge. The DENY_SET entries are unchanged.

@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 — 3 findings, 3 inline.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/boxes/src/core/bep.rs 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: CONDITIONS · 1 condition · the full ruling

The deny-set mechanism conforms to Gatehouse §6.10 lines 834 and 849. The domain mapping is now labelled honestly as waiting on #2441. One gap has no owner. Line 849 also refuses a rule that names the registry, the build cache or the baseline set, and a deployment can configure these. The static DENY_SET covers only the default hosts, and the new comment states the gap without an issue. C1 files that issue and links it from ca.rs and the spec note. Do not change the names in the set.

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

Comment thread crates/bep/src/ca.rs Resolved
Name NodePlaneBaseline::built_in in crates/minvmd/src/net/baseline.rs, and
record the deployment-configured named baseline as a residual gap that
waits on #2441.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 3 of 10 on the runtime's review findings, pushed as cc83ac064845.

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-1b94... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 16.53s ──────────── Nextest run ID 295021e1-50fe-4b8f-8187-bf9f378c7732 with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-39ad... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify passed.

Review threads the coder judged:

The root certificate excludes min.internal, minimal.dev and minimal.farm with every name under them, and every IP address. A [secret-store-rules] rule that names any of them is refused. The doc comment and the spec note say that the domain mapping is this change's reading, which waits on #2441.

Notes from the agent: This round changes only comments. The DENY_SET doc comment and the spec note now limit the 'baseline is addresses' claim to NodePlaneBaseline::built_in in crates/minvmd/src/net/baseline.rs. They also record that named endpoints in a deployment-configured baseline are a residual gap. No separate issue for that gap exists that I can name, so the text points to #2441. A person can open a dedicated issue and change the link. The two HIGH/MEDIUM findings ask for the owner's confirmation of the domains on #2441. Code cannot give that confirmation, so a person must get it before merge. just lint-prose did not run: vale is not installed on this box.

@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 crates/bep/src/ca.rs 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: CONDITIONS · 2 conditions · the full ruling

The set and its placement conform. The root and the BEP-034 check read one DENY_SET. Two gaps against Gatehouse §6.10 line 849 remain. The design names the build cache cache.gominimal.dev (architecture.md line 844), and no entry covers it. C1 adds it. The minimal.dev comment claims to cover the tenant issuer, but a self-hosted Gatehouse issuer is not under it. C2 scopes the claim and names the gap as residual on #2441.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/boxes/src/core/bep.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
Name the configured cache (MINIMAL_REMOTE_CACHE_URL), the registry and
the baseline endpoints that the deny set does not cover, and link #2441.
@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 crates/bep/src/ca.rs 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 · 2 conditions · the full ruling

The deny set has one definition in bep::ca::DENY_SET. The root and the BEP-034 check both read it, and the change puts it in the correct owners. Two items stay open on #2441. C1: Gatehouse §6.10 line 849 refuses an upstream that names the registry, build cache or baseline set, and networking §5.1 line 109 lets a deployment configure those. The fixed list does not refuse those configured hosts. C2: the minimal.dev and minimal.farm mapping is an inference. Check it against the owner's ruling on #2441. Make sure that #2441 is open before merge.

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

Comment thread crates/bep/src/ca.rs Resolved
Comment thread crates/bep/src/ca.rs Resolved
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 4 of 10 on the runtime's review findings, pushed as 8dc2ab9d5738.

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-4c60... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 28.61s ──────────── Nextest run ID c39e70fb-d7ee-4461-ba86-287b11a2352a with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-8cd4... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify passed.

Review threads the coder judged:

The root certificate excludes every name of the deny set (min.internal, minimal.dev, minimal.farm and every name under them), and a store rule that names any of them is refused. The doc comment and the spec now name the configured cache, registry and baseline endpoints that the set does not cover.

Notes from the agent: This round changed only comment and spec text. C1 asks for a new issue. I have no gh credential, so I did not file it. Both places link the existing tracking issue #2441 instead. A person must file the C1 issue and replace the link if a separate issue is wanted. The domain mapping (min.internal, minimal.dev, minimal.farm) is still this change's reading and waits for confirmation on #2441. I was not able to read the ruling on #2441 from this box.

The design names the build cache cache.gominimal.dev, and no entry
covered it. The minimal.dev entry covers the hosted tenant issuers only.
A self-hosted issuer stays residual on #2441.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 5 of 10 on a failed check suite, pushed as fae0425ebf4f.

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-7918... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 16.29s ──────────── Nextest run ID 5117e495-aac4-4375-99b0-7aedc4fa22c3 with nexte
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-c63f... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify passed.

Review threads the coder judged:

The root certificate lists min.internal, minimal.dev, cache.gominimal.dev and minimal.farm as excluded subtrees, so no leaf for those names or names under them validates. A [secret-store-rules] rule that names any of them is refused, and the refusal names the entry it hit.

Notes from the agent: Round 5. Added cache.gominimal.dev to DENY_SET and to the two pinned lists. Scoped the minimal.dev comment to the hosted tenant issuers, and named the self-hosted issuer gap as residual on #2441 in the doc comment and in the spec note. The failed-check excerpts do not show a failing test or a failing step. The tests log shows only passing tests and a printf line from a script. The ci-linux-native-success job is the aggregator. Locally the full bep and boxes suites pass, and clippy on both crates is clean. I did not run the workspace suite. The other DENY_SET caller (crates/minimal/src/config.rs) pins no names. just lint-prose did not run, because vale is not installed on this box. I cannot read the owner's ruling on #2441, so the domain mapping still waits for that confirmation.

@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

This head adds cache.gominimal.dev to DENY_SET. That is the build cache by the name in architecture.md line 844. The root and the store-rule check still read one definition, as Gatehouse §6.10 line 834 requires. A self-hosted issuer and a configured cache, registry or baseline endpoint outside the listed domains are under no entry. Line 849 requires the deny set to cover them. C1 carries that gap, and it can stay open on #2441.

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

Comment thread crates/bep/src/ca.rs 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 crates/bep/src/ca.rs Resolved
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 6 of 10 on the runtime's review findings: the coder changed nothing. Revise round 6. This round changes no files. Both open threads ask for a change only after the owner's ruling on #2441 is confirmed, and this session cannot read #2441. The doc comment on DENY_SET already says that the category-to-domain mapping and the minimal.farm entry wait for that confirmation. It also names the self-hosted issuer and the configured cache, registry and baseline gaps as residual on #2441. A person must confirm the entries on #2441 before merge. If the ruling differs, change only DENY_SET and the two pinned lists (crates/bep/src/ca.rs root_excludes_every_deny_set_name, crates/boxes/src/core/bep.rs every_deny_set_name_is_refused_as_a_store_rule).

Review threads the coder judged:

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Revise round 5 ran against ci-linux-native-success, tests and left it red; a coder round cannot clear it, a person should look. No round was started for the failed suite on fae0425ebf4f.

Copy link
Copy Markdown
Member

/revise

Round 7 of #2582, on the red tests job at fae0425 (ci-linux-native-success). No round is in flight. The failing test is minimal config::tests::store_rules_read_through_client_config in crates/minimal/src/config.rs. This PR caused it. StoreRuleRefusal::MinimalInfrastructure now names the deny-set entry when the host is under it rather than equal to it. So the rule internal (host.min.internal) now prints:

The secret-store rule internal in {file} names host.min.internal, which is under min.internal. A secret can never be sent to min.internal or a name under it. Remove or change the rule.

The test still pins the old sentence. crates/minimal/src/config.rs is outside the layers. It is accepted for this one edit under the epic owner's layer-exception rule.

  1. In store_rules_read_through_client_config, replace the expected line for the rule internal with the new sentence above, exactly as Display for MinimalInfrastructure writes it. Leave the gh and host lines as they are.
  2. Search crates/, scripts/ and docs/ for any other pin of the old names host.min.internal, which a secret can never be sent to text, and update it the same way.
  3. Run cargo nextest run -p minimal store_rules_read_through_client_config and cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule, and report them.

One commit, Conventional Commits subject, every body line at most 72 characters.


Generated by Claude Code

The store rule refusal now names the deny-set entry when the host is
under it. Update the config test to the sentence Display writes.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 7 of 10 on a /revise note, pushed as e0e93c83b96a.

line exit tail
cargo nextest run -p bep root_excludes_every_deny_set_name 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-7b4e... Compiling subtle v2.6.1 Compiling syn v3.0.3 Compiling bytes v1.12.1 Compiling num-traits v0.2.19 Compiling hybrid-array v0.4.14 Compiling ctutils v0.4.5 Compiling g
cargo nextest run -p boxes every_deny_set_name_is_refused_as_a_store_rule 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-7fe3... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling common v0.0.1 (/workbench

Verify min task run agent-verify exited 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.

toredEnv {
    |        ^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#must_use_candidate
help: add the attribute
    |
402 + #[must_use]
403 | pub fn deferring_env() -> StoredEnv {
    |

error: this method could have a `#[must_use]` attribute
    --> crates/boxes/src/core/compose.rs:1019:12
     |
1019 |     pub fn lifecycle_hooks_teardown(&self) -> impl DoubleEndedIterator<Item = &ProvenancedHook> {
     |            ^^^^^^^^^^^^^^^^^^^^^^^^
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#must_use_candidate
help: add the attribute
     |
1019 ~     #[must_use]
1020 ~     pub fn lifecycle_hooks_teardown(&self) -> impl DoubleEndedIterator<Item = &ProvenancedHook> {
     |

error: this function has a `#[must_use]` attribute with no message, but returns a type already marked as `#[must_use]`
    --> crates/boxes/src/core/primitives.rs:1085:5
     |
1085 |     pub fn as_sandbox_path(&self) -> &SandboxRelPath {
     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
help: remove `must_use`
    --> crates/boxes/src/core/primitives.rs:1084:5
     |
1084 |     #[must_use]
     |     ^^^^^^^^^^^
     = note: alternatively, you may add an explicit reason to the `must_use` attribute
     = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#double_must_use
     = note: `-D clippy::double-must-use` implied by `-D warnings`
     = help: to override `-D warnings` add `#[allow(clippy::double_must_use)]`

error: this function has a `#[must_use]` attribute with no message, but returns a type already marked as `#[must_use]`
    --> crates/boxes/src/core/primitives.rs:1302:5
     |
1302 |     pub fn host_path(&self) -> &HostAbsPath {
     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
help: remove `must_use`
    --> crates/boxes/src/core/primitives.rs:1301:5
     |
1301 |     #[must_use]
     |     ^^^^^^^^^^^
     = note: alternatively, you may add an explicit reason to the `must_use` attribute
     = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#double_must_us
10BC8
e

error: this function has a `#[must_use]` attribute with no message, but returns a type already marked as `#[must_use]`
    --> crates/boxes/src/core/primitives.rs:1309:5
     |
1309 |     pub fn destination(&self) -> &SandboxRelPath {
     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |
help: remove `must_use`
    --> crates/boxes/src/core/primitives.rs:1308:5
     |
1308 |     #[must_use]
     |     ^^^^^^^^^^^
     = note: alternatively, you may add an explicit reason to the `must_use` attribute
     = help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.98.0/index.html#double_must_use

error: could not compile `boxes` (lib) due to 6 previous errors
warning: build failed, waiting for other jobs to finish...

Outside the task's layers::

  • crates/minimal/src/config.rs

Converted to a draft: something above needs a person before review.

The root certificate excludes every name of the decided deny set, and a store rule naming any of them is refused. The minimal config test now expects the refusal that names min.internal as the entry that host.min.internal is under, so the tests job passes again.

Notes from the agent: Round 7: changed only the expected line for the rule internal in store_rules_read_through_client_config (crates/minimal/src/config.rs, accepted outside the layers by the directive). A search of crates/, scripts/ and docs/ found no other pin of the old host.min.internal sentence. The remaining 'which a secret can never be sent to' pin in crates/boxes/src/core/bep.rs is for the gh rule, whose host equals its entry, so it stays correct.

@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 change still conforms to Gatehouse §6.10 lines 834 and 849. The only new PR commit updates a test to the new refusal text. The root and the store-rule check read one deny set. The hostnames for each category are the change's reading. C1 keeps them open until the owner rules on #2441.

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

Comment thread crates/bep/src/ca.rs Resolved
@minimal-foundry
minimal-foundry Bot marked this pull request as draft October 25, 2026 23:13
@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: 20 unresolved threads — minimal-arch[bot] crates/bep/src/ca.rs, minimal-arch[bot] crates/bep/src/ca.rs, minimal-arch[bot] crates/bep/src/ca.rs:92, minimal-arch[bot] docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md, minimal-arch[bot] crates/bep/src/ca.rs, …. No findings.

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

@norrietaylor
norrietaylor marked this pull request as ready for review October 26, 2026 00:09
@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 e0e93c83b96a 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 26, 2026
@norrietaylor norrietaylor changed the title T55 — Replace the provisional CA deny set with the decided infrastructure deny set feat(bep): deny Minimal's infrastructure domains in the box CA and store rules (T55) Oct 26, 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 e0e93c8: every merge gate passes at this head (arch PASS at e0e93c8, zero open threads, every lane aggregator green). Squash title feat(bep): deny Minimal's infrastructure domains in the box CA and store rules (T55) 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 26, 2026
Merged via the queue into main with commit 8409ca0 Oct 26, 2026
38 checks passed
@norrietaylor
norrietaylor deleted the agent/2536-replace-the-provisional-ca-deny-set-with-the-dec branch October 26, 2026 02:13
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.

T55 — Replace the provisional CA deny set with the decided infrastructure deny set

1 participant

0