Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I0904

The listen address is one fact with two projections

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
2
Waiting on
none
Holds back
Behind it in all
20
Evidence
3 of 3
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I0904

majordomus plan verify I0904

majordomus plan done I0904

What it is

Objective
Make the deployment bind an externally reachable interface on the port the canonical object declares, without changing the loopback default that local use depends on, and without the port existing as a literal in more than one place.
Why
A server bound to 127.0.0.1 inside a Machine is unreachable, and the usual repair is to hardcode 0.0.0.0:8080 in three files. The port is a fact of the deployment object; the container, the provider configuration and the process must all read the same one.
Now
bind() defaults to loopback and warns when the bound address is not loopback, because a non-loopback bind exposes this repository's layer to every host that can reach the interface. The default port is a constant in cli.rs.
Wanted
Local invocation is unchanged. A hosted process binds the declared address deliberately, the warning stays for the accidental case, and the port appears once as canonical data.
Done when
unknown: the record declares no `completion`
Risk
Weakening the loopback default for everyone would expose local repositories on shared networks. The hosted path must be an explicit mode, not a lowered default.

Acceptance

  • The deployment port is stated once in the canonical object and consumed by the process, the container projection and the provider configuration
  • The local default remains loopback and the existing warning still fires for an unintended non-loopback bind
  • A hosted bind is expressed as intent rather than by suppressing the warning
  • A test proves the hosted configuration binds a reachable address and the local default does not
Validation
cargo test --workspace --all-featuresbash test/run.sh
Evidence required
single_port_sourcehosted_bindlocal_default_unchanged
Evidence present
single_port_sourcehosted_bindlocal_default_unchanged

Scope

Touches
apps/majordomus-cli/src/http/server.rsapps/majordomus-cli/src/commands/serve.rsapps/majordomus-cli/src/cli.rs
Not
Graceful shutdown, which is I0906Any change to what the server serves
Depends on
Priority
p0
Profile
implementation
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-09-06
Updated
2026-10-14T09:04:57Z
Started
2026-10-14T09:04:46Z
Verified
unknown: the record declares no `verified_at`
Completed
2026-10-14T09:04:57Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.