I2826 — A GitHub release carries the tool's own changelog for its tag, never GitHub's generated notes
Publish each GitHub release with the body `majordomus release changelog` composes for its tag (the release's decisions, including a release declaration such as ADR 0175, its conventional changes and its artifacts) instead of `gh release create --generate-notes`, and refuse a release whose published body is not that projection.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I2826 will be accepted.
Objective
Publish each GitHub release with the body `majordomus release changelog` composes for its tag (the release's decisions, including a release declaration such as ADR 0175, its conventional changes and its artifacts) instead of `gh release create --generate-notes`, and refuse a release whose published body is not that projection.
Why
Found on 2026-10-17 while preparing v1.0.0-alpha.1's declaration (ADR 0175): .github/workflows/release.yml creates the release with --generate-notes, so the body a person reads is GitHub's list of merged pull requests, authored by nobody in this repository, while ADR 0029 says the changelog is composed from the layer and every surface is derived. The release record's notes_url points back at that page. The only authored text that reaches the tool's output for a tag is a decision dated in its window. Deferred past the alpha by the release seat: no release-path change before v1.0.0-alpha.1.
Current state
The GitHub release body is GitHub's generated pull request list; release.changelog is printed by the tool and published nowhere a release reader looks.
Desired state
release.yml writes `majordomus release changelog --tag <tag>` (or the equivalent capability output) as the release body; a check refuses a published release whose body differs from that projection; docs/RELEASE.md says so.
Scope
- .github/workflows/release.yml
- apps/majordomus-cli/src/capability/builtin/release.rs
- scripts/ci/release-check
- docs/RELEASE.md
- test/cases/3341_a_release_carries_its_own_changelog.sh
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A release built from a fixture tag is created with the body the tool's changelog composes for that tag, and no --generate-notes
- release-check refuses a published release whose body is not the tool's changelog for its tag, naming the command that writes it
Validation
- bin/majordomus plan validate
- bash scripts/ci/release-check
Evidence required
- release_body_is_the_changelog_case
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2826.yaml. Read it back with majordomus plan show I2826.