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

I2720

majordomus self update re-runs the published installer, and never reimplements it

Where it stands

devtask.issue
Readiness
ready no dependency and no gate holds it; nobody has started it
Status
READY
Can start
startable
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
Behind it in all
3
Evidence
0 of 2
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 I2720

majordomus plan verify I2720

majordomus plan done I2720

What it is

Objective
Give every installation one typed command that reports and applies an upgrade to the stable release by running the published install.sh with --version and the installation's own prefix, so the download, verification and swap exist once.
Why
ADR 0161 (owner decision of 2026-10-14) makes a mesh node follow the published release. docs/DISTRIBUTION.md left open whether a self-update reimplements the installer in Rust or re-runs it; ADR 0161 decides it re-runs it, because the installer's digest and size check and its atomic launcher rename are the tested risky part (case 85).
Now
There is no self-update command; a person reruns install.sh with --version on each machine.
Wanted
A capability self.update with --check (current version, the stable pointer's version, whether an upgrade applies, forward-only and stable-only verdict) and --apply (runs the installer the installation's share/distribution.yaml names, with --version <tag> and the installation's prefix, and reports the installed version read back from the new launcher). It refuses a downgrade, a pre-release and a version the metadata does not list.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • self update --check names the running and the stable version and whether an upgrade applies, without a network write
  • self update --apply installs the stable release through install.sh and the new launcher reports it
  • A downgrade, a pre-release and an unlisted version are refused with the reason
Validation
bin/majordomus plan validateMJ_TEST_JOBS=4 bash test/run.sh 85_installer <the case this issue adds>
Evidence required
self_update_wraps_installer_testself_update_refuses_downgrade_test
Evidence present
unknown: the record carries no `evidence` entries

Scope

Touches
apps/majordomus-cli/src/capability/builtinapps/majordomus-cli/src/releaseshare/commands.yamldocs/DISTRIBUTION.mddocs/CLI.mdtest/cases
Not
A second implementation of download, verification or swapActivating the new version in a running server (I2722, I2163)
Depends on
none
Priority
p0
Profile
implementation
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-10-14
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

LevelCodeMessageReproduce
WARNscope_conflictshares test/cases with I2723; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2731; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2734; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src/capability/builtin with I2740; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2742; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2747; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2760; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2786; they may not run concurrentlymajordomus plan validate