Repository navigation
Closed
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:strongestThe strongest model available: unknown ground, or large work that needs careThe strongest model available: unknown ground, or large work that needs caresize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Description
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
- crates/bep/src/publish.rs: the published identity carries the root's 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_boxover the proxy's control socket with the box id, its declared egress and itsown_iporhost_ipstance (T41) - crates/bep/src/main.rs: drops the "no creator registers a box's declared egress" sentence from the
bep servestartup warning and the matching interim comment inwire, 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_rootcargo nextest run -p minimal grant_box_registers_its_declared_egress_with_the_proxy
- 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
- 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
- crates/boxes/src/core/bep.rs: the defined error
- e2e:
- scripts/session-e2e.sh: adds the case
./scripts/session-e2e.sh bep_second_box_needs_no_sign_in
Waits on:
- T2 — Hold the proxy's keys non-exportable in the host keychain and publish their public halves #2259
- T7 — Verify signed handles against the client's registered key and the current rule #2270
- T10 — Accept only box connections and terminate TLS for the module's hosts over HTTP/1.1 #2271
- T12 — Sign in to GitHub with min auth and keep the sign-in in one keychain item #2263
- T13 — Refuse GitHub grants at activation that the box or the un-enrolled host cannot honour #2264
- T41 — Wire the redemption decision and each box's declared egress into bep serve #2483
- assumes OQ3 (the mint reads the root's validity end from the published identity, and the root is generated with a fixed default validity in one constant that gominimal/arch#85's ruling replaces)
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
Reacted by minimal-foundry
Metadata
Metadata
Assignees
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:strongestThe strongest model available: unknown ground, or large work that needs careThe strongest model available: unknown ground, or large work that needs caresize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Activity
2 remaining items
norrietaylor commentedon Oct 21, 2026
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 ofcmd/session.rs; the deliver layer now lists everyBoxConfigfull literal in the tree (create.rsunder the mint layer, anddash/rpc.rs,tests.rs,task.rs,tests/cli.rs,minimald-rpc/src/tests.rs,minimald/src/box_manager/tests.rs,minvmd/examples/exec.rsand the fourminvmd/tests/*_integration.rsfiles 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-humanremoved so the task re-dispatches.Generated by Claude Code
norrietaylor commentedon Oct 21, 2026
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
BoxConfigis now spelled as a full literal only inminimald-rpc/src/lib.rs(the constructor),minimald-rpc/src/tests.rsandminimald/src/box_manager/tests.rs;create.rs,dash/rpc.rs,minimal/src/tests.rs,minvmd/examples/exec.rsand theminvmdintegration tests go through the constructor and need no edit. The deliver layer now names those three files plusbox_runtime.rsandsession-e2e.sh, nine layer files in all, and the estimate is back to the plan's 380 code lines.Generated by Claude Code
norrietaylor commentedon Oct 22, 2026
One more layer line, so that T41's arch condition has an owner: at creation,
cmd/boxes/create.rsalso sendsregister_boxover the proxy's control socket with the box id, its declared egress and itsown_iporhost_ipstance (#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
docs(bep): name the box egress creators in the serve warning
[-]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[/+]norrietaylor commentedon Oct 22, 2026
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-humanremoved so the task re-dispatches once T41 (#2483) lands.Generated by Claude Code
feat(bep): wire the redemption decision and each box's declared egres…