You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: address PR review feedback for multi-catalog support
- Rename 'org-approved' catalog to 'default'
- Move 'catalogs' command to 'catalog list' for consistency
- Add 'description' field to CatalogEntry dataclass
- Add --description option to 'catalog add' CLI command
- Align install_allowed default to False in _load_catalog_config
- Add user-level config detection in catalog list footer
- Fix _load_catalog_config docstring (document ValidationError)
- Fix test isolation for test_search_by_tag, test_search_by_query,
test_search_verified_only, test_get_extension_info
- Update version to 0.1.14 and CHANGELOG
- Update all docs (RFC, User Guide, API Reference)
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,25 @@ Recent changes to the Specify CLI and templates are documented here.
7
7
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
8
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
10
+
## [0.1.14] - 2026-03-09
11
+
12
+
### Added
13
+
14
+
-**Multi-Catalog Support (#1707)**: Extension catalog system now supports multiple active catalogs simultaneously via a catalog stack
15
+
- New `specify extension catalog list` command lists all active catalogs with name, URL, priority, and `install_allowed` status
16
+
- New `specify extension catalog add` and `specify extension catalog remove` commands for project-scoped catalog management
17
+
- Default built-in stack includes `catalog.json` (default, installable) and `catalog.community.json` (community, discovery only) — community extensions are now surfaced in search results out of the box
18
+
-`specify extension search` aggregates results across all active catalogs, annotating each result with source catalog
19
+
-`specify extension add` enforces `install_allowed` policy — extensions from discovery-only catalogs cannot be installed directly
20
+
- Project-level `.specify/extension-catalogs.yml` and user-level `~/.specify/extension-catalogs.yml` config files supported, with project-level taking precedence
21
+
-`SPECKIT_CATALOG_URL` environment variable still works for backward compatibility (replaces full stack with single catalog)
22
+
- All catalog URLs require HTTPS (HTTP allowed for localhost development)
23
+
- New `CatalogEntry` dataclass in `extensions.py` for catalog stack representation
24
+
- Per-URL hash-based caching for non-default catalogs; legacy cache preserved for default catalog
25
+
- Higher-priority catalogs win on merge conflicts (same extension id in multiple catalogs)
26
+
- 13 new tests covering catalog stack resolution, merge conflicts, URL validation, and `install_allowed` enforcement
27
+
- Updated RFC, Extension User Guide, and Extension API Reference documentation
Copy file name to clipboardExpand all lines: extensions/RFC-EXTENSION-SYSTEM.md
+9-6Lines changed: 9 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -961,7 +961,7 @@ specify extension info jira
961
961
962
962
### Custom Catalogs
963
963
964
-
Spec Kit supports a **catalog stack** — an ordered list of catalogs that the CLI merges and searches across. This allows organizations to benefit from org-approved extensions, an internal catalog, and community discovery all at once.
964
+
Spec Kit supports a **catalog stack** — an ordered list of catalogs that the CLI merges and searches across. This allows organizations to maintain their own org-approved extensions alongside an internal catalog and community discovery, all at once.
965
965
966
966
#### Catalog Stack Resolution
967
967
@@ -978,29 +978,32 @@ When no config file exists, the CLI uses:
| 1 | `catalog.json` (org-approved) | `true` | Extensions your org approves for installation |
981
+
| 1 | `catalog.json` (default) | `true` | Curated extensions available for installation |
982
982
| 2 | `catalog.community.json` (community) | `false` | Discovery only — browse but not install |
983
983
984
-
This means `specify extension search` surfaces community extensions out of the box, while `specify extension add` is still restricted to org-approved entries.
984
+
This means `specify extension search` surfaces community extensions out of the box, while `specify extension add` is still restricted to entries from catalogs with `install_allowed: true`.
A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. When a project-level config is present, it takes full control and the built-in defaults are not applied.
@@ -1009,7 +1012,7 @@ A user-level equivalent lives at `~/.specify/extension-catalogs.yml`. When a pro
1009
1012
1010
1013
```bash
1011
1014
# List active catalogs with name, URL, priority, and install_allowed
0 commit comments