I3184 — One command lists every Majordomus runtime of this user on this host, with no checkout open
Add a host-scoped read that enumerates the servers of every repository this user runs (from their leases, found through a disposable per-user cache of checkout roots beside node.json and, for runtimes that predate it, the process table), with version, repository identity, checkout, port and node, and serve it from the CLI without a server and from any running server's API.
BLOCKED wave 0 · p3 · implementation profile · parallel safe
Part of the-host-knows-its-runtimes — A host knows every Majordomus runtime it runs, with no project open.
Blocked. This issue cannot start until milestone:the-host-knows-its-runtimes is done. The status is derived from that, not declared.
Objective
Add a host-scoped read that enumerates the servers of every repository this user runs (from their leases, found through a disposable per-user cache of checkout roots beside node.json and, for runtimes that predate it, the process table), with version, repository identity, checkout, port and node, and serve it from the CLI without a server and from any running server's API.
Why
Slice 01 of the 10-12 resident design, without the daemon: a host inventory is the first thing a resident would do, and it needs no process of its own. Critique 10-18: an index that servers register in would be a new registry (project.no-new-nouns, ADR 0199, the milestone's non_scope), and it would miss released runtimes that never register. Proposed in ADR 0199 (A hub is a declared host service; a working checkout's server stays a client's child) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c240#5.
Current state
Verified: majordomus server lists one repository's servers; leases are per checkout under .ai/local/state; no per-user index exists.
Desired state
majordomus runtimes --host answers in a directory outside every repository.
Scope
- apps/majordomus-cli/src/capability/builtin/server.rs
- apps/majordomus-cli/src/lease.rs
- apps/majordomus-cli/src/mesh/identity.rs
- docs/MCP.md
- docs/MESH.md
- README.md
Out of scope
- Starting or stopping another repository's server
- Holding peers or nodes: mesh/registry.rs stays the only holder of peers
- Any index row treated as truth rather than as a cache of a lease
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- Two servers of two repositories on one host are both listed from /tmp
- A stale index entry whose process is gone is listed stale, never as live
- The index is a disposable cache of checkout roots in the directory beside node.json ($XDG_STATE_HOME/majordomus, else ~/.local/state/majordomus, per mesh/identity.rs). Every row is re-read from that checkout's lease, and deleting the cache loses nothing but speed.
- Runtimes that predate the index (0.29.0 and earlier) are found from the process table by executable path, the way scripts/reap-orphans identifies serve and mcp processes, and are listed with the version their executable reports.
- The case starts one server that never writes to the index and proves it is listed.
- In the same change, the intent criterion host-lists-its-runtimes records evidence: test with a ref to the case allocated with scripts/case-numbers.
- README's 'not a daemon' statement stays true and says the inventory needs no process of its own.
Validation
- majordomus plan validate
- cargo test --lib lease
Evidence required
- case_a_host_lists_its_runtimes
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/I3184.yaml. Read it back with majordomus plan show I3184.