8000 T14 — Mint a sealed sign-in reference for each GitHub grant and register the box with the proxy · Issue #2273 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T14 — Mint a sealed sign-in reference for each GitHub grant and register the box with the proxy #2273

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 720 (360 code, 360 tests)

A grant box is created with no prompt, each grant's sealed value is minted under the client's key with the root's expiry, and the proxy holds the box's declared egress.

Covers:

  • BEP-003
  • BEP-005

Layers:

  • publish:
    • crates/bep/src/publish.rs: the published identity carries the root's validity end (root_not_after), the root key's creation time plus the fixed default validity in one constant (OQ3), until gominimal/arch#85 rules otherwise
    • cargo nextest run -p bep published_identity_carries_the_root_validity_end
  • mint:
    • crates/minimal/src/mint.rs (new): the BEP-005 sign-in reference under the client's key, registered over the control socket, sealed from the published identity, with the member's expiry read from the identity's root_not_after
    • crates/minimal/src/lib.rs: module line
    • crates/minimal/src/tests.rs: the mint and registration tests
    • crates/minimal/src/cmd/boxes/create.rs: refuses creation with no sign-in held and never prompts; mints and seals per grant; sends register_box over the proxy's control socket with the box id, its declared egress and its own_ip or host_ip stance (T41)
    • crates/bep/src/main.rs: drops the "no creator registers a box's declared egress" sentence from the bep serve startup warning and the matching interim comment in wire, since this task is the create half of that flip (the destroy half is T20)
    • cargo nextest run -p minimal local_member_is_a_sign_in_reference_expiring_with_the_root
    • cargo nextest run -p minimal grant_box_registers_its_declared_egress_with_the_proxy
  • refuse:
    • crates/boxes/src/core/bep.rs: the defined error github_sign_in_required
    • cargo nextest run -p boxes creation_without_sign_in_fails_with_defined_error
  • e2e:
    • scripts/session-e2e.sh: adds the case
    • ./scripts/session-e2e.sh bep_second_box_needs_no_sign_in

Waits on:

Split on 2026-10-22 at the person's decision, after two no-ops: delivery into the box is T42, and this task keeps the mint, the refusal and the box's registration with the proxy. The runtime's second blocker, that the mint has no root certificate to read, is met by the publish layer: the identity file carries the root's validity end. The layers are the babysitter's cut and the planner may re-cut them.

Plan block
### T14 — Mint a sealed sign-in reference for each GitHub grant and register the box with the proxy
  slice: S0
  kind: task
  covers: BEP-003, BEP-005
  size: L
  est: 360 code, 360 tests
  executor: agent
  difficulty: needs care
  model: strongest
  diagnostics: creating a grant box with no sign-in held exits with code `github_sign_in_required` and prints "This box declares a GitHub grant, and no GitHub sign-in is held on this machine. Run `min auth login`, then create the box again." on stderr, pinned by creation_without_sign_in_fails_with_defined_error
  observability: one info log line per mint naming the box id, the module and the member's expiry, never the handle or the sealed value; one debug line per `register_box` naming the box id and the count of its declared authorities
  layers:
    - publish:
      - crates/bep/src/publish.rs: the published identity carries the root's validity end (`root_not_after`), the root key's creation time plus the fixed default validity in one constant (OQ3), until gominimal/arch#85 rules otherwise
      test: cargo nextest run -p bep published_identity_carries_the_root_validity_end
    - mint:
      - crates/minimal/src/mint.rs (new): the BEP-005 sign-in reference under the client's key, registered over the control socket, sealed from the published identity, with the member's expiry read from the identity's `root_not_after`
      - crates/minimal/src/lib.rs: module line
      - crates/minimal/src/tests.rs: the mint and registration tests
      - crates/minimal/src/cmd/boxes/create.rs: refuses creation with no sign-in held and never prompts; mints and seals per grant; sends `register_box` over the proxy's control socket with the box id, its declared egress and its `own_ip` or `host_ip` stance (T41)
      - crates/bep/src/main.rs: drops the "no creator registers a box's declared egress" sentence from the `bep serve` startup warning and the matching interim comment in `wire`, since this task is the create half of that flip (the destroy half is T20)
      test: cargo nextest run -p minimal local_member_is_a_sign_in_reference_expiring_with_the_root
      test: cargo nextest run -p minimal grant_box_registers_its_declared_egress_with_the_proxy
    - refuse:
      - crates/boxes/src/core/bep.rs: the defined error `github_sign_in_required`
      test: cargo nextest run -p boxes creation_without_sign_in_fails_with_defined_error
    - e2e:
      - scripts/session-e2e.sh: adds the case
      test: ./scripts/session-e2e.sh bep_second_box_needs_no_sign_in
  produces:
    - crates/minimal/src/mint.rs
  consumes:
    - crates/bep/src/signin.rs
    - crates/bep/src/handle.rs
    - crates/bep/src/publish.rs
    - crates/bep/src/control.rs
    - crates/boxes/src/core/bep.rs
  proof: A grant box is created with no prompt, each grant's sealed value is minted under the client's key with the root's expiry, and the proxy holds the box's declared egress.
  depends on:
    - blocked by T2
    - blocked by T7
    - blocked by T10
    - blocked by T12
    - blocked by T13
    - blocked by T41
    - assumes OQ3

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. 2 remaining items

  3. norrietaylor commented on Oct 21, 2026

    @norrietaylor
    MemberAuthor

    Layers amended by the babysitter under the person's standing rule for stale-layer no-ops (ruled 2026-10-21): the mint layer now names crates/minimal/src/cmd/boxes/create.rs, where box creation and the grant check moved under spec 29, in place of cmd/session.rs; the deliver layer now lists every BoxConfig full literal in the tree (create.rs under the mint layer, and dash/rpc.rs, tests.rs, task.rs, tests/cli.rs, minimald-rpc/src/tests.rs, minimald/src/box_manager/tests.rs, minvmd/examples/exec.rs and the four minvmd/tests/*_integration.rs files under deliver); the estimate rises to 440 code lines. The no-op note's third fact was truncated in the status comment: if it still blocks the work, say what it is in the next status. needs-human removed so the task re-dispatches.


    Generated by Claude Code

  4. removed
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 21, 2026
  5. norrietaylor commented on Oct 21, 2026

    @norrietaylor
    MemberAuthor

    Layers amended again: the runtime refused the first amendment at 18 layer files, above its cap of 10. T55 (#2480) landed the shared create-request constructor on main in the meantime, so BoxConfig is now spelled as a full literal only in minimald-rpc/src/lib.rs (the constructor), minimald-rpc/src/tests.rs and minimald/src/box_manager/tests.rs; create.rs, dash/rpc.rs, minimal/src/tests.rs, minvmd/examples/exec.rs and the minvmd integration tests go through the constructor and need no edit. The deliver layer now names those three files plus box_runtime.rs and session-e2e.sh, nine layer files in all, and the estimate is back to the plan's 380 code lines.


    Generated by Claude Code

  6. added
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 21, 2026
  7. norrietaylor commented on Oct 22, 2026

    @norrietaylor
    MemberAuthor

    One more layer line, so that T41's arch condition has an owner: at creation, cmd/boxes/create.rs also sends register_box over the proxy's control socket with the box id, its declared egress and its own_ip or host_ip stance (#2486 gives the socket and the request; Gatehouse §6.10 line 823 makes the declared egress the single reachability authority, so until a creator registers the box the proxy refuses every request from it). The destroy side, forget_box, goes to T20 #2277 beside its revocation submission.


    Generated by Claude Code

  8. changed the title [-]T14 — Mint a sealed sign-in reference for each GitHub grant and deliver it into the box[/-] [+]T14 — Mint a sealed sign-in reference for each GitHub grant and register the box with the proxy[/+] on Oct 22, 2026
  9. norrietaylor commented on Oct 22, 2026

    @norrietaylor
    MemberAuthor

    Split at the person's decision (2026-10-22) after the second no-op. This task keeps the mint, the refusal and the box's registration with the proxy; delivery into the box is T42 (#2488), which waits on this one. The runtime's second blocker, that the mint has no root certificate to read, is met by a publish layer: the identity file gains the root's validity end (root_not_after), the root key's creation time plus the fixed default validity in one constant, which is what OQ3 assumed and what gominimal/arch#85's ruling will replace. The layers are the babysitter's cut; dispute any line in the status note. needs-human removed so the task re-dispatches once T41 (#2483) lands.


    Generated by Claude Code

  10. removed
    needs-humanAn agent handed off; a human must act, then clear this label. Set by defer and handoffs.
    on Oct 22, 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