a-version-follows-the-work — Landed work is released as a measured version, and how long it has waited is a finding
One capability, release.currency, answers how much landed work the trunk holds past the last release, since when, and which version the contract requires for it. The brief, doctor and /ui/delivery read it. A task holding the release seat cannot finish completed once that work has waited past its threshold. project.land-and-publish names the capability's case as its proof.
PLANNED 0 of 4 issues done
- ready
- 1
- blocked
- 3
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
The owner's order of 2026-10-19 is a new measured version of majordomus.dev after every session and every milestone, as often as possible, enforced. The cooperation model already says the release seat releases whenever master holds landed work past the last tag (project.the-cooperation-model-is-the-owners-word, rule 4), and the version is measured from the public contract (ADR 0051). Nothing measures that rule, though. Master can hold a day of landed work past the last release while every check, the brief, doctor and the delivery screen stay green. publication-currency asks whether the site serves the trunk, not whether the trunk was released.
Outcome
One capability, release.currency, answers how much landed work the trunk holds past the last release, since when, and which version the contract requires for it. The brief, doctor and /ui/delivery read it. A task holding the release seat cannot finish completed once that work has waited past its threshold. project.land-and-publish names the capability's case as its proof.
Scope
- apps/majordomus-cli/src/release
- apps/majordomus-cli/src/capability/builtin/release.rs
- apps/majordomus-cli/src/capability/builtin/brief.rs
- apps/majordomus-cli/src/ui/delivery.rs
- lib/doctor.sh
- .ai/repo/rules/project/land-and-publish.v1.md
- docs/RELEASE.md
Out of scope
- Cutting releases: that stays the release seat's act, through the pipeline it already runs
- Committing the answer into site data: it reads refs, and committed derived data must not
Acceptance criteria
- release.currency answers the last release, the landed commits past it with the oldest one's age, and the version the contract requires, on the command line, HTTP and MCP
- The brief and doctor warn once landed work is past the last release and warn harder past the threshold; /ui/delivery shows the same answer
- finish refuses completed to a task holding the release seat while landed work has waited past the threshold, and counts a pushed tag whose release run is in progress as released
Validation
- bin/majordomus plan validate
- bash test/run.sh 3470_the_release_follows_the_work
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I3070 | READY | 0 | — | release.currency measures the landed work past the last release, and the brief and doctor say when it waits |
| I3071 | BLOCKED | 1 | I3070 | /ui/delivery shows how much landed work waits for a release, and since when |
| I3072 | BLOCKED | 1 | I3070 | A task holding the release seat does not finish completed while landed work has waited past the threshold |
| I3076 | BLOCKED | 1 | I3070 | The landing clock's first source is measured, a fresh clone's wait is a labelled bound, and case 3470 shows a decided version |
The graph
flowchart LR
I3070["I3070<br/>release.currency measures the landed work past the last release, and the brief and doctor say when it waits"]:::ready
I3071["I3071<br/>/ui/delivery shows how much landed work waits for a release, and since when"]:::blocked
I3072["I3072<br/>A task holding the release seat does not finish completed while landed work has waited past the threshold"]:::blocked
I3076["I3076<br/>The landing clock's first source is measured, a fresh clone's wait is a labelled bound, and case 3470 shows a decided version"]:::blocked
I3070 --> I3071
I3070 --> I3072
I3070 --> I3076
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (4)
- I3070 release.currency measures the landed work past the last release, and the brief and doctor say when it waits
- I3071 /ui/delivery shows how much landed work waits for a release, and since when
- I3072 A task holding the release seat does not finish completed while landed work has waited past the threshold
- I3076 The landing clock's first source is measured, a fresh clone's wait is a labelled bound, and case 3470 shows a decided version
Canonical record: .ai/repo/project/milestones/a-version-follows-the-work.yaml. Read it back with majordomus plan show a-version-follows-the-work.