8000 T41 — Wire the redemption decision and each box's declared egress into bep serve · Issue #2483 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T41 — Wire the redemption decision and each box's declared egress into bep serve #2483

Closed

Description

@norrietaylor

Task

slice size difficulty model who estimated lines
Clone, push and gh from a box with no token in it L needs care strongest an agent 800 (400 code, 400 tests)

A request carrying a sealed member from a registered box inside its declared egress reaches the upstream with the credential in place, and the same request from another box, or to a host the box did not declare, is refused before anything goes upstream.

Covers:

  • BEP-019
  • BEP-020
  • BEP-022
  • BEP-025

Layers:

  • registry:
    • crates/bep/src/boxes.rs (new): per box id, the declared egress authorities and the own_ip or host_ip stance, registered over the control socket at creation and removed at destroy
    • crates/bep/src/control.rs: a RegisterBox request carrying the box id, its declared egress and its stance, and a ForgetBox request
    • crates/bep/src/lib.rs: module line
    • cargo nextest run -p bep registered_box_egress_is_read_per_request
    • cargo nextest run -p bep forgotten_box_is_refused_no_live_box
  • decide:
    • crates/bep/src/redeemer.rs (new): the forward::Redeemer over redeem::decide: opens the sealed value under the proxy key, verifies the handle against the registered client keys, resolves a sign-in reference to the member's credential from the Keychain item, takes attribution and the declared egress from the registry, and passes the revocations in force
    • crates/bep/src/forward.rs: Unwired stays the test default; the serving proxy installs the real redeemer
    • cargo nextest run -p bep sealed_member_is_redeemed_within_declared_egress
    • cargo nextest run -p bep cross_box_value_is_refused_cross_box
    • cargo nextest run -p bep prop_serve_redeems_iff_decide_admits
  • serve:

Waits on:

Why this task exists: T11 (#2272, pull request #2481) gave bep its forwarder, and the arch review of that pull request ruled that the interim in main.rs, which names #2272 as its lift, must point at the issue that wires the real redeemer and each box's declared egress. Until this lands, bep serve installs forward::Unwired, which refuses every sealed value as undecryptable and declares no egress for any box, and NoSigningKey answers every admitted CONNECT with 502. Added to the epic at the person's decision on 2026-10-21; the layers are the babysitter's cut and the planner may re-cut them.

Plan block
### T41 — Wire the redemption decision and each box's declared egress into bep serve
  slice: S0
  kind: task
  covers: BEP-019, BEP-020, BEP-022, BEP-025
  size: L
  est: 400 code, 400 tests
  executor: agent
  difficulty: needs care
  model: strongest
  diagnostics: `min box audit <box>` shows each redemption's admit with the member identifier and each refusal with its check marker (`undecryptable`, `cross_box`, `outside_declared_egress`, `host_mismatch`), never the credential; a box whose declared egress the proxy has not registered is refused `outside_declared_egress`
  observability: one info log line when `bep serve` installs the redeemer naming the registry path, and one debug line per registered box naming its id and the count of its declared authorities, never a credential
  layers:
    - registry:
      - crates/bep/src/boxes.rs (new): per box id, the declared egress authorities and the `own_ip` or `host_ip` stance, registered over the control socket at creation and removed at destroy
      - crates/bep/src/control.rs: a `RegisterBox` request carrying the box id, its declared egress and its stance, and a `ForgetBox` request
      - crates/bep/src/lib.rs: module line
      test: cargo nextest run -p bep registered_box_egress_is_read_per_request
      test: cargo nextest run -p bep forgotten_box_is_refused_no_live_box
    - decide:
      - crates/bep/src/redeemer.rs (new): the `forward::Redeemer` over `redeem::decide`: opens the sealed value under the proxy key, verifies the handle against the registered client keys, resolves a sign-in reference to the member's credential from the Keychain item, takes attribution and the declared egress from the registry, and passes the revocations in force
      - crates/bep/src/forward.rs: `Unwired` stays the test default; the serving proxy installs the real redeemer
      test: cargo nextest run -p bep sealed_member_is_redeemed_within_declared_egress
      test: cargo nextest run -p bep cross_box_value_is_refused_cross_box
      test: cargo nextest run -p bep prop_serve_redeems_iff_decide_admits
    - serve:
      - crates/bep/src/main.rs: `bep serve` installs the redeemer through `Proxy::with_redeemer` and gives the proxy the control registry; the `NoSigningKey` doc and the startup `warn!` say that #2440 alone gates leaf signing now that the decision is wired
      test: cargo nextest run -p bep serve_installs_the_redeemer_and_registry
  produces: none
  consumes:
    - crates/bep/src/redeem.rs
    - crates/bep/src/forward.rs
    - crates/bep/src/handle.rs
    - crates/bep/src/signin.rs
    - crates/bep/src/seal.rs
    - crates/bep/src/control.rs
  proof: A request carrying a sealed member from a registered box inside its declared egress reaches the upstream with the credential in place, and the same request from another box, or to a host the box did not declare, is refused before anything goes upstream.
  depends on:
    - blocked by T1
    - blocked by T4
    - blocked by T7
    - blocked by T10
    - blocked by T11
    - blocked by T12

Generated by Claude Code

Activity

  1. changed the title [-]Wire the redemption decision and each box's declared egress into bep serve[/-] [+]T41 — Wire the redemption decision and each box's declared egress into bep serve[/+] on Oct 21, 2026
  2. added
    kind:taskA task the plan skill rendered; the body carries ## Task
    size:L500 to 900 net lines; one PR, and the ceiling
    model:strongestThe strongest model available: unknown ground, or large work that needs care
    on Oct 21, 2026
  3. minimal-foundry commented on Oct 21, 2026

    @minimal-foundry
    Contributor

    Done. #2486 merged.

    branch agent/2483-wire-the-redemption-decision-and-each-box-s-decl · epic #1501 · PR #2486

    round outcome job
    1 refused: T41 is blocked by still-open #2273. The plan's order is the point of having one.
    1 pushed 3b7b6452
    2 pushed afa333e3
    3 pushed 035de36c
    4 pushed d140c095
    5 pushed 9f8d941f

    Updated 2026-10-22T02:32:46.731Z.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind:taskA task the plan skill rendered; the body carries ## Taskmodel:strongestThe strongest model available: unknown ground, or large work that needs caresize:L500 to 900 net lines; one PR, and the ceiling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0