Skip to content

fix(release): marketplace.json owner + pyproject.toml version sync for v1.1.1 - #43

Merged
SHcommit merged 2 commits into
developfrom
fix/v1.1.1-hotfix
Sep 6, 2026
Merged

fix(release): marketplace.json owner + pyproject.toml version sync for v1.1.1#43
SHcommit merged 2 commits into
developfrom
fix/v1.1.1-hotfix

Conversation

@SHcommit

@SHcommit SHcommit commented Sep 6, 2026

Copy link
Copy Markdown
Owner

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 add blocked by missing owner field

.claude-plugin/marketplace.json was missing the owner field that Claude Code v2.1.263's marketplace schema requires. claude plugin marketplace add <repo> failed with:

✘ Failed to add marketplace: Invalid schema: .claude-plugin/marketplace.json owner: Invalid input

Fix: added $schema, a top-level description, and owner.name — mirroring the working Agent-toolkit/.claude-plugin/marketplace.json shape. plugin.json was 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'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:

adr-toolkit-skill-v1.1.0.tar.gz         ← correct
adr_toolkit-1.0.1-py3-none-any.whl      ← stale (1.0.1)
adr_toolkit-1.0.1.tar.gz                ← stale (1.0.1)

release.yml's "Verify tag matches VERSION" check only verified the skill VERSION against the tag, so the drift slipped through.

Fix: 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.

Changes

  • .claude-plugin/marketplace.json — added $schema, top-level description, owner.name.
  • scripts/sync_version.py — added TOML_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 via scripts/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-tracked pyproject.toml).
  • 6 new TOML sync tests re-run as standalone assertions: all pass (writes under [project], idempotent, --check-only, missing-section skip, other-table-untouched, real-repo drift guard returns 1.1.1 == 1.1.1).
  • ast.parse on both edited files: OK.
  • Full CI matrix (pytest × 6, type-check, lint, version-drift, harness-parity, examples-drift, dependency-audit, pr-title-check) will run on this PR.

Examples Impact

  • N/A — fix/release-wrap PR (fix(v1.1.1):), no examples/ change required per PR template.

ADR Impact

  • N/A — bugfix release, no architectural decision changed.

… 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.
@github-actions github-actions Bot added type:docs Documentation only type:test Test-only change area:core skills/adr-toolkit/scripts core and CLI commands area:adapter adapters/** and .claude-plugin/** harness integrations area:docs docs/**, README, CONTRIBUTING, and other project documentation labels Sep 6, 2026
@SHcommit SHcommit closed this Sep 6, 2026
@SHcommit SHcommit changed the title fix(v1.1.1): marketplace.json owner + pyproject.toml version sync fix(release): marketplace.json owner + pyproject.toml version sync for v1.1.1 Sep 6, 2026
@SHcommit SHcommit reopened this Sep 6, 2026
The initial PR #43 title fix(v1.1.1): ... did not match the
pr-title-check regex (scope v1.1.1 contains dots
@SHcommit
SHcommit merged commit 99153e9 into develop Sep 6, 2026
15 checks passed
@SHcommit
SHcommit deleted the fix/v1.1.1-hotfix branch September 6, 2026 09:57
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:adapter adapters/** and .claude-plugin/** harness integrations area:core skills/adr-toolkit/scripts core and CLI commands area:docs docs/**, README, CONTRIBUTING, and other project documentation type:docs Documentation only type:test Test-only change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant