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

I2303

A release publishes its metadata to the site before its record lands, and the site never goes back a release

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
none
Behind it in all
0
Evidence
2 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 I2303

majordomus plan verify I2303

majordomus plan done I2303

What it is

Objective
Make majordomus.dev serve a release's releases/latest.json and releases/<tag>.json from the release run itself, minutes after its archives are published, instead of after its record's pull request has passed its ci, without the site ever going back a release.
Why
On 2026-10-10 v0.20.0 was published on GitHub at 16:38Z and served by the site at 17:42Z, only after its record was merged by hand without waiting for ci; v0.19.1 was published at 01:46Z and served after 07:09Z, its record's ci running 106 minutes. The owner set a bound of 15 minutes from tag to served release and chose, asked the same day, that the release run publish its metadata itself before the record lands.
Now
release.yml's publish job derives the record and its projections, proposes them as release/record-<tag>, and dispatches pages.yml on the default branch; the site serves the release only once the record's pull request is merged and master deployed. scripts/site-deploy replaces gh-pages with the build entirely.
Wanted
The publish job runs `scripts/site-deploy --release-metadata <tag>` after `scripts/derive-check` judged the tree: exactly releases/<tag>.json and releases/latest.json change on gh-pages, build.json still names master's commit. It refuses a missing or mismatched tag file, a latest.json that differs from it, and a release older than the one served. An ordinary deploy keeps gh-pages' latest.json and the tag file it names when they name a newer release than the build, and says so. ADR 0131 records the decision.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • `scripts/site-deploy --release-metadata <tag>` changes exactly releases/<tag>.json and releases/latest.json on gh-pages and leaves build.json naming master's commit, proven against a local bare remote
  • It refuses, pushing nothing, a missing tag file, a latest.json naming another tag, a latest.json that differs from the tag file, and a release older than the one served
  • An ordinary deploy of a build that names an older release keeps the served latest.json and its tag file and says so; a build naming the same or a newer release replaces them
  • release.yml's publish job runs the mode after scripts/derive-check and before the record is proposed, and the smoke job waits for the served metadata rather than for the record to be on the default branch
  • The case fails against the previous scripts/site-deploy, and against one without the keep rule
Validation
bash test/run.sh 1041_a_release_publishes_its_metadataMJ_TEST_JOBS=3 bash test/run.sh 87_release_pipeline 26_ci_wiring 996_the_record_pull_request_gets_its_verdictbin/majordomus plan validate
Evidence required
release_metadata_published_ahead_of_record_casedecision_recorded
Evidence present
release_metadata_published_ahead_of_record_casedecision_recorded

Scope

Touches
scripts/site-deploy.github/workflows/release.ymldocs/DISTRIBUTION.md.ai/repo/adrs/0131-a-release-publishes-its-metadata-before-its-record-lands.md.ai/repo/project/issues/I2303.yamltest/cases/1041_a_release_publishes_its_metadata.shtest/cases/87_release_pipeline.shdocs/generateddocs/PLAN_STATUS.mddocs/PAGES_STATUS.mdsite/contentsite/data
Not
Shortening the build and the publish job, which the 15-minute bound also needs: the macOS x86_64 package step, the second derivation and the rebuilt executable of the publish job.The staging line release.yml's publish step fails on since /dist/ is ignored: I2302.
Depends on
unknown: the record declares no `depends_on`
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-10
Updated
2026-10-14T08:00:34Z
Started
2026-10-14T08:00:25Z
Verified
unknown: the record declares no `verified_at`
Completed
2026-10-14T08:00:34Z

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.