Skip to content

I1501 — An execution a person starts is an execution the server can see

Make `majordomus-cli run` reach the server that serves this repository, so that the execution plane a surface shows and the execution plane a person uses are the same plane — or record the decision that they are not, and stop every surface from implying otherwise.

DONE wave 0 · p0 · implementation profile · runs alone

Part of development-runtime — The runtime has a development surface.

Objective

Make `majordomus-cli run` reach the server that serves this repository, so that the execution plane a surface shows and the execution plane a person uses are the same plane — or record the decision that they are not, and stop every surface from implying otherwise.

Why

F2 of the audit's failure table, and the one that decides whether an execution history can exist at all. `run` builds a registry in its own process, executes there, streams to its own terminal and exits; the server's execution store is a different store in a different process. Measured rather than read: with a run in flight, the server reported 0 count, 0 active and 0 remembered throughout, and an earlier run that produced a named succeeded execution was never seen by the server either. The consequence is exact — /cockpit/executions can only ever show work started through that server by executions.start, everything a developer actually runs is invisible to it, and docs/EXECUTIONS.md's live channel, which genuinely works and streams frames, is a window onto a plane almost nothing writes to. Combined with non-durability, which the execution module already states as its own decision, the execution history a development surface needs does not exist anywhere today.

Current state

Two disjoint planes. The registry declares executions.start, executions.cancel and executions.events; all three operate on the accepting process's own store. `run` is a CLI path that never contacts a server, and nothing in the output of either side says the other exists.

Desired state

A run either registers with the repository's server, so that one execution history exists, or refuses to imply that it did. Whichever is chosen is stated where a reader of the execution surface meets it, not only in a design document.

Scope

  • apps/majordomus-cli/src/execution
  • apps/majordomus-cli/src/capability/builtin/executions.rs
  • apps/majordomus-cli/src/commands
  • docs/EXECUTIONS.md
  • test/cases

Out of scope

  • A durable queue, retries or a scheduler. The execution module states it has none by decision; convergence of the two planes does not reopen that.
  • Making the server execute on the caller's behalf when no server is running. A checkout with no server must still be able to run a capability.

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • An execution started by the CLI while a server is serving the repository is visible in that server's execution list, or the CLI says plainly that it is not and why
  • The claim is proved by polling the server while a run is in flight, not by reading the source
  • No surface describes an execution history that no writer reaches

Validation

  • bash test/run.sh 100_execution_plane
  • bin/majordomus-cli capabilities validate

Evidence required

  • run_is_visible_to_the_server
  • measured_while_in_flight

Evidence

coverstypecommandresultat commit
run_is_visible_to_the_servertestMJ_TEST_JOBS=2 bash test/run.sh 3024_a_run_is_seen_by_the_server 100_execution_plane 100_environmenttests: 3 passed, 0 failed; case 3024 polls a real server while a CLI run is in flight and finds it, cancels it from the server, and reads the no-server line (run 2026-10-14 16:45Z on master ff3829709616e638596315d6ca42be64b570b74f plus this change)ff38297
measured_while_in_flightmanualserve --port 0; run executions.demonstrate --input '{\"steps\":6,\"delay_ms\":500}' in the background; GET /api/v1/executions 1.5 s in16:46:51Z with the run alive: count 1, active 1, state running, actor {kind: cli, pid: 28239}, progress 2 of 6; after it: succeeded, duration_ms 3203. Before this change the same reading was count 0, active 0 (the issue's own measurement)ff38297

Risk

Medium. Making `run` depend on a server changes the cost and the failure modes of the most-used command in the executable, and a checkout with no server must keep working. The safe shape is that the server is used when one is already serving this repository and never started for a run.

Timeline

started
2026-10-14T16:47:04Z
verified
—
completed
2026-10-14T16:47:12Z

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/I1501.yaml. Read it back with majordomus plan show I1501.

Searches the titles and descriptions of every page this site publishes.