Skip to content

Sync upstream github/spec-kit (v0.0.91–v0.0.98)#43

Open
mjunaidca wants to merge 11 commits intomainfrom
sync/upstream-feb-2026
Open

Sync upstream github/spec-kit (v0.0.91–v0.0.98)#43
mjunaidca wants to merge 11 commits intomainfrom
sync/upstream-feb-2026

Conversation

@mjunaidca
Copy link
Copy Markdown
Collaborator

Summary

  • Syncs 10 upstream commits from github/spec-kit since last sync (Dec 4, 2025)
  • Absorbs upstream versions v0.0.91 through v0.0.98 (Feb 9–19, 2026)
  • All 39 upstream tests pass, Python syntax validated, zero remaining conflict markers

Key Changes Absorbed

Conflict Resolutions

File Resolution
pyproject.toml Kept our version 0.0.20.post1 (upstream bumped to 0.1.0)
templates/plan-template.md Kept /sp.plan prefix (upstream uses /speckit.plan)
create-release-packages.sh Added agy agent + kept our generate_agent_rules; updated constitutionplus/command-rules paths from memory/templates/
README.md Kept SpecifyPlus branding, dropped upstream maintainers section (removed upstream too), preserved contributing section
templates/command-rules.md Accepted memory/templates/ relocation
templates/constitutionplus.md Accepted memory/templates/ relocation

Our Customizations Preserved

  • All /sp. command prefixes
  • Custom commands: /sp.phr, /sp.adr, /sp.reverse-engineer, /sp.git.commit_pr, /sp.taskstoissues
  • specifyplus/sp package naming and entry points
  • constitutionplus.md and command-rules.md templates
  • docs-plus/ directory, protocol-templates/AGENTS.md, agent-rules generation
  • PyPI workflow, README with SpecifyPlus branding

Post-Merge Review Items

  1. Verify sp extension list works after PyPI build (rename transforms specifysp)
  2. Consider setting SPECKIT_CATALOG_URL for a Panaversity extension catalog
  3. Add explicit agy) agent_name="Google Anti Gravity" in agent-rules name lookup
  4. Review stale.yml thresholds and dependabot.yml paths for fork
  5. Bump version to 0.0.21 for next release
  6. Add spec-kit-plus entries to CHANGELOG.md

Test plan

  • All 39 upstream extension tests pass
  • Python syntax validation passes
  • No remaining conflict markers
  • Manual: sp extension list works after install
  • Manual: /sp.phr, /sp.adr, /sp.reverse-engineer commands still function
  • Manual: Release packaging script builds all agents including agy

🤖 Generated with Claude Code

amuzip and others added 11 commits February 9, 2026 08:48
- Add language specifiers to fenced code blocks (bash, text)
- Fix whitespace issues around code fences
- Disable MD036 (emphasis as heading) for intentional warning text
- Disable MD060 (table column style) for existing table formats

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…ithub#1553)

Moves constitution template from memory/ to templates/ to prevent
overwrites when spec-kit is reinitialized with a different AI agent.

Changes:
- Move memory/constitution.md to templates/constitution-template.md
- Update CLI to copy template to memory/ only on first initialization
- Update constitution command to reference correct paths with .specify/ prefix
- Preserve existing constitution.md when reinitializing project

The CLI now checks if .specify/memory/constitution.md exists:
- If it exists: preserve it (no overwrite)
- If it doesn't exist: copy from .specify/templates/constitution-template.md

This allows users to customize their constitution without losing changes
when adding support for additional AI agents or reinitializing.

Fixes github#1541

Co-authored-by: jjoung1128 <jinwoong.joung@gmail.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* Add modular extension system for Spec Kit

Implement a complete extension system that allows third-party developers
to extend Spec Kit functionality through plugins.

## Core Features
- Extension discovery and loading from local and global directories
- YAML-based extension manifest (extension.yml) with metadata and capabilities
- Command extensions: custom slash commands with markdown templates
- Hook system: pre/post hooks for generate, task, and sync operations
- Extension catalog for discovering and installing community extensions
- SPECKIT_CATALOG_URL environment variable for catalog URL override

## Installation Methods
- Catalog install: `specify extension add <name>`
- URL install: `specify extension add <name> --from <url>`
- Dev install: `specify extension add --dev <path>`

## Implementation
- ExtensionManager class for lifecycle management (load, enable, disable)
- Support for extension dependencies and version constraints
- Configuration layering (global → project → extension)
- Hook conditions for conditional execution

## Documentation
- RFC with design rationale and architecture decisions
- API reference for extension developers
- Development guide with examples
- User guide for installing and managing extensions
- Publishing guide for the extension catalog

## Included
- Extension template for bootstrapping new extensions
- Comprehensive test suite
- Example catalog.json structure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update Jira extension to v2.1.0 in catalog

Adds 2-level mode support (Epic → Stories only).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Address PR review feedback

- Fix Zip Slip vulnerability in ZIP extraction with path validation
- Fix keep_config option to actually preserve config files on removal
- Add URL validation for SPECKIT_CATALOG_URL (HTTPS required, localhost exception)
- Add security warning when installing from custom URLs (--from flag)
- Empty catalog.json so organizations can ship their own catalogs
- Fix markdown linter errors (MD040: add language to code blocks)
- Remove redundant import and fix unused variables in tests
- Add comment explaining empty except clause for backwards compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add comprehensive organization catalog customization docs

- Explain why default catalog is empty (org control)
- Document how to create and host custom catalogs
- Add catalog JSON schema reference
- Include use cases: private extensions, curated catalogs, air-gapped environments
- Add examples for combining catalog with direct installation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix test assertions for extension system data structures

- Update test_config_backup_on_remove to use new subdirectory structure
  (.backup/test-ext/file.yml instead of .backup/test-ext-file.yml)
- Update test_full_install_and_remove_workflow to handle registered_commands
  being a dict keyed by agent name instead of a flat list

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Address Copilot review feedback

- Fix localhost URL check to use parsed.hostname instead of netloc.startswith()
  This correctly handles URLs with ports like localhost:8080
- Fix YAML indentation error in config-template.yml (line 57)
- Fix double space typo in example.md (line 172)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add catalog.example.json as reference for organizations

The main catalog.json is intentionally empty so organizations can ship
their own curated catalogs. This example file shows the expected schema
and structure for creating organization-specific catalogs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Address remaining Copilot security and logic review feedback

- Fix Zip Slip vulnerability by using relative_to() for safe path validation
- Add HTTPS validation for extension download URLs
- Backup both *-config.yml and *-config.local.yml files on remove
- Normalize boolean values to lowercase for hook condition comparisons
- Show non-default catalog warning only once per instance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Ignoring linter for extensions directory

---------

Co-authored-by: iamaeroplane <michal.bachorik@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Manfred Riem <manfred.riem@microsoft.com>
* Initial plan

* Add stale issues and PRs workflow

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

* Add 7-day grace period before closing stale items

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

* Update stale timing: mark at 150 days, close at 180 days

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>
* Add support for Antigravity (agy) agent

* fix a few things after gemini code update

* Fix missed merge conflicts

* As PR states it is IDE integration setting requires_cli to 'False'

---------

Co-authored-by: Manfred Riem <manfred.riem@microsoft.com>
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](actions/stale@v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
….0.98)

Key upstream changes absorbed:
- Modular extension system (PR github#1551): plugin architecture with YAML
  manifests, extension catalog, hook system, CLI management commands
- Constitution preservation on reinit (PR github#1553): template moved to
  templates/constitution-template.md, user customizations preserved
- .specify.specify path bug fix (PR github#1588): double-nesting resolved
- Google Anti Gravity agent support (PR github#1220): new agy agent in release
- Stale workflow (PR github#1594): auto-close inactive issues after 180 days
- Dependabot config (PR github#1622): automated pip and Actions updates
- Markdownlint fixes (PR github#1571), plan template typo (PR github#1446)
- README maintainers section removed (PR github#1618)

Conflict resolutions:
- pyproject.toml: kept our version (0.0.20.post1) over upstream 0.1.0
- plan-template.md: kept /sp.plan prefix over upstream /speckit.plan
- create-release-packages.sh: merged agy agent + kept our
  generate_agent_rules; updated constitutionplus/command-rules paths
  from memory/ to templates/ to match upstream rename
- README.md: kept our SpecifyPlus content, dropped upstream maintainers
  section (already removed upstream), preserved contributing section
- templates/command-rules.md, templates/constitutionplus.md: accepted
  memory/ → templates/ relocation matching upstream convention

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants