8000 T16 — Put the interception root in the box's trust store · Issue #2274 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T16 — Put the interception root in the box's trust store #2274

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 standard an agent 750 (330 code, 420 tests)

A grant box has the root in both trust-store forms, and a box with no grant has none.

Covers:

  • BEP-011

Layers:

  • carry:
    • crates/boxes/src/lib.rs: Record.root_certificate, the proxy's root certificate PEM beside sealed_deliveries, so every host launch of the box reads it, after a daemon restart included (stale layers found by the coder on 2026-10-22; the record fixtures are struct-literal additions)
    • crates/minimald/src/box_manager.rs: the record build copies config.root_certificate from the create request
    • crates/minimald/src/box_manager/tests.rs: the record test
    • crates/minimald/src/box_runtime/launcher.rs: the launch hands the record's root certificate to EnvArgs, so Env::build writes the box's bundle copy and hashed directory
    • cargo nextest run -p minimald record_carries_the_root_certificate_to_the_launch
  • trust:
    • crates/minimald/src/env.rs: the root in the box's own bundle copy and hashed directory, per BEP-011, never the package store's copy
    • crates/minimald/src/box_runtime.rs: the trust variables of BEP-011
    • crates/minimald/src/box_runtime/tests.rs: the trust-variable tests
    • scripts/session-e2e.sh: adds three cases
    • ./scripts/session-e2e.sh bep_root_ca_present_in_box_trust_store
    • ./scripts/session-e2e.sh bep_root_ca_absent_from_box_without_credentialed_upstream
    • ./scripts/session-e2e.sh bep_trust_env_points_at_bundle_and_root
  • spec:
    • crates/boxes/src/core/bep.rs: the warning for a spec that sets a trust variable
    • cargo nextest run -p boxes spec_trust_env_shadows_platform_with_warning

Waits on:

Plan block
### T16 — Put the interception root in the box's trust store
  slice: S0
  kind: task
  covers: BEP-011
  size: L
  est: 330 code, 420 tests
  executor: agent
  difficulty: needs care
  model: standard
  diagnostics: a box spec that sets one of the three trust variables itself keeps its value and activation prints "This box sets <variable> itself, so tools that read it will not trust the proxy's certificate." on stderr, pinned by spec_trust_env_shadows_platform_with_warning
  observability: one debug log line per box naming whether the root was injected
  layers:
    - carry:
      - crates/boxes/src/lib.rs: `Record.root_certificate`, the proxy's root certificate PEM beside `sealed_deliveries`, so every host launch of the box reads it, after a daemon restart included (stale layers found by the coder on 2026-10-22; the record fixtures are struct-literal additions)
      - crates/minimald/src/box_manager.rs: the record build copies `config.root_certificate` from the create request
      - crates/minimald/src/box_manager/tests.rs: the record test
      - crates/minimald/src/box_runtime/launcher.rs: the launch hands the record's root certificate to `EnvArgs`, so `Env::build` writes the box's bundle copy and hashed directory
      test: cargo nextest run -p minimald record_carries_the_root_certificate_to_the_launch
    - trust:
      - crates/minimald/src/env.rs: the root in the box's own bundle copy and hashed directory, per BEP-011, never the package store's copy
      - crates/minimald/src/box_runtime.rs: the trust variables of BEP-011
      - crates/minimald/src/box_runtime/tests.rs: the trust-variable tests
      - scripts/session-e2e.sh: adds three cases
      test: ./scripts/session-e2e.sh bep_root_ca_present_in_box_trust_store
      test: ./scripts/session-e2e.sh bep_root_ca_absent_from_box_without_credentialed_upstream
      test: ./scripts/session-e2e.sh bep_trust_env_points_at_bundle_and_root
    - spec:
      - crates/boxes/src/core/bep.rs: the warning for a spec that sets a trust variable
      test: cargo nextest run -p boxes spec_trust_env_shadows_platform_with_warning
  produces: none
  consumes:
    - crates/minimald-rpc/src/lib.rs
    - crates/boxes/src/core/bep.rs
  proof: A grant box has the root in both trust-store forms, and a box with no grant has none.
  depends on:
    - blocked by #2264
    - blocked by #2273
    - blocked by #2488

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:standardA standard model: work that needs care, or routine work that is large
    on Oct 17, 2026
  2. changed the title [-]T16 — Put the interception root in the box's trust store and point the box at the proxy[/-] [+]T16 — Put the interception root in the box's trust store[/+] on Oct 19, 2026
  3. minimal-foundry commented on Oct 22, 2026

    @minimal-foundry
    Contributor

    Done. #2495 merged.

    branch agent/2274-put-the-interception-root-in-the-box-s-trust-sto · epic #1501 · PR #2495

    round outcome job
    1 pushed 38770fb4
    2 pushed 08393517
    3 pushed 41220e3d
    4 pushed 7fa1b8f8
    5 changed nothing: noop: the branch head d5be668 already does what the note asks. bep_trust_box_files passes the four --allow-dns-hosts flags only when $2 is grant. It activates the plain box with no egress flags, and a6fd1f33

    Updated 2026-10-23T03:17:40.555Z.

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

    @norrietaylor
    MemberAuthor

    Plan amendment by the babysitter (2026-10-22), after the runtime's no-op above.

    The no-op names two gaps. The second, that nothing carries a root certificate to the daemon, is T42 #2488's carry layer: BoxConfig in crates/minimald-rpc/src/lib.rs gains the sealed deliveries and the root certificate there, and this task's trust layer consumes that file. So this task now waits on T42: blocked by #2488 in the plan block here and blocked by T42 in the epic's plan comment, and the GitHub-native blocked-by edge is added.

    The first gap, that the proxy does not issue or publish the root certificate (deferred to #2437 by T2), has no task in the epic yet. needs-human stays until the epic owner decides who owns #2437; the babysitter has put that decision to them.


    Generated by Claude Code

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

    @norrietaylor
    MemberAuthor

    The root-certificate gap now has an owner: #2437 is T43 in the epic plan (issue, publish and hand the root certificate to each grant box), and this task waits on it: blocked by #2437 is the GitHub-native edge beside #2488. The epic owner decided this on 2026-10-22; needs-human is removed so the runtime re-dispatches this task once T42 and T43 land.


    Generated by Claude Code

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

    @norrietaylor
    MemberAuthor

    Layers amended on 2026-10-22 after the coder's second no-op, under the epic's stale-layers rule. The no-op is right: BoxConfig.root_certificate arrives on the create request since T43 landed, but nothing carried it into boxes::Record, so no launch could read it, and Env::build had no caller in the layers that could hand it the root. The plan block and this body now carry a carry layer ahead of trust:

    • crates/boxes/src/lib.rs: Record.root_certificate beside sealed_deliveries, so every host launch reads it, after a daemon restart included. The record fixtures are struct-literal additions, which the layer-exception rule accepts.
    • crates/minimald/src/box_manager.rs and its tests.rs: the record build copies config.root_certificate, pinned by record_carries_the_root_certificate_to_the_launch.
    • crates/minimald/src/box_runtime/launcher.rs: the launch hands the record's root to EnvArgs, so Env::build writes the bundle copy and the hashed directory.

    crates/minimald/src/box_runtime/tests.rs joins the trust layer for the trust-variable tests. The test estimate rises to 420 for the added test line. needs-human is removed so the runtime re-dispatches the task; every blocker is closed.


    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:standardA standard model: work that needs care, or routine work that is largesize: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