8000 feat(bep): carry a store handle sealed as a store member kind (T60) by minimal-foundry[bot] · Pull Request #2568 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

feat(bep): carry a store handle sealed as a store member kind (T60) - #2568

Merged
norrietaylor merged 1 commit into
mainfrom
agent/2540-carry-a-store-handle-sealed-as-a-store-member-ki
Oct 25, 2026
Merged

norrietaylor merged 1 commit into
mainfrom
agent/2540-carry-a-store-handle-sealed-as-a-store-member-ki

Conversation

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

T60 — Carry a store handle sealed as a store member kind

slice: S9
kind: task
covers: BEP-063
size: M
est: 140 code, 160 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: min box audit <box> shows a redemption of a store member with its store reference, and a store member whose handle fails verification as a refusal
observability: one debug line per store member redeemed naming the store reference, never the value
layers:
- seal:
- crates/bep/src/seal.rs: MemberKind gains Store (serde store), so a store handle travels sealed as {kind: "store", jws}
- crates/bep/src/redeem.rs: a store member's handle is verified against the registered client key and resolved to the store reference it names
test: cargo nextest run -p bep a_store_member_round_trips_sealed
test: cargo nextest run -p bep a_store_handle_with_an_unregistered_key_is_refused
produces: none
consumes: none
proof: A store handle sealed as a store member round-trips through the envelope, redeems against the registered client key, and is refused under an unregistered one.
depends on:
- blocked by T27
- assumes OQ3

Proof

A store handle sealed as a store member goes through seal and open unchanged. Its handle verifies under the registered client key and resolves to keychain:anthropic, and decide admits the redemption. The same member under an empty registry or an unregistered key is refused as store_handle_invalid, and the refusal still names the store reference.

Notes from the agent: Out of layers: crates/bep/src/handle.rs. The match in read_opened over MemberKind is exhaustive, so the new Store variant does not compile without the arm MemberKind::Store => HandleKind::Store. I also updated its doc comment. That arm is also the place where a store member's handle is verified and resolved. The store path in handle::read already existed, so redeem.rs got its module doc and the two tests only. Observability: handle::read already logs one debug line store handle checked per member read, with the store and the identifier and never the value or the signature, so I added no new log line. Only the identifier reaches the audit record today; the jti does not (residual #2576). The full bep suite passed (158 tests). Clippy and fmt for bep are clean. I did not run just clippy-strict.

Tests

line exit tail
cargo nextest run -p bep a_store_member_round_trips_sealed 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-fc40... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 14.28s ──────────── Nextest run ID 851e63e1-eeac-4126-ad1f-069100ff17e9 with nexte
cargo nextest run -p bep a_store_handle_with_an_unregistered_key_is_refused 0 Applying loadouts: default Running task runtime-implement-test-1 in session task-runtime-implement-test-1-52a9... Finished 'test' profile [unoptimized] target(s) in 0.35s ─────â 8000 ”€────── Nextest run ID a31f4f33-3236-46bf-85fa-286a83bd7361 with nextest profile: default Starting 1 test across 2

Verify

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

Layer exception

The epic owner's rule accepts out-of-layer changes a task needs. The babysitter accepted this one on 2026-10-25:

  • crates/bep/src/handle.rs: read_opened matches MemberKind exhaustively, so the new Store kind needs its arm mapping to HandleKind::Store.

Residuals

Out of scope

These files are outside the task's layers:, so this PR is a draft:

  • crates/bep/src/handle.rs

Closes #2540


Generated by Claude Code

MemberKind gains Store, wire name "store", so a store handle travels
sealed as {kind: "store", jws}. read_opened maps a store member to a
store handle, which verifies under a registered client key and resolves
to the store reference it names (BEP-063). Tests prove the round trip
and the refusal under an unregistered key.
@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: 3851798a-6c80-4250-a8f5-02984cd0c647

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
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a failed check suite: the coder changed nothing. Revise round 1 is for a failed macOS unit job (just test with scope -p minvmd -p boxes -p bep) and its aggregator ci-macos-success. The log excerpt in the directive does not name the failing test. It shows minvmd tests that pass, then error: recipe test fail…. I was not able to reproduce a failure on Linux. All 158 bep tests pass, and clippy with -D warnings is clean. The new tests and the HEAD diff contain no platform-specific code. The bep code under cfg(target_os = "macos") is in keys.rs and audit.rs, and this pull request does not change those files. This box cannot run the macOS lane, so I changed nothing. Next step: read the full log of job 121230823597 for the name of the failing test, or re-run the job to see if the failure is a flake. Scope: HEAD also changes crates/bep/src/handle.rs, which is outside the layers. That change is necessary, because read_opened matches MemberKind exhaustively and must map Store to HandleKind::Store. The debug line fo…[truncated]

@norrietaylor
norrietaylor marked this pull request as ready for review October 25, 2026 17:52
@norrietaylor
norrietaylor requested a review from a team as a code owner October 25, 2026 17:52
@minimal-foundry
minimal-foundry Bot commented Oct 25, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: no findings at 7203255e1773.

Nothing to do.

Verdict APPROVE, posted as a comment: the App cannot review its own pull request; the check and the label carry it.

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 25, 2026
@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 seal layer of BEP-063 conforms to Gatehouse §6.10 line 842. A store handle now travels as a store member, and the existing store-handle checks verify it in the order the design gives. One gap remains. Line 842 makes jti the audit correlation id, but the audit record has no jti, and the PR body says that it does. C1 corrects the body and files that edit as a residual. The PR can merge with C1 open after its issue exists.

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

Comment thread crates/bep/src/handle.rs Resolved
@norrietaylor norrietaylor changed the title T60 — Carry a store handle sealed as a store member kind feat(bep): carry a store handle sealed as a store member kind (T60) Oct 25, 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 7203255: every merge gate passes at this head (arch PASS at 7203255, zero open threads, every lane aggregator green). Squash title feat(bep): carry a store handle sealed as a store member kind (T60) 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 25, 2026
Merged via the queue into main with commit 694dba5 Oct 25, 2026
42 of 44 checks passed
@norrietaylor
norrietaylor deleted the agent/2540-carry-a-store-handle-sealed-as-a-store-member-ki branch October 25, 2026 22:28
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.

T60 — Carry a store handle sealed as a store member kind

1 participant

0