8000 T71 — Amend BEP-063 for client-key revocation, replacement and the registry bound · Issue #2578 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content
8000

T71 — Amend BEP-063 for client-key revocation, replacement and the registry bound #2578

Closed

Description

@norrietaylor

Task

slice size difficulty model who estimated lines
Round-two conditions closed S routine standard an agent 60 (0 code, 60 tests)

Spec 24 states client-key revocation, replacement and the registry bound, each with a verify line that names an existing test.

Covers:

  • BEP-063

Layers:

  • spec:
    • docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md: the BEP-063 sub-requirements and the [NEEDS CLARIFICATION] entry that T71 — Amend BEP-063 for client-key revocation, replacement and the registry bound #2578 lists (revocation by kid, replacement in three steps with the pending-revoke retry, the registry bound, the verify-line move, the rationale at line 475, gominimal/arch#144)
    • cargo nextest run -p minimal a_replaced_client_key_is_revoked_at_the_proxy

Waits on:

Plan block
### T71 — Amend BEP-063 for client-key revocation, replacement and the registry bound
  slice: S10
  kind: task
  covers: BEP-063
  size: S
  est: 0 code, 60 tests
  executor: agent
  difficulty: routine
  model: standard
  diagnostics: none, a spec change
  observability: none: a spec change writes no log line
  layers:
    - spec:
      - docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md: the BEP-063 sub-requirements and the `[NEEDS CLARIFICATION]` entry that #2578 lists (revocation by `kid`, replacement in three steps with the pending-revoke retry, the registry bound, the verify-line move, the rationale at line 475, gominimal/arch#144)
      test: cargo nextest run -p minimal a_replaced_client_key_is_revoked_at_the_proxy
  produces: none
  consumes: none
  proof: Spec 24 states client-key revocation, replacement and the registry bound, each with a verify line that names an existing test.
  depends on:
    - assumes OQ3 (the mint reads the root certificate's own expiry, and the root is generated with a fixed default validity in one constant that gominimal/arch#85's ruling replaces)
    - blocked by #2543

Generated by Claude Code

Activity

  1. minimal-foundry commented on Oct 25, 2026

    @minimal-foundry
    Contributor

    Done. #2594 merged.

    branch agent/2578-amend-bep-063-for-client-key-revocation-replacem · epic #1501 · PR #2594

    round outcome job
    1 pushed 9315e181
    2 pushed 6403919c
    3 pushed 691ab2ea
    4 pushed 421ce19a
    5 pushed 4d514758
    6 pushed d8a7c6a0
    7 pushed 1b3fcf8d
    8 pushed 2ef16c71
    9 pushed e6ea56c4

    Updated 2026-10-26T09:40:56.585Z.

  2. norrietaylor commented on Oct 26, 2026

    @norrietaylor
    MemberAuthor

    The epic owner added this residual to the plan on 2026-10-26 as T71 (slice S10). Its body is now the rendered task. The residual text it replaces is kept below.

    Residual text

    Residual from T63 #2571, arch C1 (ruling), epic #1501. On 2026-10-25 the epic owner accepted that a replacement revokes every other client key, and decided the spec records it.

    docs/specs/24-spec-box-egress-proxy/24-spec-box-egress-proxy.md BEP-063 says nothing about revoking a client key or bounding the registry. Its rationale at line 475 says a replacement needs no operator step.

    What closes this

    BEP-063 gains three sub-requirements:

    • (a) The socket's owner revokes a key by kid with revoke_client_key, and the revocation survives a restart. Verify: cargo nextest run -p bep a_key_removal_survives_a_restart.
    • (b) A keychain refusal sends replace_client_key, which revokes every other client key. Store handles and sign-in references that running boxes hold under the replaced key stop verifying until each box is re-created. Verify: cargo nextest run -p minimal a_replaced_client_key_is_revoked_at_the_proxy.
    • (c) The registry holds at most KeyBound::max_keys keys. Verify: cargo nextest run -p bep the_registry_never_holds_more_keys_than_its_bound.

    Also:

    • The verify line of the keychain-refusal sub-requirement (spec line 473) moves from -p bep a_client_key_this_program_is_refused_is_replaced to the -p minimal replacement test.
    • The rationale at line 475 says that, after a replacement, running boxes need re-creation.
    • The three sub-requirements are written as an EARS requirement after BEP-063 (arch C1 at 6427cb2, ruling).
    • A [NEEDS CLARIFICATION] entry sits beside the gominimal/arch#85 entry (spec line 1066). It says a replacement ends the store references of running boxes signed under the old key, and that Gatehouse §6.10 line 839 does not list this as a re-creation cause. It links gominimal/arch#144.
    • The keychain refusal codes include userCanceled (128), so a cancelled keychain prompt also starts the revocation. The requirement says so.
    • The replacement runs in three steps in local_client_key_at (arch C1 at f0cb49e and 6e651d2): register the new key, store it, then revoke the other keys. A failed store revokes nothing.
    • A failed revoke after the store leaves a pending-revoke file (<control>.revoke-pending) naming the new key, and the next creation that finds that key retries the revoke. If writing that file fails, a warn line is logged and a later revoke failure is not retried; the replaced keys stay registered until the bound drops them.
    • The replacement and its retry run under an exclusive lock (<control>.replace-lock), so two creations that both meet a refusal keep one key.
    • The T63 proof that a handle under a replaced key is refused holds once the revoke step succeeds.

    Generated by Claude Code

  3. changed the title [-]Amend BEP-063 for client-key revocation, replacement and the registry bound[/-] [+]T71 — Amend BEP-063 for client-key revocation, replacement and the registry bound[/+] on Oct 26, 2026
  4. added
    kind:taskA task the plan skill rendered; the body carries ## Task
    size:SUnder 200 net lines; one PR
    model:standardA standard model: work that needs care, or routine work that is large
    and removed on Oct 26, 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:standardA standard model: work that needs care, or routine work that is largesize:SUnder 200 net lines; one PR

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0