Repository navigation
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largesize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Description
Task
| slice | size | difficulty | model | who | estimated lines |
|---|---|---|---|---|---|
| Keychain secrets by reference | L | needs care | standard | an agent | 650 (350 code, 300 tests) |
A store rule aimed at a GitHub host or the Host header is refused by name when the configuration is read.
Covers:
- BEP-034
- BEP-035
- BEP-036
- BEP-037
Layers:
- config:
- crates/minimal/src/config.rs: reads
[secret-store-rules]from the client configuration - crates/boxes/src/core/bep.rs: the BEP-034, BEP-035 and BEP-036 refusals
- crates/mfile/src/lib.rs: ignores a project's
[secret-store-rules]with a warning - crates/boxes/src/client/config.rs:
Configgains thesecret-store-rulesfield, so a client file that holds rules still parses underdeny_unknown_fieldson every read, the attach path included (arch C1 on feat(minimal): read client-owned store rules and refuse rules in the deny set #2514) cargo nextest run -p boxes store_rule_in_deny_set_is_refusedcargo nextest run -p boxes store_rule_naming_sign_in_item_is_refusedcargo nextest run -p boxes ask_rule_without_tty_deniescargo nextest run -p boxes prop_store_upstream_outside_egress_is_exit_3cargo nextest run -p boxes project_store_rules_are_ignored_with_warning
- crates/minimal/src/config.rs: reads
Waits on:
Plan block
### T25 — Read client-owned store rules and refuse rules in the deny set
slice: S3
kind: task
covers: BEP-034, BEP-035, BEP-036, BEP-037
size: L
est: 350 code, 300 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: a refused rule prints "The secret-store rule <name> in <file> names <host or header>, which a secret can never be sent to. Remove or change the rule." on stderr when the configuration is read, pinned by store_rule_in_deny_set_is_refused
observability: one debug log line per configuration read naming each rule refused and why
layers:
- config:
- crates/minimal/src/config.rs: reads `[secret-store-rules]` from the client configuration
- crates/boxes/src/core/bep.rs: the BEP-034, BEP-035 and BEP-036 refusals
- crates/mfile/src/lib.rs: ignores a project's `[secret-store-rules]` with a warning
- crates/boxes/src/client/config.rs: `Config` gains the `secret-store-rules` field, so a client file that holds rules still parses under `deny_unknown_fields` on every read, the attach path included (arch C1 on #2514)
test: cargo nextest run -p boxes store_rule_in_deny_set_is_refused
test: cargo nextest run -p boxes store_rule_naming_sign_in_item_is_refused
test: cargo nextest run -p boxes ask_rule_without_tty_denies
test: cargo nextest run -p boxes prop_store_upstream_outside_egress_is_exit_3
test: cargo nextest run -p boxes project_store_rules_are_ignored_with_warning
produces: none
consumes: none
proof: A store rule aimed at a GitHub host or the Host header is refused by name when the configuration is read.
depends on:
- blocked by #2276
Generated by Claude Code
Reacted by minimal-foundry
Metadata
Metadata
Assignees
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largesize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Activity
fix(bep): name the relay and store-rule interims, fix the https refusal
docs(bep): mark the redeemer's interims and their flip issues
feat(bep): accept only box connections and terminate TLS for the modu…
feat(bep): wire the redemption decision and each box's declared egres…
minimal-foundry commentedon Oct 24, 2026
Done. #2514 merged.
branch
agent/2280-read-client-owned-store-rules-and-refuse-rules-i· epic #1501 · PR #25142f30f064fac313a5c9c55eb7679ca6cb677e039594b34acbca7819f6f0f5112c8a6b5401Updated 2026-10-24T23:38:43.000Z.
fix(bep): refuse a misplaced sign-in value before it is redeemed
norrietaylor commentedon Oct 25, 2026
The open part of T28 (#2292, delivered in #2574) is two edits that belong here.
#2574 makes the forwarder inject a stored key in the registered form.
bep servedoes not inject a store value until both of these land:crates/bep/src/redeemer.rs:BoxRedeemeroverridesRedeemer::redeem_referenceand returnsRedeemed::Storefor an admitted store member (Gatehouse §6.10 line 849, redemption step 4). Keep theheadercheck beforeredeemruns. Then delete the interim note onredeem_referenceincrates/bep/src/forward.rs.crates/bep/src/proxy.rs: thebep servepath callsFlow::with_store(Arc::new(HostStore)). Then delete the interim note onwith_store.Until then, the T28 proof holds in the forwarder only. BEP-032 stays open until redemption step 4 runs in
bep serve. This is the arch review's C1 on #2574 at 8a505ad (ruling). The epic owner keepsCloses #2292on the PR, so the condition is recorded here.Generated by Claude Code
norrietaylor commentedon Oct 25, 2026
Correction: this issue is closed, so the work above is now tracked in #2586.
Generated by Claude Code
fix(bep): refuse a misplaced sign-in value before it is redeemed
feat(bep): inject a stored key in its registered form per request (T2…