Reading a pushed version should be enough: the release body now opens with a plain-English changelog — What is new (fixed/added/improved), What you could try (derived from the surfaces actually touched), and How it was verified. Before, bodies carried raw commit lists, or claimed "No substantive changes" on a 21-commit day.
Root causes
latest_release_tag() sorted ALL tag namespaces: the TUI build tag (tui-v*) captured the main-line v* range lookup, so the exit-note started hours late and blanked the note.
The Go narrative prepend ran before body finalization and failed silently — the "What's new" header never appeared on some releases.
The Go narrative: SuggestTryActions (path→reader-action map, deduped, capped, nothing invented for tooling-only changes) + PlainEnglishNarrativeWithTry + GitChangedPaths; the CLI passes changed paths from both commands.
auto-version.yml + maintenance.yml: all --latest-tag callers declare the namespace.
v0.346.0's body rebuilt retroactively with the new template (verifiable on the server right now).
What would let us close this
v0.346.0's body shows the template (visible now)
namespace tests + narrative tests green (they are, locally)
CI lint job green on the branch
the next earned version publishes with the template automatically
Version impact
patch — release reporting content; no runtime behavior
Changelog (added later, same family)
Added: the committed CI-checkable changelog (f18b6cc3)
CHANGELOG.md now lives in the repo: one section per version (newest first), composed deterministically from the main v* tags — What's new bullets, What you could try, generated at the sync step.
CI check: changelog --check rides the lint job — regeneration byte-compares against the committed file; a release that skips its sync turns the gate red on the next PR. The tags are immutable, so the gate is exact, not opinion.
Auto-sync: auto-version's release step now syncs the changelog with a chore(changelog): commit — classified "other" by the convergence authority, so it earns no version (no recursion).
Red-first tests: composition determinism + suggestion dedupe (go), namespace law (python). All green.
## In plain English
Reading a pushed version should be enough: the release body now opens with a plain-English changelog — What is new (fixed/added/improved), What you could try (derived from the surfaces actually touched), and How it was verified. Before, bodies carried raw commit lists, or claimed "No substantive changes" on a 21-commit day.
## Root causes
1. `latest_release_tag()` sorted ALL tag namespaces: the TUI build tag (`tui-v*`) captured the main-line `v*` range lookup, so the exit-note started hours late and blanked the note.
2. The Go narrative prepend ran before body finalization and failed silently — the "What's new" header never appeared on some releases.
3. No try-action derivation existed.
## What shipped
- `tag_repair.py --namespace main|tui` (tests red-first: `tests/test_tag_repair.py`, 4 cases: default=main, tui-only state, selectable namespaces, empty repo).
- The Go narrative: `SuggestTryActions` (path→reader-action map, deduped, capped, nothing invented for tooling-only changes) + `PlainEnglishNarrativeWithTry` + `GitChangedPaths`; the CLI passes changed paths from both commands.
- auto-version.yml + maintenance.yml: all `--latest-tag` callers declare the namespace.
- v0.346.0's body rebuilt retroactively with the new template (verifiable on the server right now).
## What would let us close this
- [ ] v0.346.0's body shows the template (visible now)
- [ ] namespace tests + narrative tests green (they are, locally)
- [ ] CI lint job green on the branch
- [ ] the next earned version publishes with the template automatically
## Version impact
- [ ] patch — release reporting content; no runtime behavior
---
## Changelog (added later, same family)
## Added: the committed CI-checkable changelog (f18b6cc3)
- **CHANGELOG.md** now lives in the repo: one section per version (newest first), composed deterministically from the main `v*` tags — `What's new` bullets, `What you could try`, generated at the sync step.
- **CI check**: `changelog --check` rides the lint job — regeneration byte-compares against the committed file; a release that skips its sync turns the gate red on the next PR. The tags are immutable, so the gate is exact, not opinion.
- **Auto-sync**: auto-version's release step now syncs the changelog with a `chore(changelog):` commit — classified "other" by the convergence authority, so it earns no version (no recursion).
- Red-first tests: composition determinism + suggestion dedupe (go), namespace law (python). All green.
contract:ADMIT-release-reporting — the version-push reader page now
carries a plain-English body: What is new grouped fixed/new/improved,
What you could try derived from touched surfaces, How it was verified.
latest_release_tag namespaces (main v* vs tui-v*) so the TUI build tag
never blanks a release note; the workflow feeds one namespace-resolved
PREV_TAG to every range consumer; the Go narrative carries the try list
and the workflow rewires its callers. Tests red-first (python namespace
law, go try-section law) + retroactive v0.346.0 body rebuild follows.
The v0.346.0 retroactive body rebuild exposed the missing reader action
for tool-executor/local_tool_runtime waves: reading a file through Rune
should behave exactly as before.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The readability ruling applied: every version-push body rebuilds as
proper markdown — exactly ONE H1 (the version title), What is new (H2,
capped readable bullets), What you could try (H2, reader actions), How
it was verified (H2, standard gates), Technical (H2, historical tails
capped). The strip-own-sections recursion guard makes rebuilds
idempotent: earlier rebuild layers (this session produced three) strip
off until the original evidence remains, so no body ever accumulates
stale narratives again. The 49 existing releases (both namespaces)
rebuilt live; audit: zero artifacts, zero contradictions on all.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
The changelog = a generated artifact, not a kept doc: CHANGELOG.md
composes from the MAIN v* tag namespace (one section per version: What is
new / What you could try / What verifies it) byte-deterministically; CI
lint runs "changelog --check" (byte-compare vs regeneration — a release
that skips its sync turns the gate red); auto-version syncs it after
every release with a chore(changelog) commit (the convergence classifier
ranks it "other" = earns no version, no recursion). Tests red-first
(deterministic composition, dedupe); the go battery + the generated
file are current as of v0.346.0.
🤖Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 **Headless spec gate (non-blocking, #204 first slice)**
Spec-gate agent produced no text output — check runner logs.
<details><summary>Deterministic floors still govern the merge</summary>
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
gitea-actionsBot
removed the bug label 2026-10-24 12:45:02 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
In plain English
Reading a pushed version should be enough: the release body now opens with a plain-English changelog — What is new (fixed/added/improved), What you could try (derived from the surfaces actually touched), and How it was verified. Before, bodies carried raw commit lists, or claimed "No substantive changes" on a 21-commit day.
Root causes
latest_release_tag()sorted ALL tag namespaces: the TUI build tag (tui-v*) captured the main-linev*range lookup, so the exit-note started hours late and blanked the note.What shipped
tag_repair.py --namespace main|tui(tests red-first:tests/test_tag_repair.py, 4 cases: default=main, tui-only state, selectable namespaces, empty repo).SuggestTryActions(path→reader-action map, deduped, capped, nothing invented for tooling-only changes) +PlainEnglishNarrativeWithTry+GitChangedPaths; the CLI passes changed paths from both commands.--latest-tagcallers declare the namespace.What would let us close this
Version impact
Changelog (added later, same family)
Added: the committed CI-checkable changelog (
f18b6cc3)v*tags —What's newbullets,What you could try, generated at the sync step.changelog --checkrides the lint job — regeneration byte-compares against the committed file; a release that skips its sync turns the gate red on the next PR. The tags are immutable, so the gate is exact, not opinion.chore(changelog):commit — classified "other" by the convergence authority, so it earns no version (no recursion).🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.
🤖 Headless spec gate (non-blocking, #204 first slice)
Spec-gate agent produced no text output — check runner logs.
Deterministic floors still govern the merge
This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.