🚨 Release-Please Version Drift — Diagnosis & Fix

PR #1946 proposed a 9.0.0 release. This page walks through why it happened and what this fix PR does.

State of version-tracked files

❌ Before this fix (origin/main)

FileVersion
.release-please-manifest.json8.1.0
version.txt8.1.0
package.json8.1.0
pyproject.toml8.1.0
.claude-plugin/marketplace.json (×2)8.1.0
manifests/ork.json8.1.0
CLAUDE.md (x-release-please tag)8.1.0
CHANGELOG.md (hand-written sections)8.1.0 + 7.96.0 drift

✅ After this fix

FileVersion
.release-please-manifest.json8.0.0
version.txt8.0.0
package.json8.0.0
pyproject.toml8.0.0
.claude-plugin/marketplace.json (×2)8.0.0
manifests/ork.json8.0.0
CLAUDE.md (x-release-please tag)8.0.0
CHANGELOG.mddrift sections removed

How the drift happened

1
v8.0.0 released cleanly via release-please PR #1922. Tag v8.0.0 created. Manifest sat at 8.0.0. ✅
2
PR #1920 (SQLite Layer 1) was squashed and contained an inner commit chore: bump to v8.1.0 + populate CHANGELOG that manually edited release-please's source-of-truth files. release-please owns these via .release-please-config.json extra-files — manual edits desync its state machine.
3
release-please ran on the next push and saw: manifest=8.1.0, no v8.1.0 tag exists, so it fell back to bootstrap-sha and re-scanned the full history. It re-encountered feat!: hard-delete monitors.json (#1919) (already shipped in v8.0.0) and the ! triggered a MAJOR bump.
compare/v8.1.0...v9.0.0   ← release-please's draft
                ↑ no such tag exists

The fix

1
Revert all 9 extra-files from 8.1.0 back to 8.0.0 (their state at the v8.0.0 tag). Remove hand-written [8.1.0] and [7.96.0] sections from CHANGELOG.md — release-please will regenerate them from commit messages.
2
Rebuild plugins/ so generated files (plugin.json, stop-uncommitted-check.mjs, plugins-data.ts, changelog-data.ts) pick up the corrected version.
3
After merge, release-please will: Close PR #1946; release-please will open a corrected version.

Prevention

!
Saved a feedback memory: never manually edit release-please extra-files in feature PRs. The list of governed files lives in .release-please-config.json under extra-files — any version bump there is release-please's job alone. Worth adding a pre-commit / CI guard that blocks PRs touching those files unless authored by orchestkit-release-bot[bot].