Skip to content

Commit 694517c

Browse files
iamaeroplaneclaude
andcommitted
Merge branch 'main' into feature/extension-priority-resolution
Resolved conflict in tests/test_extensions.py by keeping both: - Our TestExtensionPriority* test classes - Upstream's TestExtensionListCLI class from PR #1843 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2 parents cfecdf1 + 2cf332d commit 694517c

File tree

4 files changed

+135
-10
lines changed

4 files changed

+135
-10
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ See Spec-Driven Development in action across different scenarios with these comm
158158

159159
- **[Brownfield Java runtime extension](https://github.com/mnriem/spec-kit-java-brownfield-demo)** — Extends an existing open-source Jakarta EE runtime (Piranha, ~420,000 lines of Java, XML, JSP, HTML, and config files across 180 Maven modules) with a password-protected Server Admin Console, demonstrating spec-kit on a large multi-module Java project with no prior specs or constitution.
160160

161+
- **[Brownfield Go / React dashboard demo](https://github.com/mnriem/spec-kit-go-brownfield-demo)** — Demonstrates spec-kit driven entirely from the **terminal using GitHub Copilot CLI**. Extends NASA's open-source Hermes ground support system (Go) with a lightweight React-based web telemetry dashboard, showing that the full constitution → specify → plan → tasks → implement workflow works from the terminal.
162+
161163
## 🤖 Supported AI Agents
162164

163165
| Agent | Support | Notes |

extensions/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,16 @@ The following community-contributed extensions are available in [`catalog.commun
7272

7373
| Extension | Purpose | URL |
7474
|-----------|---------|-----|
75+
| Archive Extension | Archive merged features into main project memory. | [spec-kit-archive](https://github.com/stn1slv/spec-kit-archive) |
7576
| Azure DevOps Integration | Sync user stories and tasks to Azure DevOps work items using OAuth authentication | [spec-kit-azure-devops](https://github.com/pragya247/spec-kit-azure-devops) |
7677
| Cleanup Extension | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues | [spec-kit-cleanup](https://github.com/dsrednicki/spec-kit-cleanup) |
77-
| DocGuard — CDD Enforcement | Canonical-Driven Development enforcement. Generates, validates, scores, and traces project documentation against 92 automated checks with config-aware traceability, quality labels, and AI-ready fix prompts. Zero dependencies. | [spec-kit-docguard](https://github.com/raccioly/docguard) |
78+
| DocGuard — CDD Enforcement | Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero dependencies. | [spec-kit-docguard](https://github.com/raccioly/docguard) |
7879
| Fleet Orchestrator | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases | [spec-kit-fleet](https://github.com/sharathsatish/spec-kit-fleet) |
7980
| Jira Integration | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support | [spec-kit-jira](https://github.com/mbachorik/spec-kit-jira) |
8081
| Project Health Check | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git | [spec-kit-doctor](https://github.com/KhawarHabibKhan/spec-kit-doctor) |
82+
| Project Status | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary | [spec-kit-status](https://github.com/KhawarHabibKhan/spec-kit-status) |
8183
| Ralph Loop | Autonomous implementation loop using AI agent CLI | [spec-kit-ralph](https://github.com/Rubiss/spec-kit-ralph) |
84+
| Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
8285
| Retrospective Extension | Post-implementation retrospective with spec adherence scoring, drift analysis, and human-gated spec updates | [spec-kit-retrospective](https://github.com/emi-dm/spec-kit-retrospective) |
8386
| Review Extension | Post-implementation comprehensive code review with specialized agents for code quality, comments, tests, error handling, type design, and simplification | [spec-kit-review](https://github.com/ismaelJimenez/spec-kit-review) |
8487
| Spec Sync | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval | [spec-kit-sync](https://github.com/bgervin/spec-kit-sync) |

extensions/catalog.community.json

Lines changed: 103 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,39 @@
11
{
22
"schema_version": "1.0",
3-
"updated_at": "2026-03-13T12:00:00Z",
3+
"updated_at": "2026-03-16T00:00:00Z",
44
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
55
"extensions": {
6+
"archive": {
7+
"name": "Archive Extension",
8+
"id": "archive",
9+
"description": "Archive merged features into main project memory, resolving gaps and conflicts.",
10+
"author": "Stanislav Deviatov",
11+
"version": "1.0.0",
12+
"download_url": "https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.0.0.zip",
13+
"repository": "https://github.com/stn1slv/spec-kit-archive",
14+
"homepage": "https://github.com/stn1slv/spec-kit-archive",
15+
"documentation": "https://github.com/stn1slv/spec-kit-archive/blob/main/README.md",
16+
"changelog": "https://github.com/stn1slv/spec-kit-archive/blob/main/CHANGELOG.md",
17+
"license": "MIT",
18+
"requires": {
19+
"speckit_version": ">=0.1.0"
20+
},
21+
"provides": {
22+
"commands": 1,
23+
"hooks": 0
24+
},
25+
"tags": [
26+
"archive",
27+
"memory",
28+
"merge",
29+
"changelog"
30+
],
31+
"verified": false,
32+
"downloads": 0,
33+
"stars": 0,
34+
"created_at": "2026-03-14T00:00:00Z",
35+
"updated_at": "2026-03-14T00:00:00Z"
36+
},
637
"azure-devops": {
738
"name": "Azure DevOps Integration",
839
"id": "azure-devops",
@@ -75,12 +106,12 @@
75106
"updated_at": "2026-02-22T00:00:00Z"
76107
},
77108
"docguard": {
78-
"name": "DocGuard CDD Enforcement",
109+
"name": "DocGuard \u2014 CDD Enforcement",
79110
"id": "docguard",
80-
"description": "Canonical-Driven Development enforcement. Generates, validates, scores, and traces project documentation against 92 automated checks. Zero dependencies.",
111+
"description": "Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero dependencies.",
81112
"author": "raccioly",
82-
"version": "0.8.0",
83-
"download_url": "https://github.com/raccioly/docguard/releases/download/v0.8.0/spec-kit-docguard-v0.8.0.zip",
113+
"version": "0.9.8",
114+
"download_url": "https://github.com/raccioly/docguard/releases/download/v0.9.8/spec-kit-docguard-v0.9.8.zip",
84115
"repository": "https://github.com/raccioly/docguard",
85116
"homepage": "https://www.npmjs.com/package/docguard-cli",
86117
"documentation": "https://github.com/raccioly/docguard/blob/main/extensions/spec-kit-docguard/README.md",
@@ -98,7 +129,7 @@
98129
},
99130
"provides": {
100131
"commands": 6,
101-
"hooks": 1
132+
"hooks": 3
102133
},
103134
"tags": [
104135
"documentation",
@@ -108,13 +139,13 @@
108139
"traceability",
109140
"ai-agents",
110141
"enforcement",
111-
"scoring"
142+
"spec-kit"
112143
],
113144
"verified": false,
114145
"downloads": 0,
115146
"stars": 0,
116147
"created_at": "2026-03-13T00:00:00Z",
117-
"updated_at": "2026-03-13T00:00:00Z"
148+
"updated_at": "2026-03-15T20:00:00Z"
118149
},
119150
"doctor": {
120151
"name": "Project Health Check",
@@ -250,6 +281,37 @@
250281
"created_at": "2026-03-09T00:00:00Z",
251282
"updated_at": "2026-03-09T00:00:00Z"
252283
},
284+
"reconcile": {
285+
"name": "Reconcile Extension",
286+
"id": "reconcile",
287+
"description": "Reconcile implementation drift by surgically updating the feature's own spec, plan, and tasks.",
288+
"author": "Stanislav Deviatov",
289+
"version": "1.0.0",
290+
"download_url": "https://github.com/stn1slv/spec-kit-reconcile/archive/refs/tags/v1.0.0.zip",
291+
"repository": "https://github.com/stn1slv/spec-kit-reconcile",
292+
"homepage": "https://github.com/stn1slv/spec-kit-reconcile",
293+
"documentation": "https://github.com/stn1slv/spec-kit-reconcile/blob/main/README.md",
294+
"changelog": "https://github.com/stn1slv/spec-kit-reconcile/blob/main/CHANGELOG.md",
295+
"license": "MIT",
296+
"requires": {
297+
"speckit_version": ">=0.1.0"
298+
},
299+
"provides": {
300+
"commands": 1,
301+
"hooks": 0
302+
},
303+
"tags": [
304+
"reconcile",
305+
"drift",
306+
"tasks",
307+
"remediation"
308+
],
309+
"verified": false,
310+
"downloads": 0,
311+
"stars": 0,
312+
"created_at": "2026-03-14T00:00:00Z",
313+
"updated_at": "2026-03-14T00:00:00Z"
314+
},
253315
"retrospective": {
254316
"name": "Retrospective Extension",
255317
"id": "retrospective",
@@ -351,7 +413,7 @@
351413
"understanding": {
352414
"name": "Understanding",
353415
"id": "understanding",
354-
"description": "Automated requirements quality analysis validates specs against IEEE/ISO standards using 31 deterministic metrics. Catches ambiguity, missing testability, and structural issues before they reach implementation. Includes experimental energy-based ambiguity detection using local LM token perplexity.",
416+
"description": "Automated requirements quality analysis \u2014 validates specs against IEEE/ISO standards using 31 deterministic metrics. Catches ambiguity, missing testability, and structural issues before they reach implementation. Includes experimental energy-based ambiguity detection using local LM token perplexity.",
355417
"author": "Ladislav Bihari",
356418
"version": "3.4.0",
357419
"download_url": "https://github.com/Testimonial/understanding/archive/refs/tags/v3.4.0.zip",
@@ -389,6 +451,38 @@
389451
"created_at": "2026-03-07T00:00:00Z",
390452
"updated_at": "2026-03-07T00:00:00Z"
391453
},
454+
"status": {
455+
"name": "Project Status",
456+
"id": "status",
457+
"description": "Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary.",
458+
"author": "KhawarHabibKhan",
459+
"version": "1.0.0",
460+
"download_url": "https://github.com/KhawarHabibKhan/spec-kit-status/archive/refs/tags/v1.0.0.zip",
461+
"repository": "https://github.com/KhawarHabibKhan/spec-kit-status",
462+
"homepage": "https://github.com/KhawarHabibKhan/spec-kit-status",
463+
"documentation": "https://github.com/KhawarHabibKhan/spec-kit-status/blob/main/README.md",
464+
"changelog": "https://github.com/KhawarHabibKhan/spec-kit-status/blob/main/CHANGELOG.md",
465+
"license": "MIT",
466+
"requires": {
467+
"speckit_version": ">=0.1.0"
468+
},
469+
"provides": {
470+
"commands": 1,
471+
"hooks": 0
472+
},
473+
"tags": [
474+
"status",
475+
"workflow",
476+
"progress",
477+
"feature-tracking",
478+
"task-progress"
479+
],
480+
"verified": false,
481+
"downloads": 0,
482+
"stars": 0,
483+
"created_at": "2026-03-16T00:00:00Z",
484+
"updated_at": "2026-03-16T00:00:00Z"
485+
},
392486
"v-model": {
393487
"name": "V-Model Extension Pack",
394488
"id": "v-model",

tests/test_extensions.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2664,3 +2664,29 @@ def test_mixed_legacy_and_new_extensions_ordering(self, temp_dir):
26642664
assert result[0][0] == "ext-with-priority"
26652665
assert result[1][0] == "legacy-ext"
26662666
assert result[2][0] == "ext-low-priority"
2667+
2668+
2669+
class TestExtensionListCLI:
2670+
"""Test extension list CLI output format."""
2671+
2672+
def test_list_shows_extension_id(self, extension_dir, project_dir):
2673+
"""extension list should display the extension ID."""
2674+
from typer.testing import CliRunner
2675+
from unittest.mock import patch
2676+
from specify_cli import app
2677+
2678+
runner = CliRunner()
2679+
2680+
# Install the extension using the manager
2681+
manager = ExtensionManager(project_dir)
2682+
manager.install_from_directory(extension_dir, "0.1.0", register_commands=False)
2683+
2684+
with patch.object(Path, "cwd", return_value=project_dir):
2685+
result = runner.invoke(app, ["extension", "list"])
2686+
2687+
assert result.exit_code == 0, result.output
2688+
# Verify the extension ID is shown in the output
2689+
assert "test-ext" in result.output
2690+
# Verify name and version are also shown
2691+
assert "Test Extension" in result.output
2692+
assert "1.0.0" in result.output

0 commit comments

Comments
 (0)