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
{{ message }}
Repository navigation
Document the implemented extension architecture - #4978
Documents the extension architecture as it is implemented and tested today in design/extension.md, including manifest validation, catalog trust and precedence, lifecycle and rollback behavior, integration delivery, configuration and hooks, artifact resolution, bundled packaging, persistence, filesystem ownership, and current CLI/MCP boundaries.
Deletes the historical extensions/RFC-EXTENSION-SYSTEM.md after replacing its still-valid implemented architecture, and links the CLI design to the new normative document. This PR intentionally does not reorganize the public extension guides or change runtime behavior.
Testing
npx --no-install markdownlint-cli2 design/extension.md design/cli.md — passed with 0 issues.
Relative Markdown link and deleted-path validation script — passed; all relative links resolve and the obsolete RFC path is absent.
git diff --check — passed.
Tested locally with uv run specify --help
Ran existing tests with uv sync && uv run pytest
Tested with a sample project (if applicable)
Documentation-only architecture change; executable behavior and user workflows were not changed, so CLI, full-suite, and sample-project testing were not run.
AI Disclosure
I did not use AI assistance for this contribution
I did use AI assistance (fill in the disclosure below)
AI disclosure: GitHub Copilot using GPT-5.6 Sol in autonomous mode traced the implemented extension code and tests, authored the architecture documentation, removed the obsolete RFC, updated the cross-link, and ran the listed documentation validations on behalf of the contributor.
Documents Spec Kit’s implemented extension architecture without changing runtime behavior.
Changes:
Adds an architecture reference covering contracts, lifecycle, delivery, and trust boundaries.
Removes the historical RFC and links CLI design to the replacement.
AI disclosure: GitHub Copilot (model unknown, automated mode), reviewing for the requester (identity unavailable); analysis and wording are AI-generated.
File
Description
extensions/RFC-EXTENSION-SYSTEM.md
Removes the historical RFC.
design/extension.md
Documents current extension architecture and boundaries.
relative Markdown link validation for design/extension.md and design/cli.md — passed
deleted RFC path/reference check — passed
git diff --check — passed
AI disclosure: Written on behalf of contributor Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode; the review-fix documentation changes, inline replies, validation summary, and this comment are AI-generated.
Scope pre-copy and collision checks to generic registration
design/extension.md:187
These pre-copy settings and output-collision checks are specific to generic command registration (src/specify_cli/extensions/__init__.py:2484-2564). Other integrations do not run this output preflight, so the common lifecycle list promises protection they do not have. Scope this step to the generic integration.
AI disclosure: GitHub Copilot (model unknown, automated mode), for the requester (identity unavailable); review analysis and wording are AI-generated.
Separate configuration scaffolding from shared installation steps
design/extension.md:196
Configuration scaffolding is caller-specific, not shared by all installation routes. extension add, extension enable, and bundle installs call scaffold_config(), but _install_extension_during_init() and the update modules do not. Separate scaffolding from the manager's numbered steps so readers do not assume init --extension or an update creates declared configuration files.
AI disclosure: GitHub Copilot (model unknown, automated mode), for the requester (identity unavailable); review analysis and wording are AI-generated.
Distinguish HookExecutor behavior from command-template hook delivery
design/extension.md:272
This describes the HookExecutor helper API, but omits the shipped hook-delivery path. Core command templates read .specify/extensions.yml directly, skip every hook with a non-empty condition, and preserve YAML order rather than sorting by priority (templates/commands/tasks.md:28-58; docs/reference/extensions.md:341-350). Readers could otherwise expect a true condition to run a hook that the templates actually skip. Distinguish the helper behavior from the command-template behavior.
AI disclosure: GitHub Copilot (model unknown, automated mode), for the requester (identity unavailable); review analysis and wording are AI-generated.
Limit registry-write guarantees for symlinked extension roots
design/extension.md:346
This guarantee is not universal. ExtensionRegistry._save() (src/specify_cli/extensions/__init__.py:827-835) writes through a symlinked .specify/extensions root without checking containment. A focused check using the actual save method and file-change observer module confirmed that .registry is written outside the project when no observer is active. Scope the guarantee to guarded paths and document this registry-write limitation.
AI disclosure: GitHub Copilot (model unknown, automated mode), for the requester (identity unavailable); review analysis and wording are AI-generated.
relative Markdown link validation for design/extension.md and design/cli.md — passed
deleted RFC path/reference check — passed
git diff --check — passed
AI disclosure: Written on behalf of contributor Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode; the documentation review fixes, validation summary, and this comment are AI-generated.
The reason will be displayed to describe this comment to others. Learn more.
🟢 Approval recommended
The changes affect documentation only, and the remaining wording corrections are non-blocking.
0 open findings
Previously missed (2)
In code that hasn't changed since last review
Check Spec Kit compatibility before offering updates
design/extension.md:230
discover_updates() compares versions and checks catalog installability, but does not check Spec Kit compatibility (_command_update_discovery.py:87-143). Compatibility is enforced in preflight_update_archive() (_command_update_artifacts.py:137-138), after confirmation and before mutation. An incompatible release can therefore appear in the offered update list. Please attribute the compatibility check to preflight rather than discovery.
AI disclosure: GitHub Copilot (model unknown, autonomous review mode), for the requester (identity unavailable); analysis and wording are AI-generated.
Prevent undeclared root templates from shadowing core templates
design/extension.md:306
The no-fallback guarantee applies only to successfully validated manifests. _extension_manifest_declared_template() returns (None, None) on loading or validation errors (src/specify_cli/presets/_resolver.py:124-127), allowing conventional lookup. That lookup also searches the extension root for templates, so an undeclared root-level <name>.md can shadow a core template (:243-244,306-319,524-546). Please qualify the guarantee and include the root-level template fallback.
AI disclosure: GitHub Copilot (model unknown, autonomous review mode), for the requester (identity unavailable); analysis and wording are AI-generated.
Addressed the two previously missed wording findings from review 5538558312 in 3375ff6e7e33ee01a4bf979d84f5ef046162e9d3:
moved Spec Kit compatibility enforcement from update discovery to the post-selection, pre-mutation archive preflight where it actually occurs;
qualified manifest-authoritative artifact resolution and documented conventional fallback for absent, unreadable, invalid, or non-declaring manifests, including root-level template lookup before core assets.
relative Markdown link validation for design/extension.md and design/cli.md — passed
deleted RFC path/reference check — passed
git diff --check — passed
AI disclosure: Written on behalf of contributor Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode; the documentation review fixes, validation summary, and this comment are AI-generated.
The reason will be displayed to describe this comment to others. Learn more.
🟢 Approval recommended
Only a minor documentation clarification remains, with no blocking issues or runtime changes.
0 open findings
Previously missed (1)
In code that hasn't changed since last review
Fix extension command hierarchy reference
design/cli.md:15
The linked document describes extension-domain behavior and defers command adapter conventions back to cli.md (design/extension.md:8–14); it does not define a command-group layout. Keep the reference tied to the extension command hierarchy shown under “Nested command groups”, and link the domain architecture separately.
AI disclosure: GitHub Copilot (model unknown, automated review mode), for the requester (identity unavailable); review wording and suggested edit are AI-generated.
🧠 Review effort: Max
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
triage-nice-to-haveVerdict: evidence-backed fix or greenlit feature — land after review
2 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Documents the extension architecture as it is implemented and tested today in
design/extension.md, including manifest validation, catalog trust and precedence, lifecycle and rollback behavior, integration delivery, configuration and hooks, artifact resolution, bundled packaging, persistence, filesystem ownership, and current CLI/MCP boundaries.Deletes the historical
extensions/RFC-EXTENSION-SYSTEM.mdafter replacing its still-valid implemented architecture, and links the CLI design to the new normative document. This PR intentionally does not reorganize the public extension guides or change runtime behavior.Testing
npx --no-install markdownlint-cli2 design/extension.md design/cli.md— passed with 0 issues.Relative Markdown link and deleted-path validation script — passed; all relative links resolve and the obsolete RFC path is absent.
git diff --check— passed.Tested locally with
uv run specify --helpRan existing tests with
uv sync && uv run pytestTested with a sample project (if applicable)
Documentation-only architecture change; executable behavior and user workflows were not changed, so CLI, full-suite, and sample-project testing were not run.
AI Disclosure
AI disclosure: GitHub Copilot using GPT-5.6 Sol in autonomous mode traced the implemented extension code and tests, authored the architecture documentation, removed the obsolete RFC, updated the cross-link, and ran the listed documentation validations on behalf of the contributor.