Repository navigation
Closed
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:strongestThe strongest model available: unknown ground, or large work that needs careThe strongest model available: unknown ground, or large work that needs caresize: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 |
|---|---|---|---|---|---|
| Clone, push and gh from a box with no token in it | L | unknown ground | strongest | an agent | 820 (400 code, 420 tests) |
The proxy's keys survive a restart and appear in no file, and replacing the sealing key refuses every member sealed to the old one.
Covers:
- BEP-014
- BEP-059
- BEP-060
- BEP-072
Layers:
- keys:
- crates/bep/src/keys.rs (new): a key-store seam; the macOS Keychain backend holds the sealing, root and signing keys non-exportable
- crates/bep/src/publish.rs (new): publishes and parses by role the sealing public key, fingerprints and root (BEP-072)
- crates/bep/src/main.rs (new): the
bepbinary with--replace-key <role>, which runs without the files a serving proxy reads - crates/bep/src/lib.rs: module lines
- crates/bep/Cargo.toml:
security-frameworkon macOS - Cargo.lock: the keychain dependency
cargo nextest run -p bep signing_key_is_non_exportable_and_has_no_filecargo nextest run -p bep sealing_and_root_keys_persist_non_exportablecargo nextest run -p bep a_value_sealed_to_the_published_identity_unseals_under_the_keyscargo nextest run -p bep a_published_identity_carrying_no_key_is_refused_by_rolecargo nextest run -p bep keys_never_regenerated_on_restartcargo nextest run -p bep key_replacement_kills_outstanding_memberscargo nextest run -p bep refused_key_names_the_replacement_command
Waits on:
- T1 — Create the bep crate with the GitHub module and the sealed envelope #2258
- assumes OQ4 (v1 binds the macOS Keychain behind a key-store seam; the Linux host stays unverified for the signing-key rule until a later backend)
Plan block
### T2 — Hold the proxy's keys non-exportable in the host keychain and publish their public halves
slice: S0
kind: task
covers: BEP-014, BEP-059, BEP-060, BEP-072
size: L
est: 400 code, 420 tests
executor: agent
difficulty: unknown ground
model: strongest
diagnostics: when the keychain refuses a key, `bep` refuses to start and prints "The keychain refused the proxy its <role> key. Ru
D7A8
n `bep --replace-key <role>` to make a new one; boxes created before then must be re-created." on stderr, pinned by refused_key_names_the_replacement_command
observability: one info log line at start naming each key role and its fingerprint, and one warn line per replacement naming the role
layers:
- keys:
- crates/bep/src/keys.rs (new): a key-store seam; the macOS Keychain backend holds the sealing, root and signing keys non-exportable
- crates/bep/src/publish.rs (new): publishes and parses by role the sealing public key, fingerprints and root (BEP-072)
- crates/bep/src/main.rs (new): the `bep` binary with `--replace-key <role>`, which runs without the files a serving proxy reads
- crates/bep/src/lib.rs: module lines
- crates/bep/Cargo.toml: `security-framework` on macOS
- Cargo.lock: the keychain dependency
test: cargo nextest run -p bep signing_key_is_non_exportable_and_has_no_file
test: cargo nextest run -p bep sealing_and_root_keys_persist_non_exportable
test: cargo nextest run -p bep a_value_sealed_to_the_published_identity_unseals_under_the_keys
test: cargo nextest run -p bep a_published_identity_carrying_no_key_is_refused_by_role
test: cargo nextest run -p bep keys_never_regenerated_on_restart
test: cargo nextest run -p bep key_replacement_kills_outstanding_members
test: cargo nextest run -p bep refused_key_names_the_replacement_command
produces:
- crates/bep/src/keys.rs
- crates/bep/src/publish.rs
- crates/bep/src/main.rs (entry point)
consumes:
- crates/bep/src/seal.rs
proof: The proxy's keys survive a restart and appear in no file, and replacing the sealing key refuses every member sealed to the old one.
depends on:
- blocked by #2258
- assumes OQ4 (v1 binds the macOS Keychain behind a key-store seam; the Linux host stays unverified for the signing-key rule until a later backend)
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:strongestThe strongest model available: unknown ground, or large work that needs careThe strongest model available: unknown ground, or large work that needs caresize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Activity
minimal-foundry commentedon Oct 19, 2026
Done. #2363 merged.
branch
agent/2259-hold-the-proxy-s-keys-non-exportable-in-the-host· epic #1501 · PR #2363c6e8873d4e0c0b5d8c6c2a80392396507e3ee08b2493e25eUpdated 2026-10-20T00:39:00.219Z.