8000 feat(minimal): keep store rules under min --config-dir in step with bep serve (T92) by minimal-foundry[bot] · Pull Request #2666 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

feat(minimal): keep store rules under min --config-dir in step with bep serve (T92) - #2666

Merged
norrietaylor merged 8 commits into
mainfrom
agent/2620-keep-store-rules-under-min-config-dir-in-step-wi
Oct 27, 2026
Merged

norrietaylor merged 8 commits into
mainfrom
agent/2620-keep-store-rules-under-min-config-dir-in-step-wi

Conversation

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

T92 — Keep store rules under min --config-dir in step with bep serve

slice: S12
kind: task
covers: BEP-032
size: S
est: 60 code, 60 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: when min would mint under a rule bep serve does not read, it refuses: "min did not mint a store handle for : bep serve reads store rules from , not from --config-dir

."
observability: none: the refusal prints to the person running min, and min logs nothing for a mint.
layers:
- config:
- crates/minimal/src/mint.rs: a store handle under a rule that exists only below a --config-dir override is refused with the diagnostics text, or the override reaches bep serve; the choice is the implementer's and the arch review's (#2620)
- crates/bep/src/main.rs: the client_store_rules doc names the behaviour in place of the #2620 link
test: cargo nextest run -p minimal a_store_rule_under_config_dir_is_minted_only_when_bep_reads_it
produces: none
consumes: none
proof: A store rule written under min --config-dir is either read by bep serve or refused at mint with the reason.
depends on:
- blocked by #2599
- blocked by #2257

Proof

A store rule written under min --config-dir is now either the same rule that bep serve reads from the default config dir, and min mints the handle, or min refuses the mint with: "min did not mint a store handle for : bep serve reads store rules from , not from --config-dir

."

Notes from the agent: I chose the refusal path, not passing the override to bep serve. mint_store_handle takes a new config_dir argument and checks it before it signs. The check passes when the override resolves to the same config.toml that bep serve reads. It also passes when bep serve holds an identical rule after the merge with the organization file and the deny set. A deny rule, a rule in another form, or a bep config that does not read is refused. mint_store_handle still has no production caller (#2525), so the future caller must pass GlobalArgs.config_dir. proxy_rule in mint.rs repeats the StoreRuleConfig to StoreRule conversion that bep's main.rs store_rule does, because that function is in the bep binary and not in its library. A later task can move it into the library so there is one conversion. Clippy flagged eight arguments on mint_store_handle, so I added an expect attribute. The mint:: tests in minimal (12) pass. The refusal text is the text that the task's diagnostics line gives. It uses the product nouns min, bep serve and --config-dir.

Layer exception

The epic owner accepted this file outside T92's layers on 2026-10-27, for arch condition C1, which asked that the epic file no residual:

  • crates/bep/src/handle.rs: StoreRule::from_config is now the one StoreRuleConfig to StoreRule conversion. bep serve and min's mint check both call it, so they decide inject with the same code (Gatehouse §6.10 line 842).

Tests

line exit tail
cargo nextest run -p minimal a_store_rule_under_config_dir_is_minted_only_when_bep_reads_it 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-e4fc... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling args v0.0.1 (/workbench/crates/args) Compiling client-config v0.0.1 (/wo

Verify

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

        closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "bb844091114f74a3",
                "span_id": "48a573aa886453c0",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetNetSwitch",
                "parent_span_id": "bb844091114f74a3",
                "span_id": "651a970e65e250b7",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetDenyAllOptOut",
                "parent_span_id": "bb844091114f74a3",
                "span_id": "594d8c268fa7110b",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetPaths",
                "parent_span_id": "bb844091114f74a3",
                "span_id": "3e77ce3c7cc998f4",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "bb844091114f74a3",
                "queued_behind": "0",
                "span_id": "8fdd6e07e1d9107a",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "DeleteSession",
                "parent_span_id": "bb844091114f74a3",
                "queued_behind": "0",
                "span_id": "7705c7f8438184c5",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "Destroy",
                "parent_span_id": "7705c7f8438184c5",
                "span_id": "e8e708868afb92da",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
    ]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 
────────────
     Summary [  52.382s] 1008 tests run: 1007 passed, 1 failed, 2 skipped
        FAIL [   3.602s] (1008/1008) minimal::otel_cli exec_run_attach_and_task_run_share_the_commands_trace
error: test run failed

Base

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

Closes #2620


Generated by Claude Code

…read

A store rule read from a min --config-dir override reaches the handle
only when bep serve, which reads the default config dir, holds the same
rule. Otherwise min refuses the mint and names both locations (BEP-032).
@coderabbitai
coderabbitai Bot commented Oct 27, 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: 0b75c3f1-9fdf-4469-8d4a-8651f11731f7

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

Reviewed: no findings; approval withheld, 4 threads unresolved at 862558a390b8.

APPROVE withheld: 4 unresolved threads — minimal-arch[bot] crates/minimal/src/mint.rs, minimal-arch[bot] crates/minimal/src/mint.rs, minimal-arch[bot] crates/bep/src/main.rs, minimal-foundry[bot] crates/minimal/src/mint.rs. Resolving the last thread releases the approval on this head.

Resolve the open threads. Resolving the last one releases the approval on this head; no new review is required.

Clobber: none seen.

@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 — No findings.

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

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Oct 27, 2026
@minimal-arch minimal-arch Bot left a comment
Copy link
10000 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 mint-time gate conforms to Gatehouse §6.10 line 842. min refuses a store handle unless bep serve holds the same rule, and every case that cannot decide refuses. One gap is open. proxy_rule copies the store_rule conversion from the bep binary, and the PR body leaves the move as later work with no issue. C1 tells you to file that issue and link it from proxy_rule and the PR body.

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

Comment thread crates/minimal/src/mint.rs Resolved
proxy_rule in min copies store_rule in the bep binary. Each doc comment
now names the other copy, so a change to one reaches both.
@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 mint check conforms to Gatehouse §6.10 line 842. min refuses a store handle under a rule that bep serve does not hold. The new proxy_rule comment says that no issue tracks the copied store_rule conversion. A residual with no issue has no owner. File the issue and link it from both doc comments and the PR body (C1).

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

Comment thread crates/minimal/src/mint.rs Resolved
Comment thread crates/bep/src/main.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/minimal/src/mint.rs Resolved
@minimal-foundry minimal-foundry Bot removed the review:approved minimal-review approved the current head label Oct 27, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

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

line exit tail
cargo nextest run -p minimal a_store_rule_under_config_dir_is_minted_only_when_bep_reads_it 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-b1da... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling args v0.0.1 (/workbench/crates/args) Compiling client-config v0.0.1 (/wo

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

        closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "eb3cba19046f591d",
                "span_id": "d40f9c2dc10189a1",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetNetSwitch",
                "parent_span_id": "eb3cba19046f591d",
                "span_id": "5323a544978179c7",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetDenyAllOptOut",
                "parent_span_id": "eb3cba19046f591d",
                "span_id": "b45a016d4adada2b",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetPaths",
                "parent_span_id": "eb3cba19046f591d",
                "span_id": "722e19dfb6252863",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "eb3cba19046f591d",
                "queued_behind": "0",
                "span_id": "7ffefdfd2aaaa6d8",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "DeleteSession",
                "parent_span_id": "eb3cba19046f591d",
                "queued_behind": "0",
                "span_id": "8fd580b938f65c64",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "Destroy",
                "parent_span_id": "8fd580b938f65c64",
                "span_id": "22a83e6b70fa7764",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
    ]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 
────────────
     Summary [  37.087s] 1008 tests run: 1007 passed, 1 failed, 2 skipped
        FAIL [   2.885s] (1008/1008) minimal::otel_cli exec_run_attach_and_task_run_share_the_commands_trace
error: test run failed

Review threads the coder judged:

  • 👍 valid — crates/minimal/src/mint.rs:1471: Each copy's doc comment (proxy_rule in mint.rs, store_rule in bep/src/main.rs) now names the other and says to change both together. I cannot file the issue from this session, and the move into the bep library is outside this task's files. A person must file the issue and add its URL to the doc comm

A store rule written only under min --config-dir is refused at mint. The refusal says: "min did not mint a store handle for : bep serve reads store rules from , not from --config-dir

." A rule that bep serve holds in the same form, or an override that names the default config dir, is minted as before.

Notes from the agent: Failed checks: the directive's log excerpts show only passing tests and the aggregator's exit 1. They do not name a failing test. At the branch head, after the merge of main, these runs pass: cargo nextest run -p minimal (784 passed), cargo nextest run -p bep -p boxes (825 passed), and cargo clippy -p minimal -p bep --all-targets -- -D warnings (clean). The doctests did not run, because this box has no rustdoc. I did not reproduce the CI failure, and I changed no code for it. The CI logs need a person to find the failing test. Thread C1: the real fix moves the store rule conversion into the bep library, for example crates/bep/src/handle.rs or crates/bep/src/store.rs. Those files are outside this task's layers. I cannot file an issue, because this session has no gh credential. A person must file the issue and put its URL in the proxy_rule doc comment and in the PR body. In this round, each copy's doc comment names the other copy.

Copy link
Copy Markdown
Member

/revise

Revise round on arch condition C1 at 5b55caca (#2666 (comment)). No round is in flight. The epic owner ruled on 2026-10-27 that this epic files no more residuals: a condition is fixed in its PR. The owner accepts the files outside T92's layers that this needs, as a layer exception. Add a "Layer exception" section to the PR body that names them.

  1. One conversion. Move store_rule (the StoreRuleConfig to StoreRule conversion) out of crates/bep/src/main.rs into the bep library, for example as a public function in the module that defines StoreRule. Make bep serve and min's proxy_rule in crates/minimal/src/mint.rs both call it, and delete the copy in mint.rs. Then the mint check and redemption decide inject with the same code (§6.10 line 842). Remove the "no issue tracks it yet" sentences and the "change both together" notes, since there is one copy. Keep the existing tests, and point any test of the old copy at the library function.
  2. The refusal names its cause (feat(minimal): keep store rules under min --config-dir in step with bep serve (T92) #2666 (comment)). bep_reads_store_rule returns RuleNotRead for several causes: the rule is absent from the config bep serve reads, it differs there in prefix or upstream, it is a deny rule there, or that config does not read. Give each cause its own text. Each one names the file bep serve reads and what differs, and keeps the --config-dir wording only for the case where the rule exists only under --config-dir. Add a unit test per cause.
  3. Change nothing else. Run cargo nextest run -p bep, cargo nextest run -p minimal mint and cargo clippy --workspace --all-targets --locked -- -D warnings with the pinned toolchain.

Generated by Claude Code

Move store_rule into the bep library as StoreRule::from_config. bep serve
and min's mint check now decide inject with one function, so the copy in
mint.rs and its notes are gone.

Give each cause of a store handle refusal under --config-dir its own
text: an unread file, a refused rule, a deny rule and a rule that
differs. Each names the file that bep serve reads.
@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 · the full ruling

The change conforms to Gatehouse §6.10 line 842. min refuses a store handle unless bep serve holds the same rule. The two now share one conversion, StoreRule::from_config, so min and redemption decide inject the same way. Every unread or different rule refuses, so the check fails closed. The one open item is the production caller of mint_store_handle. It must pass GlobalArgs.config_dir, and #2525 tracks it.

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

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on a /revise note, pushed as e45320efe557.

line exit tail
cargo nextest run -p minimal a_store_rule_under_config_dir_is_minted_only_when_bep_reads_it 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-0b3a... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling args v0.0.1 (/workbench/crates/args) Compiling client-config v0.0.1 (/wo

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

        closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "span_id": "8058969bcd4c5afc",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetNetSwitch",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "span_id": "5caf3113e34ee510",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetDenyAllOptOut",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "span_id": "46eafb156080aaab",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetPaths",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "span_id": "385bbf62d9d65596",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "queued_behind": "0",
                "span_id": "4d67cd3997025de8",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "DeleteSession",
                "parent_span_id": "7d6010ed0b1a9b3e",
                "queued_behind": "0",
                "span_id": "4bde469dc823c725",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "Destroy",
                "parent_span_id": "4bde469dc823c725",
                "span_id": "9cc1a18bbcf8e8ad",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
    ]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 
────────────
     Summary [  49.609s] 1013 tests run: 1012 passed, 1 failed, 2 skipped
        FAIL [   3.512s] (1013/1013) minimal::otel_cli exec_run_attach_and_task_run_share_the_commands_trace
error: test run failed

Outside the task's layers::

  • crates/bep/src/handle.rs

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

Review threads the coder judged:

  • 👍 valid — crates/minimal/src/mint.rs: Removed the copy, so no issue link is needed. proxy_rule is gone, and the mint check now calls bep::handle::StoreRule::from_config, the same function that bep serve uses. The 'no issue tracks it yet' sentence is removed.
  • 👍 valid — crates/bep/src/main.rs: store_rule in crates/bep/src/main.rs moved into the library as StoreRule::from_config. bep serve calls it, and the 'change both copies together' note is removed.
  • 👍 valid — crates/minimal/src/mint.rs: bep_reads_store_rule now gives each cause its own error and text: config file does not read, rule refused, deny rule, rule differs (names fields), absent (keeps --config-dir text). One unit test per cause.

A store rule written under min --config-dir is minted only when bep serve holds the same rule. Otherwise min refuses the mint and names the cause and the file that bep serve reads. There is one message each for: the rule exists only under --config-dir, the file that bep serve reads does not read, bep serve refuses its own rule, that rule is a deny rule, and that rule differs in the named fields. min and bep serve now convert a rule with one library function, StoreRule::from_config.

Notes from the agent: Layer exception: crates/bep/src/handle.rs is outside T92's layers. The epic owner accepted it in the revise note, because StoreRule::from_config now lives there. Add a 'Layer exception' section to the PR body that names crates/bep/src/handle.rs. The runner writes the body, so I did not write it. I added one cause that the directive did not list: a rule that bep serve refuses when it reads it (BepRuleRefused). Without it, that case printed the '--config-dir' text, and that text was wrong for it. The deny and differs messages name the organization file as well when it exists, because the merged rule can take its fields or its deny action from that file. If the rule in the file bep serve reads has a different injection form, the differs message says 'a different header and basic_auth'. I did not run just clippy-strict.

@minimal-foundry
minimal-foundry Bot marked this pull request as draft October 27, 2026 05:39
@minimal-foundry minimal-foundry Bot added the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 27, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

The runtime will not revise this pull request again on its own: the diff is +427/-29 (456 lines), past 3x the plan's estimate of 120 lines (est: 60 code, 60 tests, as #2620 reads now), at round 2 (the last trigger was a /revise note). A person decides now. Remove needs-human from this pull request to let /revise <note> or the automatic rounds resume, or finish #2620 by hand.

@norrietaylor norrietaylor removed the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 27, 2026
@norrietaylor
norrietaylor marked this pull request as ready for review October 27, 2026 05:49
…-rules-under-min-config-dir-in-step-wi

# Conflicts:
#	crates/bep/src/main.rs
@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: 4 unresolved threads — minimal-arch[bot] crates/minimal/src/mint.rs, minimal-arch[bot] crates/minimal/src/mint.rs, minimal-arch[bot] crates/bep/src/main.rs, minimal-foundry[bot] crates/minimal/src/mint.rs. 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 · the full ruling

This head is a merge of main into the PR. The PR's own change is the same as at e45320ef, which passed. The only conflict was the client_store_rules doc. The resolution keeps both the mint refusal and the T91 behaviour, and the code at this head matches the doc. BEP-032 conforms to Gatehouse §6.10 line 842. There are no conditions.

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

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

A merge of main before round 1, not counted against the cap (1 of 3), pushed as 862558a390b8.

Resolved conflicts in: crates/bep/src/main.rs

line exit tail
cargo nextest run -p minimal a_store_rule_under_config_dir_is_minted_only_when_bep_reads_it 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-2a60... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling client-config v0.0.1 (/wo

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

        closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "4345faee9020347e",
                "span_id": "4a87c65314c2763e",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetNetSwitch",
                "parent_span_id": "4345faee9020347e",
                "span_id": "91891ca4405c3a84",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetDenyAllOptOut",
                "parent_span_id": "4345faee9020347e",
                "span_id": "9db5cc449f8aa0c4",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "GetPaths",
                "parent_span_id": "4345faee9020347e",
                "span_id": "66c4137254d05c0c",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "GetRecord",
                "parent_span_id": "4345faee9020347e",
                "queued_behind": "0",
                "span_id": "7dbd11fb781099a0",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "sessions.manager.message",
            fields: {
                "kind": "DeleteSession",
                "parent_span_id": "4345faee9020347e",
                "queued_behind": "0",
                "span_id": "15deed376030da57",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
        LoggedSpan {
            name: "session.message",
            fields: {
                "kind": "Destroy",
                "parent_span_id": "15deed376030da57",
                "span_id": "3b97e9959339881f",
                "trace_id": "0af7651916cd43dd8448eb211c803111",
            },
            parent: None,
            closed: true,
        },
    ]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 
────────────
     Summary [  43.540s] 1014 tests run: 1013 passed, 1 failed, 2 skipped
        FAIL [   3.090s] (1014/1014) minimal::otel_cli exec_run_attach_and_task_run_share_the_commands_trace
error: test run failed

Outside the task's layers::

  • crates/bep/src/handle.rs

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

A store rule written only under min --config-dir is refused at mint, and the refusal names the file that bep serve reads. A rule that bep serve also reads is minted.

Notes from the agent: This round resolved the merge conflict with main in the client_store_rules doc comment in crates/bep/src/main.rs. The resolution keeps this branch's sentence about the min refusal in place of the #2620 link. It takes main's sentence that the root's names and the admitted CONNECT set follow the rules at each CONNECT (StoreAdmission), so the #2618 restart limit is gone. The merge commit is 862558a. cargo clippy -p bep --all-targets is clean. scripts/session-e2e.sh and crates/bep/src/proxy.rs in the merge commit come from main, not from this task.

@minimal-foundry
minimal-foundry Bot marked this pull request as draft October 27, 2026 06:06
@minimal-foundry minimal-foundry Bot added the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 27, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

The runtime will not revise this pull request again on its own: the diff is +427/-29 (456 lines), past 3x the plan's estimate of 120 lines (est: 60 code, 60 tests, as #2620 reads now), at round 1 (the last trigger was a conflict with the base branch). A person decides now. Remove needs-human from this pull request to let /revise <note> or the automatic rounds resume, or finish #2620 by hand.

@norrietaylor norrietaylor removed the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 27, 2026
@norrietaylor
norrietaylor marked this pull request as ready for review October 27, 2026 06:13
@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.

Own review at 862558a. min refuses to mint a store handle under a rule that bep serve will not hold, and the refusal names the cause. The cause can be: the rule exists only under --config-dir, the config bep serve reads does not parse, bep serve refuses or denies the rule, or the rule differs there in the named fields. The StoreRuleConfig to StoreRule conversion now lives once, in bep::handle::StoreRule::from_config. The mint check and redemption call it, so they cannot disagree on inject (Gatehouse §6.10 line 842).


Generated by Claude Code

@norrietaylor norrietaylor changed the title T92 — Keep store rules under min --config-dir in step with bep serve feat(minimal): keep store rules under min --config-dir in step with bep serve (T92) Oct 27, 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 862558a: every merge gate passes at this head (arch PASS at 862558a, zero open threads, every lane aggregator green). Squash title feat(minimal): keep store rules under min --config-dir in step with bep serve (T92) 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 27, 2026
Merged via the queue into main with commit fad7c72 Oct 27, 2026
37 checks passed
@norrietaylor
norrietaylor deleted the agent/2620-keep-store-rules-under-min-config-dir-in-step-wi branch October 27, 2026 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T92 — Keep store rules under min --config-dir in step with bep serve

1 participant

0