8000 T20 — Record a revocation when a live box is destroyed and refuse its values within a minute · Issue #2277 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T20 — Record a revocation when a live box is destroyed and refuse its values within a minute #2277

Closed

Description

@norrietaylor

Task

slice size difficulty model who estimated lines
Revoke a box or sign out L needs care strongest an agent 820 (380 code, 440 tests)

After min session destroy web, a value copied from web is refused within a minute, even if the proxy was down.

Covers:

  • BEP-043
  • BEP-067
  • BEP-071

Layers:

  • proxy:
  • client:
    • crates/minimal/src/mint.rs: submits a mint record per member
    • crates/minimal/src/tests.rs: the mint tests and their stub control servers live here, so the stubs answer the new record_mint and revoke_box requests and the revocation test sits beside them (widened 2026-10-25)
    • crates/minvmd/src/box_registry.rs: on a live box's destroy submits its revocation and sends forget_box over the control socket, so the proxy attributes the id to no live box (T41, T41 — Wire the redemption decision and each box's declared egress into bep serve #2483), completing the destroy when the proxy is down
    • crates/minvmd/src/cmd/run.rs: the supervisor start path sets the proxy control socket on the registry through with_proxy_control, so only the daemon, never a test, sends revocations (widened 2026-10-25 per review finding 4369790164 on feat(bep): record a revocation when a live box is destroyed (T20) #2548)
    • crates/bep/src/main.rs: drops the box-egress interim from the bep serve startup warning and the wire comment if T14 has not already, since this task is the destroy half of that flip
    • cargo nextest run -p minimal mint_and_destroy_append_audit_records
  • e2e:
    • scripts/session-e2e.sh: adds two cases
    • ./scripts/session-e2e.sh bep_destroyed_box_values_refused_within_60s
    • ./scripts/session-e2e.sh bep_destroy_with_proxy_down_refuses_by_attachment

Waits on:

Plan block
### T20 — Record a revocation when a live box is destroyed and refuse its values within a minute
  slice: S1
  kind: task
  covers: BEP-043, BEP-067, BEP-071
  size: L
  est: 380 code, 440 tests
  executor: agent
  difficulty: needs care
  model: strongest
  diagnostics: `min box audit <box>` shows the box's `revocation` record and each later refusal of its values
  observability: one info log line per revocation recorded, naming the box id; one warn line when a destroy completes with the proxy unreachable
  layers:
    - proxy:
      - crates/bep/src/revoke.rs (new): revocations by box id, consulted before any resolution (BEP-071); its module line goes in the crate root beside the other modules
      - crates/bep/src/control.rs: takes mint and revocation submissions and appends them to the one log
      - crates/bep/src/proxy.rs: `AuditWriter::try_write` reports an append failure to `revoke_box`, so a lost revocation record is logged as an error and never silent (widened 2026-10-25 per review finding 4369863226 on #2548)
      - crates/bep/src/redeemer.rs: the interim doc comments say that `revoke_box` on the control socket puts a revocation in force and that the one interim left is the empty set at start until T33 (#2290); `revoked` is built with `crate::revoke::in_force_for` for this box only (widened 2026-10-25 per arch C2 and C3 on #2548)
      test: cargo nextest run -p bep prop_revocation_covers_exactly_its_box
      test: cargo nextest run -p bep revoked_value_never_triggers_renewal
    - client:
      - crates/minimal/src/mint.rs: submits a `mint` record per member
      - crates/minimal/src/tests.rs: the mint tests and their stub control servers live here, so the stubs answer the new `record_mint` and `revoke_box` requests and the revocation test sits beside them (widened 2026-10-25)
      - crates/minvmd/src/box_registry.rs: on a live box's destroy submits its revocation and sends `forget_box` over the control socket, so the proxy attributes the id to no live box (T41, #2483), completing the destroy when the proxy is down
      - crates/minvmd/src/cmd/run.rs: the supervisor start path sets the proxy control socket on the registry through `with_proxy_control`, so only the daemon, never a test, sends revocations (widened 2026-10-25 per review finding 4369790164 on #2548)
      - crates/bep/src/main.rs: drops the box-egress interim from the `bep serve` startup warning and the `wire` comment if T14 has not already, since this task is the destroy half of that flip
      test: cargo nextest run -p minimal mint_and_destroy_append_audit_records
    - e2e:
      - scripts/session-e2e.sh: adds two cases
      test: ./scripts/session-e2e.sh bep_destroyed_box_values_refused_within_60s
      test: ./scripts/session-e2e.sh bep_destroy_with_proxy_down_refuses_by_attachment
  produces:
    - crates/bep/src/revoke.rs
  consumes:
    - crates/bep/src/control.rs
    - crates/minimal/src/mint.rs
  proof: After `min session destroy web`, a value copied from web is refused within a minute, even if the proxy was down.
  depends on:
    - blocked by #2271
    - blocked by #2273
    - blocked by #2276

Generated by Claude Code

Activity

  1. 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 17, 2026
  2. norrietaylor commented on Oct 22, 2026

    @norrietaylor
    MemberAuthor

    One layer line added so that T41's arch condition has an owner: on a live box's destroy, crates/minvmd/src/box_registry.rs also sends forget_box over the proxy's control socket, so the proxy attributes the id to no live box from then on (#2486 gives the socket and the request). The create side, register_box, is T14 #2273's.


    Generated by Claude Code

  3. minimal-foundry commented on Oct 24, 2026

    @minimal-foundry
    Contributor

    Done. #2548 merged.

    branch agent/2277-record-a-revocation-when-a-live-box-is-destroyed · epic #1501 · PR #2548

    round outcome job
    1 pushed 0c3fed88
    2 pushed 92318d86
    3 pushed 56291127
    3 pushed 4617924f
    4 pushed 0e70286a
    5 pushed d5cd0e95
    6 refused: task names 11 layer files, above 10: two tasks
    6 pushed 431f4bd7
    7 pushed e1275242
    7 pushed 6acd8cdc

    Updated 2026-10-25T19:40:02.055Z.

  4. added
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
  5. removed
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
  6. added
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
  7. removed
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
  8. added
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
  9. added
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    and removed
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 24, 2026
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