Skip to content

Fix #4345 (2/4): bump drifted bundled extension versions and sync the catalog - #4394

Open
CrazyBaran wants to merge 5 commits into
github:mainfrom
CrazyBaran:fix/4345-version-bumps-catalog-sync
Open

CrazyBaran wants to merge 5 commits into
github:mainfrom
CrazyBaran:fix/4345-version-bumps-catalog-sync

Conversation

@CrazyBaran

@CrazyBaran CrazyBaran commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Fixes the version-drift half of #4345: the bundled agent-context and git extensions had accumulated content changes without a version bump (and assess a smaller one), so specify extension update compared equal semvers and reported "Up to date" forever on already-installed copies — the shipped fixes were never delivered.

Scope (part 2 of the split requested in review)

Following @mnriem's request to split the original #4351 into four parts, this PR carries part 2 — version/catalog bumps and bundle-pin updates, based on latest main:

  • extensions/agent-context/extension.yml, extensions/git/extension.yml1.1.0; extensions/assess/extension.yml1.0.1
  • extensions/catalog.json synced to the same versions — the catalog is what extension update compares against, and its preflight rejects a manifest whose version differs from the catalog's, so the two must move together
  • examples/bundles/*/bundle.yml pins moved to agent-context 1.1.0
  • bundler test fixtures now read the pinned version from the example bundles instead of hardcoding it (tests/bundler_helpers.py), so future bumps don't have to touch every fixture; plus the git manifest version pin in its test

All content is byte-identical to what was already reviewed on #4351 through the previous rounds — only re-partitioned.

⚠ Sequencing: merge after #4351

This PR changes the live catalog that already-released CLIs fetch from main (extensions/catalog.json). Without the local bundled-update support from #4351, a released CLI that sees these bumped versions would offer an update it then fails to install — bundled extensions have no download URL. Per the sequence suggested in review:

  1. Fix #4345 (1/4): install bundled extension updates from the local package #4351 (local bundled-update support) merges and ships in a release first
  2. then this PR lands, and upgraded CLIs deliver the bumped extensions from their local package while older CLIs are told to upgrade spec-kit

The other parts

  1. CI version-bump guardFix #4345 (3/4): CI guard requiring version bumps on bundled extension changes #4395 (independent; once merged it will also validate this PR's bump/catalog sync)
  2. Content-hash staleness detectionfeat/4345-content-staleness-detection, stacked on Fix #4345 (1/4): install bundled extension updates from the local package #4351

Refs #4345.

🤖 Generated with Claude Code

Jakub Baranowski and others added 2 commits September 1, 2026 19:33
…xt, git 1.1.0; assess 1.0.1)

The bundled agent-context and git extensions have carried version 1.0.0
since they were created while their content kept changing - including
fixes for failures that made them unusable on some platforms
(agent-context: 15 commits, +1,120/-169 across 7 of its 8 files;
git: 23 commits, +2,191/-567 across all 21 files). Because
`specify extension update` compares semver only, every installed copy
is reported "Up to date (v1.0.0)" forever and never receives those
fixes (github#4345).

Bump both manifests to 1.1.0 and sync extensions/catalog.json so
existing installs finally see an available update. assess also drifted
(one docs-only change to a shipped command file since its version was
set), so it gets a patch bump to 1.0.1; bug has no drift and stays at
1.0.0.

Refs github#4345

Assisted-by: Claude Code (model: claude-fable-5, autonomous)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…em in fixtures

Copilot review round 3 on github#4351: the agent-context bump left every
checked-in bundle pinned to 1.0.0. BundleExtensionPrimitive enforces
exact pins against the bundled manifest, so the offline installs in
tests/integration/test_bundler_local_install.py and
test_bundler_init_install.py failed, and all four
examples/bundles/*/bundle.yml examples stopped being installable.

- examples/bundles/{business-analyst,developer,product-manager,
  security-researcher}/bundle.yml: agent-context pin 1.0.0 -> 1.1.0
  (exact pins are the point of the example format, so they stay
  literal).
- The two integration-test fixtures now resolve the pin through a new
  tests/bundler_helpers.bundled_extension_version() helper, which reads
  the version via the same _locate_bundled_extension lookup the
  primitive enforces against - so the fixtures test the bundler's pin
  mechanics rather than a frozen version literal, and the next
  legitimate extension bump cannot silently break them again.

The git and assess extensions are not pinned by any checked-in bundle;
tests/contract/test_bundle_cli.py's 1.0.0 pin feeds `bundle validate`,
which checks existence only, and keeps passing unchanged.

Refs github#4345

Assisted-by: Claude Code (model: claude-fable-5, autonomous)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Catalog publication must wait until #4351 is merged and shipped, and that prerequisite remains open.

Pull request overview

Synchronizes bundled extension versions so updates can detect and deliver previously drifted content.

Changes:

  • Bumps agent-context and git to 1.1.0, and assess to 1.0.1.
  • Synchronizes the built-in catalog and example bundle pins.
  • Derives test fixture pins from bundled manifests.
File summaries
File Description
extensions/agent-context/extension.yml Bumps agent-context version.
extensions/assess/extension.yml Bumps assess version.
extensions/git/extension.yml Bumps git version.
extensions/catalog.json Synchronizes catalog versions and timestamp.
examples/bundles/business-analyst/bundle.yml Updates agent-context pin.
examples/bundles/developer/bundle.yml Updates agent-context pin.
examples/bundles/product-manager/bundle.yml Updates agent-context pin.
examples/bundles/security-researcher/bundle.yml Updates agent-context pin.
tests/bundler_helpers.py Adds bundled-version lookup helper.
tests/integration/test_bundler_init_install.py Uses the current bundled version.
tests/integration/test_bundler_local_install.py Uses the current bundled version.
tests/extensions/git/test_git_extension.py Updates the expected git version.
Review details
  • Files reviewed: 12/12 changed files
  • Comments generated: 0
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@mnriem mnriem added triage-must-have Verdict: high-value, important work for Spec Kit — do first triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review and removed triage-must-have Verdict: high-value, important work for Spec Kit — do first labels Sep 11, 2026
@CrazyBaran

Copy link
Copy Markdown
Contributor Author

@mnriem — all the other parts of the #4345 series have now landed, and this is the last piece.

Merging this is what actually triggers the update: until the catalog advertises the new versions, specify extension update keeps reporting "Up to date" to every project that installed agent-context or git before the fixes landed — users who don't know they are running stale copies. Once this lands, the next extension update picks them up automatically.

Happy to rebase if you'd like it on top of the latest main first.

🤖 Generated with Claude Code

…45-version-bumps-catalog-sync

# Conflicts:
#	tests/integration/test_bundler_local_install.py
Copilot AI review requested due to automatic review settings September 19, 2026 09:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Publishing the catalog before a release contains these bumped manifests leaves released clients unable to install the advertised updates.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 High severity · 2 Medium severity

Open (3)

Comment thread extensions/catalog.json
Comment thread extensions/catalog.json
Comment thread tests/bundler_helpers.py
Address Copilot review on github#4394.

The version bumps are only useful if a copy installed before them is
actually offered an update, and until now nothing proved that with the
real data: unit tests drive the local-package update route with synthetic
extensions, and the version contract only checks catalog/manifest
equality. Add tests/contract/test_bundled_extension_update_delivery.py,
which installs each bundled extension's real source with its manifest
rewritten to the pre-bump 1.0.0, runs `extension update` against the real
catalog entry and the real bundled copy (download must never be
attempted), and asserts the install reaches the catalog version. The
three extensions that had drifted at 1.0.0 when github#4345 was filed
(agent-context, git, assess) must stay bumped past it - reverting one is
a failure, not a skip - while an unbumped extension (bug) skips. A
companion test asserts an install already at the bundled version is
reported up to date, so fresh installs cannot loop.

Fixtures now derive their pins from the bundled manifest, so the four
changed examples/bundles/*/bundle.yml pins were no longer exercised by
any test even though BundleExtensionPrimitive enforces exact pins. Add a
contract test that parses every example bundle and checks each bundled
extension pin against its manifest version; it fails when an example is
left on a previous version.

Refs github#4345

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 19, 2026 09:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The delivery regression suite can silently omit a previously drifted extension from its parameterized coverage.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
Resolved since last review (3)

Comment thread tests/contract/test_bundled_extension_update_delivery.py Outdated
…he delivery tests

Address Copilot review round 2 on github#4394.

The update-delivery tests draw their parametrized cases from the live
catalog, so an extension that lost its `bundled` flag, its catalog entry,
or its in-repo manifest silently dropped out of both tests, and the
DRIFTED_BEFORE_BUMP guard inside them never ran for it. The previous
presence test only asserted the case list was non-empty.

Replace it with test_drifted_extensions_are_covered, which asserts every
extension in DRIFTED_BEFORE_BUMP is still a bundled, in-repo catalog
entry. De-bundling one of them is a deliberate decision that should
update that set rather than silently shrink coverage. Verified: clearing
the bundled flag on `assess` drops its cases from the parametrized tests
and this test is the only one that fails.

Refs github#4345

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 19, 2026 10:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟢 Approval recommended

Manifests, catalog entries, bundle pins, and focused regression coverage are consistently synchronized.

Review effort: Balanced
Findings: None

Resolved since last review (1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants