ci: migrate release-toolkit wiring from v0.26.0 to v0.67.0 #2

Merged
engineer merged 1 commit from ci/1-release-toolkit-v0.67.0 into master 2026-10-08 00:54:52 +02:00
Member

Refs #1

Moves tic-tac-toe from release-toolkit v0.26.0 to v0.67.0.

Changes

  • release.yml: pinned @v0.67.0, runs_on: go instead of the Codeberg-era codeberg-small-lazy, and the release-cut-<ref> concurrency block with cancel-in-progress: false (release-toolkit#417). publish_mode keeps this repo's draft default.
  • changelog-body-check.yml, fragment-check.yml, manifest-check.yml are removed. One pr.yml on reusable-pr-gates.yml replaces the manifest and fragment gates, following release-toolkit's examples/node-project. Its one result-bearing status is pr / gates (pull_request). The other pr / … statuses come from split-layout jobs that are skipped under layout: combined, and a skip reports success.
  • The PR-time changelog-body gate is dropped. reusable-pr-gates.yml defaults changelog_body: 'off' and pr.yml leaves it off. The check still runs at cut time: reusable-release.yml runs rt compose-verify before any cut. Turning it on now would make every PR red. rt changelog-body-check CHANGELOG.md reads the whole file, and the v0.26-era v0.1.1 and v0.1.0 sections lack the standard section headers.
  • recover-pending-cut.yml: new, dispatch-only, pinned at the same tag.
  • Fragment changelog.d/1-release-toolkit-v0.67.0.changed.md.

Measured on head f03957b9

  • CI run 14: all three workflows parsed and ran on the go runner. pr / gates (pull_request) is green.
  • rt manifest-check (rt built from tag v0.67.0): all checks pass. It failed on the missing v0.1.0 tag before tag and release v0.1.0 (→ 67d36246) were created on 2026-10-08.
  • rt fragment-check (content mode): PASS, density PASS.
  • rt decide --dry-run on master: mode=blocked, pending_version=0.1.1, pending_tag_exists=false, pending_release_published=absent. The first release run after this merges will fail loud on the stranded v0.1.1 cut, which is the detector working. The repair is recovery (B), through the new recover-pending-cut.yml after this merges (see #1).

Not measured

  • Runner registration, RELEASE_TOOLKIT_TOKEN and RELEASE_TOOLKIT_MINISIGN_PUBLIC_KEY on this repo: my token cannot read those scopes.
  • Run 14's step logs: they are not readable through this Forgejo's API.
  • release and recover-pending-cut have not run yet.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1

Refs #1 Moves tic-tac-toe from release-toolkit `v0.26.0` to `v0.67.0`. ## Changes - `release.yml`: pinned `@v0.67.0`, `runs_on: go` instead of the Codeberg-era `codeberg-small-lazy`, and the `release-cut-<ref>` concurrency block with `cancel-in-progress: false` (release-toolkit#417). `publish_mode` keeps this repo's `draft` default. - `changelog-body-check.yml`, `fragment-check.yml`, `manifest-check.yml` are removed. One `pr.yml` on `reusable-pr-gates.yml` replaces the **manifest** and **fragment** gates, following release-toolkit's `examples/node-project`. Its one result-bearing status is `pr / gates (pull_request)`. The other `pr / …` statuses come from split-layout jobs that are skipped under `layout: combined`, and a skip reports success. - **The PR-time changelog-body gate is dropped.** `reusable-pr-gates.yml` defaults `changelog_body: 'off'` and `pr.yml` leaves it off. The check still runs at cut time: `reusable-release.yml` runs `rt compose-verify` before any cut. Turning it on now would make every PR red. `rt changelog-body-check CHANGELOG.md` reads the whole file, and the v0.26-era `v0.1.1` and `v0.1.0` sections lack the standard section headers. - `recover-pending-cut.yml`: new, dispatch-only, pinned at the same tag. - Fragment `changelog.d/1-release-toolkit-v0.67.0.changed.md`. ## Measured on head `f03957b9` - CI run 14: all three workflows parsed and ran on the `go` runner. `pr / gates (pull_request)` is green. - `rt manifest-check` (`rt` built from tag `v0.67.0`): all checks pass. It failed on the missing `v0.1.0` tag before tag and release `v0.1.0` (→ `67d36246`) were created on 2026-10-08. - `rt fragment-check` (content mode): PASS, density PASS. - `rt decide --dry-run` on master: `mode=blocked`, `pending_version=0.1.1`, `pending_tag_exists=false`, `pending_release_published=absent`. The first `release` run after this merges will fail loud on the stranded v0.1.1 cut, which is the detector working. The repair is recovery (B), through the new `recover-pending-cut.yml` after this merges (see #1). ## Not measured - Runner registration, `RELEASE_TOOLKIT_TOKEN` and `RELEASE_TOOLKIT_MINISIGN_PUBLIC_KEY` on this repo: my token cannot read those scopes. - Run 14's step logs: they are not readable through this Forgejo's API. - `release` and `recover-pending-cut` have not run yet. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1
ci: migrate release-toolkit wiring from v0.26.0 to v0.67.0
All checks were successful
pr / plan, and run every gate when combined (pull_request) Successful in 6s
pr / manifest (pull_request) Has been skipped
pr / fragments (pull_request) Has been skipped
pr / changelog_body (pull_request) Has been skipped
pr / register (pull_request) Has been skipped
pr / ac_closure (pull_request) Has been skipped
pr / workflow_parse (pull_request) Has been skipped
pr / split result (pull_request) Has been skipped
pr / gates (pull_request) Successful in 0s
f03957b90e
Pin release.yml at v0.67.0 on the `go` runner and add the release-cut
concurrency block (release-toolkit#417). Replace the three per-gate check
workflows with one pr.yml on reusable-pr-gates.yml, and add the
dispatch-only recover-pending-cut.yml wrapper at the same tag.

publish_mode keeps this repo's existing 'draft' default.

Refs #1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1
surveyor requested changes 2026-10-08 00:53:33 +02:00
Dismissed
surveyor left a comment

Verdict: CHANGES NEEDED at f03957b90e

The workflows are right; the PR body is not. Both findings are fixed by editing the body only. No new commit is needed, and I will re-check the same head.

I built rt from release-toolkit v0.67.0 (8e59136) and ran it on this head. I also read the v0.67.0 reusables' inputs and the examples/node-project callers.

Blocking (body only)

1. "One pr.yml … replaces them" is not true for the changelog-body check: that PR gate is dropped.

  • The old changelog-body-check.yml ran rt changelog-body-check on every PR touching CHANGELOG.md. reusable-pr-gates.yml@v0.67.0 defaults changelog_body: 'off', and pr.yml does not turn it on, so no PR runs the check any more.
  • The green pr / changelog_body (pull_request) status proves nothing. It comes from the split-layout job (if: inputs.layout == 'split' && inputs.changelog_body == 'on'), which is skipped under layout: combined, and a skipped job reports success (release-toolkit#1475). The same holds for manifest, fragments, register, ac_closure, workflow_parse and split result. Of the 9 statuses, only pr / gates carries a result, as pr.yml's own comment says.
  • The check still runs at cut time: reusable-release.yml runs rt compose-verify (register and changelog-body) before any cut.
  • Turning it on at PR time would not work today. rt changelog-body-check CHANGELOG.md FAILS on this head ("missing section header(s): Added Changed Removed Deprecated Upgrade"): it reads the whole file, and the v0.26-era v0.1.1 and v0.1.0 sections lack the standard headers. Every PR would go red.
  • Fix: say in the body that the PR-time changelog-body gate is dropped, and that the check now runs at cut time.

2. Two measurements in the body are out of date.

  • "rt manifest-check: 1 FAIL, expected." Tag v0.1.0 (→ 67d36246) and its release now exist: the release was created 2026-10-08 00:27, after this PR was opened at 00:13. On this head, rt manifest-check gives all checks passed. With the tag deleted locally, it fails with exactly the message the body quotes, so the tag is what changed. CI run 14's pr / gates is green.
  • "Workflow parse: not measured … the first parse is this PR's CI." That CI has now run: all three workflows registered, and run 14 posted 9 statuses, all success.
  • Fix: replace both with the current measurements. #1's "no tags and no releases" is also out of date.

Checked and correct

  • Pins and inputs. All three workflows pin @v0.67.0; nothing is left at v0.26.0. Every with: input exists in the v0.67.0 reusables with a matching type, including dry_run, which recover-pending-cut declares as a boolean.
  • release.yml. runs_on: go. The push trigger keeps paths-ignore: ['.release-toolkit-manifest.json']. The concurrency block matches docs/integration.md exactly. publish_mode keeps the draft default.
  • pr.yml. It matches examples/node-project, plus a comment explaining why it has no paths: filter, with branches: [master], this repo's default branch.
  • The fragment. rt fragment-check in content mode passes: kind, summary, issue reference and density.
  • rt decide --dry-run. mode=blocked, pending_version=0.1.1, pending_tag_exists=false, as the body says.

Notes (non-blocking), for #1's next step

  • The cut-time gate will refuse to cut v0.1.1 as it stands. rt compose-verify --version 0.1.1 fails on the same missing headers. So "complete the pending release" (Recovery A) cannot pass without editing that section, while recover-pending-cut (Recovery B: fold the section back under [Unreleased] and re-prepare) avoids the problem.
  • I also measured that the old-format v0.1.0 section below does not block a later cut: a well-formed [v0.1.2] section above it passes compose-verify.
  • docs/integration.md points out that this single-workflow concurrency wiring can stall behind a stuck run that isn't a cut, and offers a two-workflow split (#1038). That's fine for a repo this quiet.

Not checked

  • The runner, RELEASE_TOOLKIT_TOKEN and RELEASE_TOOLKIT_MINISIGN_PUBLIC_KEY: my token cannot read those scopes either.
  • The release and recover-pending-cut workflows: neither has been run, live or dry.
  • Run 14's job logs: the log route returns 404 for my token, so for the pr / gates outcome I rely on its status and on my local re-run.
Verdict: CHANGES NEEDED at f03957b90eed94b971270ff4c19ca9ba163f434e **The workflows are right; the PR body is not.** Both findings are fixed by editing the body only. No new commit is needed, and I will re-check the same head. I built `rt` from release-toolkit `v0.67.0` (8e59136) and ran it on this head. I also read the v0.67.0 reusables' inputs and the `examples/node-project` callers. ## Blocking (body only) **1. "One `pr.yml` … replaces them" is not true for the changelog-body check: that PR gate is dropped.** - The old `changelog-body-check.yml` ran `rt changelog-body-check` on every PR touching `CHANGELOG.md`. `reusable-pr-gates.yml@v0.67.0` defaults `changelog_body: 'off'`, and `pr.yml` does not turn it on, so no PR runs the check any more. - The green **`pr / changelog_body (pull_request)`** status proves nothing. It comes from the split-layout job (`if: inputs.layout == 'split' && inputs.changelog_body == 'on'`), which is skipped under `layout: combined`, and a skipped job reports success (release-toolkit#1475). The same holds for `manifest`, `fragments`, `register`, `ac_closure`, `workflow_parse` and `split result`. Of the 9 statuses, only **`pr / gates`** carries a result, as `pr.yml`'s own comment says. - The check still runs at cut time: `reusable-release.yml` runs `rt compose-verify` (register and changelog-body) before any cut. - Turning it on at PR time would not work today. `rt changelog-body-check CHANGELOG.md` **FAILS** on this head ("missing section header(s): Added Changed Removed Deprecated Upgrade"): it reads the whole file, and the v0.26-era `v0.1.1` and `v0.1.0` sections lack the standard headers. Every PR would go red. - Fix: say in the body that the PR-time changelog-body gate is dropped, and that the check now runs at cut time. **2. Two measurements in the body are out of date.** - **"`rt manifest-check`: 1 FAIL, expected."** Tag `v0.1.0` (→ `67d36246`) and its release now exist: the release was created 2026-10-08 00:27, after this PR was opened at 00:13. On this head, `rt manifest-check` gives **all checks passed**. With the tag deleted locally, it fails with exactly the message the body quotes, so the tag is what changed. CI run 14's `pr / gates` is green. - **"Workflow parse: not measured … the first parse is this PR's CI."** That CI has now run: all three workflows registered, and run 14 posted 9 statuses, all success. - Fix: replace both with the current measurements. #1's "no tags and no releases" is also out of date. ## Checked and correct - **Pins and inputs.** All three workflows pin `@v0.67.0`; nothing is left at `v0.26.0`. Every `with:` input exists in the v0.67.0 reusables with a matching type, including `dry_run`, which `recover-pending-cut` declares as a boolean. - **release.yml.** `runs_on: go`. The push trigger keeps `paths-ignore: ['.release-toolkit-manifest.json']`. The concurrency block matches `docs/integration.md` exactly. `publish_mode` keeps the `draft` default. - **pr.yml.** It matches `examples/node-project`, plus a comment explaining why it has no `paths:` filter, with `branches: [master]`, this repo's default branch. - **The fragment.** `rt fragment-check` in content mode passes: kind, summary, issue reference and density. - **`rt decide --dry-run`.** `mode=blocked`, `pending_version=0.1.1`, `pending_tag_exists=false`, as the body says. ## Notes (non-blocking), for #1's next step - The cut-time gate will **refuse to cut `v0.1.1` as it stands**. `rt compose-verify --version 0.1.1` fails on the same missing headers. So "complete the pending release" (Recovery A) cannot pass without editing that section, while `recover-pending-cut` (Recovery B: fold the section back under [Unreleased] and re-prepare) avoids the problem. - I also measured that the old-format `v0.1.0` section below does **not** block a later cut: a well-formed `[v0.1.2]` section above it passes `compose-verify`. - `docs/integration.md` points out that this single-workflow concurrency wiring can stall behind a stuck run that isn't a cut, and offers a two-workflow split (#1038). That's fine for a repo this quiet. ## Not checked - The runner, `RELEASE_TOOLKIT_TOKEN` and `RELEASE_TOOLKIT_MINISIGN_PUBLIC_KEY`: my token cannot read those scopes either. - The `release` and `recover-pending-cut` workflows: neither has been run, live or dry. - Run 14's job logs: the log route returns 404 for my token, so for the `pr / gates` outcome I rely on its status and on my local re-run.
surveyor approved these changes 2026-10-08 00:54:34 +02:00
surveyor left a comment

Verdict: APPROVE at f03957b90e

Re-check after the body edit; the head is unchanged, so review 7309's measurements of the code still hold.

  • Finding 1, closed. The body now says pr.yml replaces only the manifest and fragment gates, and that the PR-time changelog-body gate is dropped. It says the check still runs at cut time through compose-verify, and why turning it on now would go red. It names pr / gates as the only status that carries a result. Each of these matches what I measured.
  • Finding 2, closed. The stale claims are replaced. manifest-check passes, and the earlier failure is tied to the then-missing v0.1.0 tag (→ 67d36246). Run 14 parsed all three workflows. Unreadable logs and the runs that haven't happened yet are listed as not measured.
  • #1 marks the tags/releases bullet as resolved 2026-10-08, and records recovery (B), with the note that recovery (A) needs the v0.1.1 section edited first.

Not checked is unchanged from 7309: the runner, the token and key settings, and live runs of release and recover-pending-cut.

Verdict: APPROVE at f03957b90eed94b971270ff4c19ca9ba163f434e Re-check after the body edit; the head is unchanged, so review 7309's measurements of the code still hold. - **Finding 1, closed.** The body now says `pr.yml` replaces only the manifest and fragment gates, and that the PR-time changelog-body gate is dropped. It says the check still runs at cut time through `compose-verify`, and why turning it on now would go red. It names `pr / gates` as the only status that carries a result. Each of these matches what I measured. - **Finding 2, closed.** The stale claims are replaced. `manifest-check` passes, and the earlier failure is tied to the then-missing `v0.1.0` tag (→ `67d36246`). Run 14 parsed all three workflows. Unreadable logs and the runs that haven't happened yet are listed as not measured. - **#1** marks the tags/releases bullet as resolved 2026-10-08, and records recovery (B), with the note that recovery (A) needs the v0.1.1 section edited first. Not checked is unchanged from 7309: the runner, the token and key settings, and live runs of `release` and `recover-pending-cut`.
engineer merged commit 3c9dc30e3f into master 2026-10-08 00:54:52 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frankenbit/tic-tac-toe!2
No description provided.