fix(release): marketplace.json owner + pyproject.toml version sync for v1.1.1 - #43
Merged
Conversation
… version Two gaps surfaced while deploying v1.1.0: 1) `.claude-plugin/marketplace.json` was missing the `owner` field that Claude Code v2.1.263's marketplace schema requires, so `claude plugin marketplace add <repo>` failed with "Invalid schema: ... owner: Invalid input". Added `$schema`, a top-level `description`, and `owner.name`, mirroring the working `Agent-toolkit/.claude-plugin/marketplace.json` shape. The existing `plugin.json` was already correct, so the symlink-based install kept working; this only unblocks fresh marketplace-add installs. 2) `pyproject.toml`'s `version` field was not in `scripts/sync_version.py`'s sync surface. The v1.1.0 GitHub Release shipped a skill tarball labeled v1.1.0 but a Python wheel/sdist labeled 1.0.1, and `release.yml`'s "tag matches VERSION" check only verified the skill VERSION against the tag, so the drift slipped through. Added `TOML_VERSION_SPECS` (currently `pyproject.toml` `[project]` table) and a new `sync_toml_version()` that rewrites the `version = "..."` line in-place by regex (Python 3.10 stdlib has no TOML writer; `tomli` is read-only). `require_known_paths()` now also asserts the `[project]` table is present, so a future structural edit that deletes the table fails loudly instead of silently dropping pyproject.toml out of the drift check. Added 6 regression tests in `tests/unit/test_sync_version.py` that pin the new behavior (writes under [project], leaves other tables untouched, idempotent, --check-only, skips when section missing, and a real-repo guard that fails the moment pyproject.toml drifts from skills/adr-toolkit/VERSION). Bumped VERSION 1.1.0 -> 1.1.1 and ran `scripts/sync_version.py` to propagate the bump to SKILL.md, .claude-plugin/plugin.json, adapters/gemini-cli/gemini-extension.json, adapters/antigravity/plugin.json, and pyproject.toml. Verification: - scripts/sync_version.py --check: exit 0 (no drift, including pyproject.toml). - 6 new TOML sync tests re-run as standalone assertions with Python 3.13: pass. - ast.parse on both edited files: OK.
The initial PR #43 title fix(v1.1.1): ... did not match the pr-title-check regex (scope v1.1.1 contains dots
This was referenced Sep 6, 2026
SHcommit
added a commit
that referenced
this pull request
Sep 6, 2026
chore(release): re-cut v1.1.1 with PR #43 hotfix (1.1.0 -> 1.1.1 on master)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hotfix for two gaps surfaced while deploying v1.1.0. Bumps VERSION 1.1.0 → 1.1.1 (PATCH — bugfix only, no new features).
Bug 1 —
claude plugin marketplace addblocked by missingownerfield.claude-plugin/marketplace.jsonwas missing theownerfield that Claude Code v2.1.263's marketplace schema requires.claude plugin marketplace add <repo>failed with:Fix: added
$schema, a top-leveldescription, andowner.name— mirroring the workingAgent-toolkit/.claude-plugin/marketplace.jsonshape.plugin.jsonwas already correct, so the symlink-based install kept working; this only unblocks fresh marketplace-based installs.Bug 2 — v1.1.0 wheel/sdist shipped with the wrong version
pyproject.toml'sversionfield was not inscripts/sync_version.py's sync surface. The v1.1.0 GitHub Release shipped a skill tarball labeledv1.1.0but a Python wheel/sdist labeled1.0.1:release.yml's "Verify tag matches VERSION" check only verified the skillVERSIONagainst the tag, so the drift slipped through.Fix: added
TOML_VERSION_SPECS(currentlypyproject.toml[project]table) and a newsync_toml_version()that rewrites theversion = "..."line in-place by regex (Python 3.10 stdlib has no TOML writer,tomliis read-only).require_known_paths()now also asserts the[project]table is present, so a future structural edit that deletes the table fails loudly instead of silently droppingpyproject.tomlout of the drift check.Changes
.claude-plugin/marketplace.json— added$schema, top-leveldescription,owner.name.scripts/sync_version.py— addedTOML_VERSION_SPECS,TOML_VERSION_LINE_RE,_section_header_re(),sync_toml_version();require_known_paths()asserts[project]table;main()calls the new sync.tests/unit/test_sync_version.py— +6 regression tests for TOML sync (writes, idempotent,--check-only, skips when section missing, leaves other tables untouched, real-repo drift guard).skills/adr-toolkit/VERSION,SKILL.md,.claude-plugin/plugin.json,adapters/gemini-cli/gemini-extension.json,adapters/antigravity/plugin.json,pyproject.toml— all synced to 1.1.1 viascripts/sync_version.py.changelog.md— new## v1.1.1 (2026-09-06)section.handoff.md— updated for the v1.1.1 hotfix flow.Why PATCH (1.1.0 → 1.1.1), not MINOR
SemVer: the v1.1.0 release artifacts were buggy (wrong wheel version, blocked marketplace install), but the shipped code itself doesn't gain a new feature or break compat. PATCH bump matches the severity. The MINOR features already shipped under v1.1.0.
Verification (local, Python 3.13 standalone — machine has no pytest installed user-scope)
scripts/sync_version.py --check: exit 0 (no drift, including the newly-trackedpyproject.toml).[project], idempotent,--check-only, missing-section skip, other-table-untouched, real-repo drift guard returns1.1.1 == 1.1.1).ast.parseon both edited files: OK.Examples Impact
fix(v1.1.1):), noexamples/change required per PR template.ADR Impact