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.issueMoves
plan.transitionWhat 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.