Repository navigation
Closed
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largesize:M200 to 500 net lines; one PR200 to 500 net lines; one PR
Description
Task
| slice | size | difficulty | model | who | estimated lines |
|---|---|---|---|---|---|
| macOS names open | M | needs care | standard | an agent | 480 (300 code, 180 tests) |
Activating a box whose
--ingressport another box or a host program already holds fails with the port and the holder named, andmin lsshows no box.
Covers:
- NET-144
Layers:
- daemon:
- crates/minimald/src/box_actor/setup.rs: finalize binds the declared ingress forwards before it writes the record
Active, and a bind that fails fails the finalize, so the client's activate cleanup destroys the box; today the forwards bind only at the first attach and the box activates with the port dead - crates/minimald/src/net/gvproxy_network.rs:
finish_own_ip_attachreturns the failed port and its holder instead of a bare io error - crates/minimald/src/net/policy.rs:
apply_ingressnames the holder: the box whose publish stands at that address and port, read from the hostname registry, or the host when none does - crates/minimald/src/net/dns.rs: a declared port that another box already holds at the shared
127.0.0.1fallback is a refusal at activation, not a yielded port; a host-address box sharing its node's address keeps the shared-address rule - crates/minimald/src/box_actor/tests.rs: a box whose declared port is held by a host listener, and one whose port another box holds at the fallback, both fail activation and leave no record
cargo nextest run -p minimald activation_refused_when_declared_port_is_held
- crates/minimald/src/box_actor/setup.rs: finalize binds the declared ingress forwards before it writes the record
- client:
- crates/minimald-rpc/src/lib.rs: a typed activation refusal carrying the port and the holder
- crates/minimal/src/cmd/session.rs: prints the refusal text in the diagnostics line and exits non-zero
cargo nextest run -p minimal activate_refusal_names_port_and_holder
Waits on:
Plan block
### T100 — Activation refuses a declared port that something else holds
slice: S0
kind: task
covers: NET-144
size: M
est: 300 code, 180 tests
executor: agent
difficulty: needs care
model: standard
diagnostics: the refusal itself is what a person reads: `min session activate` exits non-zero and prints "Port <port> is already in use on this machine by box <other-box>." or, when no box holds it, "Port <port> is already in use on this machine by a program outside Minimal.", then "Choose another host port in --ingress (for example --ingress <port+1>:<box-port>) or in [network] ingress in minimal.toml.", pinned by activation_refused_when_declared_port_is_held and activate_refusal_names_port_and_holder
observability: one warn line in the daemon log per refused activation with the session id, the port, the address and the holder (`box:<name>` or `host`)
layers:
- daemon:
- crates/minimald/src/box_actor/setup.rs: finalize binds the declared ingress forwards before it writes the record `Active`, and a bind that fails fails the finalize, so the client's activate cleanup destroys the box; today the forwards bind only at the first attach and the box activates with the port dead
- crates/minimald/src/net/gvproxy_network.rs: `finish_own_ip_attach` returns the failed port and its holder instead of a bare io error
- crates/minimald/src/net/policy.rs: `apply_ingress` names the holder: the box whose publish stands at that address and port, read from the hostname registry, or the host when none does
- crates/minimald/src/net/dns.rs: a declared port that another box already holds at the shared `127.0.0.1` fallback is a refusal at activation, not a yielded port; a host-address box sharing its node's address keeps the shared-address rule
- crates/minimald/src/box_actor/tests.rs: a box whose declared port is held by a host listener, and one whose port another box holds at the fallback, both fail activation and leave no record
test: cargo nextest run -p minimald activation_refused_when_declared_port_is_held
- client:
- crates/minimald-rpc/src/lib.rs: a typed activation refusal carrying the port and the holder
- crates/minimal/src/cmd/session.rs: prints the refusal text in the diagnostics line and exits non-zero
test: cargo nextest run -p minimal activate_refusal_names_port_and_holder
produces:
- crates/minimald-rpc/src/lib.rs
consumes: none
depends on:
- blocked by #2688
proof: Activating a box whose `--ingress` port another box or a host program already holds fails with the port and the holder named, and `min ls` shows no box.
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:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largesize:M200 to 500 net lines; one PR200 to 500 net lines; one PR
Activity
minimal-foundry commentedon Oct 28, 2026
Done. #2725 merged.
branch
agent/2703-activation-refuses-a-declared-port-that-somethin· epic #1437 · PR #272539a081397c5531ba36efcf2aUpdated 2026-10-29T00:38:54.592Z.