I3185 — A request on a host with two Majordomus versions reaches the one whose protocol satisfies it, or is refused with a reason
From the host inventory and each runtime's negotiated protocol range and capability set, answer which runtime a client should attach to for a given repository and request, deterministically, and refuse an incompatible pair with a typed reason.
BLOCKED wave 2 · 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 I3184, I3177, milestone:the-host-knows-its-runtimes are done. The status is derived from that, not declared.
Objective
From the host inventory and each runtime's negotiated protocol range and capability set, answer which runtime a client should attach to for a given repository and request, deterministically, and refuse an incompatible pair with a typed reason.
Why
Slice 02 of the 10-12 resident design; I2163 already refuses a silent attach across versions for one checkout, this extends the judgement to the host. Proposed in ADR 0205 (What a runtime can do is a set of separately evidenced facts, and detection never authorises) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c240#5.
Current state
Verified: I2163 DONE (one checkout); no host-level routing answer.
Desired state
runtimes route answers runtime + reason; the UI shows it as a compatibility table.
Scope
- apps/majordomus-cli/src/capability/builtin/server.rs
- apps/majordomus-cli/src/ui/dashboard.rs
- apps/majordomus-cli/src/ui/mod.rs
Out of scope
- Proxying traffic between runtimes
Dependencies
- I3184BLOCKED One command lists every Majordomus runtime of this user on this host, with no checkout open
- I3177BLOCKED Two nodes one release apart keep linking, and what the older cannot answer is shown unavailable
Acceptance criteria
- Same registry state, same answer
- An incompatible pair is refused, never downgraded
- The change writes test_host_route_is_deterministic, and its validation then runs it, not only majordomus plan validate.
- /ui shows the routing answer as a compatibility table derived from the same capability.
Validation
- majordomus plan validate
- cargo test --lib capability::builtin::server
Evidence required
- test_host_route_is_deterministic
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/I3185.yaml. Read it back with majordomus plan show I3185.