Skip to content

ci: version declarations agree; release-drift waits for the release on push - #24

Merged
BenKalsky merged 3 commits into
mainfrom
ci/version-sync-and-drift-wait
Sep 14, 2026
Merged

BenKalsky merged 3 commits into
mainfrom
ci/version-sync-and-drift-wait

Conversation

@BenKalsky

Copy link
Copy Markdown
Member

Why

README badge was stale. It said 3.8.2 while SKILL.md, package.json and the README's own "Current version" line said 3.9.5 — nothing compared them. Fixed, and ci.yml gains a Version declarations agree job: SKILL.md version, README badge, package.json, and any Current version: **x.y.z** line must match — on pull requests too, so a bump that forgets one is caught before merge.

Release drift went red on every release. release-drift.yml runs on push to main and starts the moment the merge lands, while the release is cut after the merge. Failing on the first lookup turned every ordinary release into a red "SKILL.md version has a release" check on main's head that no later run could replace — here v3.9.5 was cut 52 min after its merge, and main's head (bd93a1d) has shown that failed check since, beside the later successes. On push the check now waits for the release, up to 20 × 30 s; a bump still unreleased after ten minutes is the drift the check exists for and fails exactly as before. Schedule and dispatch runs do not wait.

Verified

  • Both workflows parse as YAML.
  • The new version step was run locally against this tree: SKILL.md, README badge, package.json agree on 3.9.5.

No skill payload change, no version bump, no release.

🤖 Generated with Claude Code

…on agrees, and release-drift waits for the release on push

The README badge said 3.8.2 while SKILL.md, package.json and the README's own
"Current version" line said 3.9.5: nothing compared them. ci.yml gains a
"Version declarations agree" job - SKILL.md version, README badge,
package.json, and any "Current version: **x.y.z**" line must match - on pull
requests too, so a bump that forgets one is caught before merge.

release-drift.yml runs on push to main and starts the moment the merge lands,
while the release is cut AFTER the merge. Failing on the first lookup turned
every ordinary release into a red "SKILL.md version has a release" check on
main's head that no later run could replace - here, v3.9.5 was cut 52 min
after its merge and main's head has carried that red check since (hostinger-mcp
v1.2.1: 19 s after, same result). On push the check now waits for the
release, up to 20 x 30 s; a bump still unreleased after ten minutes is the
drift the check exists for and fails exactly as before. Schedule and dispatch
runs do not wait.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@BenKalsky

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 14, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-14T21:33:26.792052Z 69dad48 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: db5a401d3f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/release-drift.yml Outdated
# dispatch runs do not wait - nothing is in flight for them.
if [ "$GITHUB_EVENT_NAME" = "push" ]; then
for attempt in $(seq 1 20); do
[ "$STATE" = missing ] || break

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep polling while the matching release is a draft

If the release flow creates a draft before publishing it, a polling lookup sets STATE=true, this condition exits the loop, and the subsequent true case fails the push check immediately—even when that draft would be published within the advertised ten-minute window. This means the new wait only handles a 404 and still produces a false red check for draft-then-publish release flows; keep polling both missing and true, then report a remaining draft after the timeout.

Useful? React with 👍 / 👎.

…the whole semver (Codex round 1)

release-drift.yml: the push-time wait broke out of its loop on a DRAFT and
failed at once, so a flow that creates the release as a draft and publishes
it after its ClawHub publish succeeded (cloudways-mcp's release.yml), or a
draft cut by hand before the merge and published moments after, still got
the red check the wait was added to prevent. On push the loop now waits
through missing AND draft; a draft still standing after the window fails
below, as before.

ci.yml: the badge regex took only the x.y.z core, and shields.io writes a
dash inside a badge value as "--" (version-1.2.0--rc.1-blue renders
"1.2.0-rc.1", measured), so a consistent prerelease bump would have been
rejected. The badge is read whole and the "--" folded back; the "Current
version" line likewise. Verified on a synthetic tree at 1.2.0-rc.1 (accepted)
and with the badge left at 1.1.0 (rejected), and on this tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@BenKalsky

Copy link
Copy Markdown
Member Author

Both taken, in cad63bd.

Draft. Right — the loop broke on STATE=true and fell into the true) failure at once. cloudways-mcp's release.yml creates the release as a draft and publishes it only after its ClawHub publish succeeded, so there the wait would have produced the very red check it was added to prevent; a draft cut by hand before the merge is the same interval. On push the loop now waits through missing and true; a draft still standing after the ten minutes fails below, as before.

Whole semver in the badge (raised on meta-ads-mcp, applied to every repo that got this job). Measured: shields.io writes a dash inside the value as --version-1.2.0--rc.1-blue renders 1.2.0-rc.1 — so the badge is read whole and the -- folded back; the Current version line likewise. Verified on a synthetic tree at 1.2.0-rc.1 in all four declarations (accepted) and with the badge left at 1.1.0 (rejected), and on this tree.

@BenKalsky

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🎉

Reviewed commit: cad63bd6fd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

The suffix pattern accepted only segments beginning with the shields "--"
(a prerelease), so a consistent bump to 1.2.0+build.7 - build metadata with
no prerelease - read as 1.2.0 from the badge and was rejected. After the
x.y.z core the regex now takes every character a prerelease or build suffix
can carry, "--" included, and stops at the first single dash (the colour
separator); "--" is folded back afterwards. Measured on shields.io:
version-1.2.0+build.7-blue renders "1.2.0+build.7" and
version-1.2.0+build--2-blue "1.2.0+build-2". Verified on synthetic trees at
1.2.0-rc.1, 1.2.0+build.7, 1.2.0-rc.1+build.7, 1.2.0+build-2 and 1.2.0
(accepted), a stale badge and a badge missing the suffix (rejected), and on
this tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@BenKalsky

Copy link
Copy Markdown
Member Author

Taken, in 69dad48 — raised on hostinger-mcp and meta-ads-mcp, applied to every repo carrying this job so the four stay identical. Measured on shields.io first: version-1.2.0+build.7-blue renders 1.2.0+build.7, version-1.2.0+build--2-blue renders 1.2.0+build-2. After the x.y.z core the regex now takes every character a prerelease or build suffix can carry, -- included, and stops at the first single dash (the colour separator), folding -- back afterwards. Verified on synthetic trees at 1.2.0-rc.1, 1.2.0+build.7, 1.2.0-rc.1+build.7, 1.2.0+build-2 and 1.2.0 (accepted), with a stale badge and with a badge missing the suffix (both rejected), and on this tree.

@BenKalsky

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 69dad48626

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@BenKalsky
BenKalsky merged commit 9ff4121 into main Sep 14, 2026
7 checks passed
@BenKalsky
BenKalsky deleted the ci/version-sync-and-drift-wait branch September 14, 2026 21:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant