a-release-is-proven-end-to-end — Whether a commit may be released, and whether its release arrived, is proved by one read and one case
release.readiness answers before a tag from the functions the workflow runs; site-deploy never goes back a commit; one case walks a fresh clone to published evidence; the first record commit after I2717 lands is observed with a green evidence job.
BLOCKED 0 of 3 issues done
- ready
- 0
- blocked
- 3
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
The release path is well guarded once a tag is pushed (plan, verdict, build, verify, publish), but before the tag nothing answers whether it would pass, the site guard compares releases but not commits, and the v0.29.0 record commit's evidence job failed on 2026-10-18 with the planned-empty report I2717 owns. Sources: chatgpt-majordomus:c291#2, chatgpt-majordomus:c111#6, chatgpt-majordomus:c238#2, chatgpt-majordomus:c258#2, chatgpt-majordomus:c283#2, chatgpt-majordomus:c297#2, chatgpt-majordomus:c295#3.
Outcome
release.readiness answers before a tag from the functions the workflow runs; site-deploy never goes back a commit; one case walks a fresh clone to published evidence; the first record commit after I2717 lands is observed with a green evidence job.
Current state
Verified on master 707a04c7ce8: .ai/repo/ci/release.yaml phases; scripts/ci/release-verdict; distribution.status chain; scripts/site-deploy refuses an older release and a HEAD off origin/master only. Prerelease isolation (I2829) and the release changelog (I2826) are on branches. I2717 (READY, p0) owns the record commit's planned-empty evidence failure.
Desired state
A release is decided by evidence read before and confirmed after, and every surface reads the same decision.
Scope
- apps/majordomus-cli/src/release
- apps/majordomus-cli/src/capability/builtin/release.rs
- scripts/site-deploy
- .github/workflows/validate.yml
- docs/RELEASE.md
Out of scope
- A second release engine
- Automatic GO for a release
- Browser compute on the release path
Acceptance criteria
- release.readiness and the release workflow share their implementation
- A publication of an older commit than the served one is refused
- The fresh-clone case runs on the release candidate
Validation
- majordomus plan validate
Risks
- The alpha top (0.30.0) and I2829 touch scripts/site-deploy and release.yml; I3201 and I3208 start after it lands
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 |
|---|---|---|---|---|
| I3201 | BLOCKED | 0 | — | A publication never replaces the site with a build of an older commit than the one gh-pages serves |
| I3208 | BLOCKED | 0 | — | Whether a commit may be released is one read that names each condition and the evidence that settles it |
| I3213 | BLOCKED | 5 | I2812, I2717 | One case walks a fresh clone from init to published evidence on the release candidate |
The graph
flowchart LR
I3201["I3201<br/>A publication never replaces the site with a build of an older commit than the one gh-pages serves"]:::blocked
I3208["I3208<br/>Whether a commit may be released is one read that names each condition and the evidence that settles it"]:::blocked
I3213["I3213<br/>One case walks a fresh clone from init to published evidence on the release candidate"]:::blocked
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 (3)
- I3201 A publication never replaces the site with a build of an older commit than the one gh-pages serves
- I3208 Whether a commit may be released is one read that names each condition and the evidence that settles it
- I3213 One case walks a fresh clone from init to published evidence on the release candidate
Canonical record: .ai/repo/project/milestones/a-release-is-proven-end-to-end.yaml. Read it back with majordomus plan show a-release-is-proven-end-to-end.