Repository navigation
[Feature]: Support multiple versions per ID across catalog types #4719
Description
Activity
- added a commit that references this issue
on Sep 24, 2026 - addedtriage-can-waitVerdict: valid and in-scope but deprioritized; held behind the evidence gateVerdict: valid and in-scope but deprioritized; held behind the evidence gate
on Sep 24, 2026 Delivery slices
- Extension catalog — feat(extensions): select exact catalog releases #4726
- Preset catalog — feat(presets): select exact catalog releases #4823
- Workflow catalog —feat(workflows): select exact workflow catalog releases #4788
- Step catalog — feat(workflows): select exact step catalog releases #4840
- Bundle catalog — feat(bundles): select exact bundle catalog releases #4849 - @markuswondrak
- Integration catalog (versioned metadata; historical install out of scope) — feat(integrations): expose versioned catalog metadata #4841
- Bundler (exact component pins and installed-version conflicts) — feat(bundles): reconcile exact component pins and version conflicts #4844
AI disclosure: GitHub Copilot (GPT-6 Sol, autonomous) updated the two completed checklist items at @mnriem's request.
Workflow catalog multi-release support is proposed in #4788 (workflow-only slice; bundle pinning and workflow steps remain separate). The PR includes exact-release catalog selection, CLI add/info options, selected-artifact validation, documentation, and regression tests. GitHub Copilot (GPT-6 Sol, autonomous mode) generated this update on behalf of @mnriem.
- added a commit that references this issue
on Sep 30, 2026 Nope feel free to take a slice. Just let me know which slice so we do not duplicate work
@mnriem Thanks. We'll take the Bundle catalog slice.
Scope: the bundle catalog's own release history.
- Optional
releasesmap on catalog entries - Exact lookup that never falls through past the winning source or onto discovery-only sources
bundle info <id> --versionsbundle install|add <id> --version <v>
Not in scope: component pins in
bundle.yml, installed-version conflicts,bundle validate, and any source selector. Those stay with the Bundler line and its pending PR, so this won't overlap with #4753.I'll link the PR here once it's open.
AI disclosure: posted on behalf of @markuswondrak by OpenCode (model: Claude Sonnet 5.5, supervised). The agent drafted this comment and the implementation plan; the contributor reviews and posts it.
- Optional
@mnriem One open point for the Bundle catalog slice: what should a release key in
releaseshave to satisfy?The merged slices differ here:
- Extensions / presets: keys are only checked with
packaging.Version(parseable, no duplicate of the current version or another key). - Workflows: keys must first pass the workflow manifest's own version rule (
_is_valid_workflow_version) and thenpackaging.Version.
Bundle manifests require strict SemVer (
src/specify_cli/bundles/manifest.py), so a non-SemVer release key could never pass the manifest check after download.- A)
packaging.Versiononly (like extensions/presets): a non-SemVer release fails at the manifest check after download. - B) Also require SemVer (like workflows apply their own rule): such an entry is rejected as malformed.
We lean towards B. Which do you prefer?
AI disclosure: drafted by GitHub Copilot CLI (model: Claude Sonnet 5.5, supervised) on behalf of @markuswondrak; the contributor reviews and posts it.
- Extensions / presets: keys are only checked with
Option B
- added a commit that references this issue
on Oct 7, 2026
Summary
Spec Kit catalogs currently resolve an ID to one advertised version. Customer-hosted, install-allowed catalogs should be able to retain multiple approved releases of the same ID and resolve either the advertised current release or an exact historical version. The failure in #4712 is one consequence: a bundle pins a component version, but after its catalog entry advances, the older release cannot be selected even if the artifact remains available.
Distinguish capability from publishing policy: The bundled community catalogs are discovery-only, current-tip listings. They do not need to publish historical releases, and this change must not turn them into install sources. Existing first-party and customer catalogs that publish only one version must continue to work.
Desired contract and CLI behavior
sourcefield.search,info,add,install, andupdatecommands. Expose available versions and exact selection consistently where appropriate (for example,info <id> --versionsand catalog-backedadd <id> --version <version>). Keep--fromas a direct-URL option, not a catalog selector. A bundle-level--versionwould select a bundle release; it must not override component pins inbundle.yml.integration install --versionis out of scope until historical integration implementations have a supported distribution/install contract. Document that distinction.Delivery requirement: dedicated PRs per area
Do not implement this as one cross-cutting PR. Deliver separate, reviewable PRs for each catalog family—extensions, presets, workflows, steps, bundles, and integrations—plus a separate bundler PR that consumes exact-version component resolution and handles pin/conflict behavior. If shared contracts or catalog utilities are required, introduce them in a dedicated foundation PR first. Each area PR should carry its own focused tests and documentation; land dependent work in a deliberate sequence so existing single-version behavior stays supported throughout.
Acceptance criteria
Related: #4712.