I4013 — A server bound to every interface advertises the addresses it has now
A server bound to 0.0.0.0 reads its interface addresses again before every beacon it signs (Beacon::follow), so that its advertisement follows a DHCP move instead of naming the address it held when it started.
BLOCKED wave 0 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until milestone:mesh-connectivity is done. The status is derived from that, not declared.
Objective
A server bound to 0.0.0.0 reads its interface addresses again before every beacon it signs (Beacon::follow), so that its advertisement follows a DHCP move instead of naming the address it held when it started.
Why
On 2026-10-23 the hub of the owner's MacBook-2 advertised 192.168.100.96:8791 after DHCP had moved the machine to .100, and it had not advertised its tailnet address at all. No other machine could dial it until it was restarted by hand; after the restart it advertised .100 and the tailnet address.
Current state
shared.rs derives the advertised endpoints once, at activation; Beacon keeps them for its lifetime.
Desired state
A beacon built for a server bound to every interface reads advertised_endpoints again before each envelope; an empty reading keeps the last endpoints; a specific bind or a hosted hub's --advertise URL stays fixed.
Scope
- apps/majordomus-cli/src/mesh/provider.rs
- apps/majordomus-cli/src/mesh/manager.rs
- apps/majordomus-cli/src/shared.rs
- .ai/repo/project/issues/I4013.yaml
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A followed beacon signs the endpoints its source answers now
- An empty answer keeps the last endpoints
- Only a server bound to the unspecified address follows its interfaces
Validation
- cargo test --doc mesh::provider
- cargo test --lib shared::
Evidence required
- only_a_server_bound_to_every_interface_follows_them
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I4013.yaml. Read it back with majordomus plan show I4013.