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

I1980

A layer names the tool version it was written for, and doctor tells version skew from defects

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
2
Evidence
0 of 3
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 I1980

majordomus plan verify I1980

majordomus plan done I1980

What it is

Objective
Record in .ai/manifest.yaml the tool (or layer) version a layer was last migrated with. doctor then classifies findings that a newer tool raises against an older layer as version skew, naming the migration that clears them, instead of failing as defects. A layer written by a newer tool is refused by an older one with a message, not with a cascade.
Why
OSCILLA 34f967a (#64): installing 0.12.0 machine-wide turned doctor red with 433 failures: 497 unsealed plan stamps in 181 issues, and 135 use-case steps reclassified as state-mutating. Its pre-commit hook runs doctor, so every commit in that repository, including peers', was refused until the layer was migrated by hand. The migrated layer was then rejected by 0.10, so the launcher had to flip first. Neither doctor nor the docs could say that the cause was the upgrade.
Now
At e08aec8651 neither .ai/manifest.yaml (schema ai-repository/v1) nor policy.yaml records a tool version. lib/migrate.sh handles only .majordomus/ to .ai/. docs/INSTALL.md 'Upgrading and reinstalling' says to run the installer again.
Wanted
A manifest key (for example `tool: 0.12`) written by init and by migrate. doctor compares it with its own version: older means findings the new version introduced read as skew with `majordomus migrate --layer`; newer means one clear refusal. INSTALL.md says to migrate on a branch before switching the launcher.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • A fixture layer written for the previous minor version upgraded in place yields doctor output that names version skew and the migrate command, and exits with the skew status the issue defines, not 10 for every finding
  • A layer whose manifest names a newer tool is refused by the older tool with one message naming both versions
  • init writes the version key and migrate advances it
Validation
bin/majordomus plan validateMJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>
Evidence required
version_skew_casenewer_layer_refused_caseinstall_docs_upgrade_step
Evidence present
unknown: the record carries no `evidence` entries

Scope

Touches
share/schemasshare/skeleton.ai/manifest.yamllib/doctor.shlib/migrate.shlib/init.shdocs/INSTALL.mdshare/installtest/cases
Not
unknown: the record declares no `non_scope`
Depends on
unknown: the record declares no `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-10-04
Updated
2026-10-04
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 share/skeleton with I1990; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I1997; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/skeleton with I1999; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2059; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2114; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2282; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/schemas with I2410; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2411; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/skeleton with I2412; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2413; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2653; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/schemas with I2670; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2713; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2714; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2716; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2717; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib/doctor.sh with I2718; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2720; they may not run concurrentlymajordomus plan validate
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 test/cases with I2740; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/schemas 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