Files
spec-kit/CHANGELOG.md
Copilot ee922cbde9 feat(extensions): support multiple active catalogs simultaneously (#1720)
* Initial plan

* feat(extensions): implement multi-catalog stack support

- Add CatalogEntry dataclass to represent catalog entries
- Add get_active_catalogs() reading SPECKIT_CATALOG_URL, project config,
  user config, or built-in default stack (org-approved + community)
- Add _load_catalog_config() to parse .specify/extension-catalogs.yml
- Add _validate_catalog_url() HTTPS validation helper
- Add _fetch_single_catalog() with per-URL caching, backward-compat for DEFAULT_CATALOG_URL
- Add _get_merged_extensions() that merges all catalogs (priority wins on conflict)
- Update search() and get_extension_info() to use merged results
  annotated with _catalog_name and _install_allowed
- Update clear_cache() to also remove per-URL hash cache files
- Add extension_catalogs CLI command to list active catalogs
- Add catalog add/remove sub-commands for .specify/extension-catalogs.yml
- Update extension_add to enforce install_allowed=false policy
- Update extension_search to show source catalog per result
- Update extension_info to show source catalog with install_allowed status
- Add 13 new tests covering catalog stack, merge conflict resolution,
  install_allowed enforcement, and catalog metadata

Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com>

* docs: update RFC, user guide, and API reference for multi-catalog support

- RFC: replace FUTURE FEATURE section with full implementation docs,
  add catalog stack resolution order, config file examples, merge
  conflict resolution, and install_allowed behavior
- EXTENSION-USER-GUIDE.md: add multi-catalog section with CLI examples
  for catalogs/catalog-add/catalog-remove, update catalog config docs
- EXTENSION-API-REFERENCE.md: add CatalogEntry class docs, update
  ExtensionCatalog docs with new methods and result annotations,
  add catalog CLI commands (catalogs, catalog add, catalog remove)

Also fix extension_catalogs command to correctly show "Using built-in
default catalog stack" when config file exists but has empty catalogs

Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com>

* Potential fix for pull request finding 'Empty except'

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* fix: remove extraneous f-string prefixes (ruff F541)

Remove f-prefix from strings with no placeholders in catalog_remove
and extension_search commands.

Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com>

* 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)

* fix: wrap _load_catalog_config() calls in catalog_list with try/except

- Check SPECKIT_CATALOG_URL first (matching get_active_catalogs() resolution order)
- Wrap both _load_catalog_config() calls in try/except ValidationError so a
  malformed config file cannot crash `specify extension catalog list` after
  the active catalogs have already been printed successfully

Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
2026-03-09 14:30:27 -05:00

7.9 KiB

Changelog

Recent changes to the Specify CLI and templates are documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.1.14] - 2026-03-09

Added

  • feat: add Tabnine CLI agent support
  • Multi-Catalog Support (#1707): Extension catalog system now supports multiple active catalogs simultaneously via a catalog stack
    • New specify extension catalog list command lists all active catalogs with name, URL, priority, and install_allowed status
    • New specify extension catalog add and specify extension catalog remove commands for project-scoped catalog management
    • 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
    • specify extension search aggregates results across all active catalogs, annotating each result with source catalog
    • specify extension add enforces install_allowed policy — extensions from discovery-only catalogs cannot be installed directly
    • Project-level .specify/extension-catalogs.yml and user-level ~/.specify/extension-catalogs.yml config files supported, with project-level taking precedence
    • SPECKIT_CATALOG_URL environment variable still works for backward compatibility (replaces full stack with single catalog)
    • All catalog URLs require HTTPS (HTTP allowed for localhost development)
    • New CatalogEntry dataclass in extensions.py for catalog stack representation
    • Per-URL hash-based caching for non-default catalogs; legacy cache preserved for default catalog
    • Higher-priority catalogs win on merge conflicts (same extension id in multiple catalogs)
    • 13 new tests covering catalog stack resolution, merge conflicts, URL validation, and install_allowed enforcement
    • Updated RFC, Extension User Guide, and Extension API Reference documentation

[0.1.13] - 2026-03-03

Changed

  • feat: add kiro-cli and AGENT_CONFIG consistency coverage (#1690)
  • feat: add verify extension to community catalog (#1726)
  • Add Retrospective Extension to community catalog README table (#1741)
  • fix(scripts): add empty description validation and branch checkout error handling (#1559)
  • fix: correct Copilot extension command registration (#1724)
  • fix(implement): remove Makefile from C ignore patterns (#1558)
  • Add sync extension to community catalog (#1728)
  • fix(checklist): clarify file handling behavior for append vs create (#1556)
  • fix(clarify): correct conflicting question limit from 10 to 5 (#1557)
  • chore: bump version to 0.1.12 (#1737)
  • fix: use RELEASE_PAT so tag push triggers release workflow (#1736)
  • fix: release-trigger uses release branch + PR instead of direct push to main (#1733)
  • fix: Split release process to sync pyproject.toml version with git tags (#1732)

[0.1.13] - 2026-03-03

Fixed

  • Copilot Extension Commands Not Visible: Fixed extension commands not appearing in GitHub Copilot when installed via specify extension add --dev
    • Changed Copilot file extension from .md to .agent.md in CommandRegistrar.AGENT_CONFIGS so Copilot recognizes agent files
    • Added generation of companion .prompt.md files in .github/prompts/ during extension command registration, matching the release packaging behavior
    • Added cleanup of .prompt.md companion files when removing extensions via specify extension remove
  • Fixed a syntax regression in src/specify_cli/__init__.py in _build_ai_assistant_help() that broke ruff and pytest collection in CI.

[0.1.12] - 2026-03-02

Changed

  • fix: use RELEASE_PAT so tag push triggers release workflow (#1736)
  • fix: release-trigger uses release branch + PR instead of direct push to main (#1733)
  • fix: Split release process to sync pyproject.toml version with git tags (#1732)

[0.1.10] - 2026-03-02

Fixed

  • Version Sync Issue (#1721): Fixed version mismatch between pyproject.toml and git release tags
    • Split release process into two workflows: release-trigger.yml for version management and release.yml for artifact building
    • Version bump now happens BEFORE tag creation, ensuring tags point to commits with correct version
    • Supports both manual version specification and auto-increment (patch version)
    • Git tags now accurately reflect the version in pyproject.toml at that commit
    • Prevents confusion when installing from source

[0.1.9] - 2026-02-28

Changed

  • Updated dependency: bumped astral-sh/setup-uv from 6 to 7

[0.1.8] - 2026-02-28

Changed

  • Updated dependency: bumped actions/setup-python from 5 to 6

[0.1.7] - 2026-02-27

Changed

  • Updated outdated GitHub Actions versions
  • Documented dual-catalog system for extensions

Fixed

  • Fixed version command in documentation

Added

  • Added Cleanup Extension to README
  • Added retrospective extension to community catalog

[0.1.6] - 2026-02-23

Fixed

  • Parameter Ordering Issues (#1641): Fixed CLI parameter parsing issue where option flags were incorrectly consumed as values for preceding options
    • Added validation to detect when --ai or --ai-commands-dir incorrectly consume following flags like --here or --ai-skills
    • Now provides clear error messages: "Invalid value for --ai: '--here'"
    • Includes helpful hints suggesting proper usage and listing available agents
    • Commands like specify init --ai-skills --ai --here now fail with actionable feedback instead of confusing "Must specify project name" errors
    • Added comprehensive test suite (5 new tests) to prevent regressions

[0.1.5] - 2026-02-21

Fixed

  • AI Skills Installation Bug (#1658): Fixed --ai-skills flag not generating skill files for GitHub Copilot and other agents with non-standard command directory structures
    • Added commands_subdir field to AGENT_CONFIG to explicitly specify the subdirectory name for each agent
    • Affected agents now work correctly: copilot (.github/agents/), opencode (.opencode/command/), windsurf (.windsurf/workflows/), codex (.codex/prompts/), kilocode (.kilocode/workflows/), q (.amazonq/prompts/), and agy (.agent/workflows/)
    • The install_ai_skills() function now uses the correct path for all agents instead of assuming commands/ for everyone

[0.1.4] - 2026-02-20

Fixed

  • Qoder CLI detection: Renamed AGENT_CONFIG key from "qoder" to "qodercli" to match the actual executable name, fixing specify check and specify init --ai detection failures

[0.1.3] - 2026-02-20

Added

  • Generic Agent Support: Added --ai generic option for unsupported AI agents ("bring your own agent")
    • Requires --ai-commands-dir <path> to specify where the agent reads commands from
    • Generates Markdown commands with $ARGUMENTS format (compatible with most agents)
    • Example: specify init my-project --ai generic --ai-commands-dir .myagent/commands/
    • Enables users to start with Spec Kit immediately while their agent awaits formal support

[0.0.102] - 2026-02-20

  • fix: include 'src/**' path in release workflow triggers (#1646)

[0.0.101] - 2026-02-19

  • chore(deps): bump github/codeql-action from 3 to 4 (#1635)

[0.0.100] - 2026-02-19

  • Add pytest and Python linting (ruff) to CI (#1637)
  • feat: add pull request template for better contribution guidelines (#1634)

[0.0.99] - 2026-02-19

  • Feat/ai skills (#1632)

[0.0.98] - 2026-02-19

  • chore(deps): bump actions/stale from 9 to 10 (#1623)
  • feat: add dependabot configuration for pip and GitHub Actions updates (#1622)

[0.0.97] - 2026-02-18

  • Remove Maintainers section from README.md (#1618)

[0.0.96] - 2026-02-17

  • fix: typo in plan-template.md (#1446)

[0.0.95] - 2026-02-12

  • Feat: add a new agent: Google Anti Gravity (#1220)

[0.0.94] - 2026-02-11

  • Add stale workflow for 180-day inactive issues and PRs (#1594)