headroom/plugins
Tejas Chopra a8e3ae52e9 fix(release): sync generated version metadata on the release branch
The 0.33.0 release PR (#2339) has been blocked since 2026-07-17 in
changes-requested, because release-please only rewrites `pyproject.toml` and its
configured `extra-files`. `server.json` is asserted byte-for-byte against
`render_server_json()`, which reads the version from `pyproject.toml`, so the
bump alone fails `test_root_server_json_matches_builder` on the release PR —
the `test (2)` shard. Nothing in the repo regenerated `server.json` at all.

`release.yml` already runs `version-sync.py` before its own `verify-versions.py`
gate (lines 145/278), which is why `build` and `build-wheels` pass on the release
PR despite the drift — it syncs in the workspace, uncommitted. The regular CI test
job does not sync, so the fix has to be committed to the branch.

- `scripts/version-sync.py`: also write `server.json`. It was the one
  version-carrying file with no writer anywhere, so it fell behind every release.
  Values are rewritten in place so key order and formatting keep matching the
  builder's byte-for-byte output.
- `.github/workflows/release-metadata-sync.yml` (new): on a push to
  `release-please--branches--**`, run version-sync, gate on verify-versions, and
  commit if anything changed. Keyed off the branch push because release-please
  force-regenerates that branch on every merge to main — that is what repeatedly
  wiped the hand-pushed metadata fixes on #2339. Uses the same PAT as
  release-please.yml, since a GITHUB_TOKEN push would not re-trigger the release
  PR's checks. Idempotent, so the self-triggered rerun no-ops instead of looping.
- Corrected the pre-existing drift on main: the agent-hooks plugin manifests,
  both marketplace manifests, and `.releasemetadata` were stranded at 0.31.0 and
  were never bumped for 0.32.0 either. `verify-versions.py` now passes on main.

Chose running the script over adding ~13 `extra-files` jsonpath entries: the
script is the single place that knows these locations, and a jsonpath that fails
to match is silent — the same class of failure this removes. There is also no
precedent for nested jsonpath in the config today.

Tests: `test_server_json_version_is_synchronized`,
`test_release_metadata_sync_runs_on_release_please_branch`, and
`test_version_sync_covers_every_file_the_verifier_gates` (guards the two scripts
against drifting apart again).

Not addressed: PyPI is at 9.69GB of its 10GB project cap; the 0.21.x series alone
holds 6.58GB across 31 releases. Roughly 4 more releases fit before that blocks.
2026-07-29 14:57:39 -07:00
..
headroom-agent-hooks fix(release): sync generated version metadata on the release branch 2026-07-29 14:57:39 -07:00
headroom-oauth2 chore: remove committed node_modules + stray/internal markdown (repo hygiene) (#1528) 2026-06-27 23:32:54 -07:00
hermes fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
openclaw deps: bump the npm-minor-patch group across 3 directories with 7 updates (#2276) 2026-07-21 11:21:14 -05:00
opencode feat(opencode): ship the transport plugin in pip installs (#2601) 2026-07-27 06:40:43 -07:00