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

I0914

One deployment core, one command, and a dry run that mutates nothing

Where it stands

devtask.issue
Readiness
cancelled withdrawn
Status
CANCELLED
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
4
Waiting on
Holds back
Behind it in all
7
Evidence
0 of 4
In the waySubjectDetail
issueI0909I0909 is not DONE
issueI0913I0913 is not DONE
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 I0914

majordomus plan verify I0914

majordomus plan done I0914

What it is

Objective
Implement the deployment operations — validate, plan, generate, build, status, deploy, smoke — once in the typed core, expose them through thin adapters, and provide one ergonomic command that performs the whole sequence safely and can be asked to change nothing.
Why
Deployment logic spread across a script, a workflow, a Makefile target and an entrypoint means four places each knowing half the truth. One core with thin adapters is the same rule the capability registry already enforces for everything else.
Now
Nothing performs any deployment step. Every operation named here does not exist.
Wanted
The core owns the semantics, the CLI is an adapter, CI calls the same core, and a dry run reports exactly what a real run would do without touching the provider.
Done when
Cancelled 2026-10-14 on master e28daccd9b: its steps are deploy, wait for health and assert the Machine inventory on Fly; the provider-neutral part is deploy.check and generate --check, which exist. The owner disconnected Fly.io on 2026-10-12; this repository deploys release binaries, the GHCR image and GitHub Pages (commit 9af3fa65a4 removed fly.toml).
Risk
A single command that does everything is also a single command that does something unintended. The dry run and the read-only operations are what make it safe to run without reading its source first.

Acceptance

  • The sequence is validate, verify projections, preflight credentials and configuration, build, deploy, wait for health, assert the machine inventory, run the smoke suite, publish a summary — and a failure at any step stops the ones after it
  • A dry run performs no mutation and reports the same plan the real run would execute
  • Plan and doctor are read-only, and repeated runs without a source change converge rather than creating new resources
  • Failures name the source of truth, the observed state and the command that repairs it, rather than reporting that deployment failed
  • No token value can appear in any output, including verbose and error paths
Validation
cargo test --workspace --all-featuresmajordomus deploy --dry-run
Evidence required
core_operationsdry_runone_commandactionable_failures
Evidence present
unknown: the record carries no `evidence` entries

Scope

Touches
apps/majordomus-cli/src/deploy/core.rsapps/majordomus-cli/src/commands/deploy.rs
Not
Deployment logic in a shell script beyond thin adaptationInteractive prompts in a non-interactive pathCreating a new application on every invocation
Depends on
Priority
p0
Profile
deep-work
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-14
Started
unknown: the record declares no `started_at`
Verified
unknown: the record declares no `verified_at`
Completed
unknown: the record declares no `completed_at`

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.