Skip to content

Commit 9ba47df

Browse files
committed
feat: improve catalog submission templates and CODEOWNERS
Simplify the community catalog submission flow to use issue templates with manual maintainer review (no automation scripts or workflows). - Add explicit CODEOWNERS entries for catalog.community.json files so submissions are automatically assigned to a maintainer for review - Improve preset submission template: - Add 'Required Extensions' optional field - Make 'Templates Provided' optional (supports command-only presets) - Add 'Number of Scripts' optional field The existing extension and preset issue templates already collect all required catalog metadata. Maintainers review submissions and manually update the catalog JSON files. Closes #2400
1 parent 9483e5c commit 9ba47df

4 files changed

Lines changed: 78 additions & 145 deletions

File tree

.github/CODEOWNERS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
# Global code owner
22
* @mnriem
33

4+
# Community catalog files — explicit ownership for when global ownership expands
5+
extensions/catalog.community.json @mnriem
6+
integrations/catalog.community.json @mnriem
7+
presets/catalog.community.json @mnriem
8+

.github/ISSUE_TEMPLATE/preset_submission.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,22 @@ body:
9595
validations:
9696
required: true
9797

98+
- type: input
99+
id: required-extensions
100+
attributes:
101+
label: Required Extensions (optional)
102+
description: Comma-separated list of required extension IDs (e.g., aide)
103+
placeholder: "e.g., aide, canon"
104+
98105
- type: textarea
99106
id: templates-provided
100107
attributes:
101108
label: Templates Provided
102-
description: List the template overrides your preset provides
109+
description: List the template overrides your preset provides (leave empty for command-only presets)
103110
placeholder: |
104111
- spec-template.md — adds compliance section
105112
- plan-template.md — includes audit checkpoints
106113
- checklist-template.md — HIPAA compliance checklist
107-
validations:
108-
required: true
109114
110115
- type: textarea
111116
id: commands-provided
@@ -115,6 +120,13 @@ body:
115120
placeholder: |
116121
- speckit.specify.md — customized for compliance workflows
117122
123+
- type: input
124+
id: scripts-count
125+
attributes:
126+
label: Number of Scripts (optional)
127+
description: How many scripts does your preset provide? (leave empty if none)
128+
placeholder: "e.g., 1"
129+
118130
- type: textarea
119131
id: tags
120132
attributes:
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: "Catalog: Auto-assign submission"
2+
3+
on:
4+
issues:
5+
types: [opened]
6+
7+
jobs:
8+
assign:
9+
if: >
10+
contains(github.event.issue.labels.*.name, 'extension-submission') ||
11+
contains(github.event.issue.labels.*.name, 'preset-submission')
12+
runs-on: ubuntu-latest
13+
permissions:
14+
issues: write
15+
steps:
16+
- uses: actions/github-script@v7
17+
with:
18+
script: |
19+
// Fetch team members from @github/spec-kit-maintainers
20+
let assignees;
21+
try {
22+
const members = await github.rest.teams.listMembersInOrg({
23+
org: 'github',
24+
team_slug: 'spec-kit-maintainers',
25+
});
26+
assignees = members.data.map(m => m.login);
27+
} catch (e) {
28+
// Fallback if team lookup fails (permissions, team doesn't exist yet)
29+
assignees = ['mnriem'];
30+
}
31+
32+
if (assignees.length > 0) {
33+
await github.rest.issues.addAssignees({
34+
owner: context.repo.owner,
35+
repo: context.repo.repo,
36+
issue_number: context.issue.number,
37+
assignees: assignees,
38+
});
39+
}

extensions/EXTENSION-PUBLISHING-GUIDE.md

Lines changed: 19 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -133,156 +133,33 @@ specify extension add <extension-name> --from https://github.com/your-org/spec-k
133133

134134
Spec Kit uses a dual-catalog system. For details about how catalogs work, see the main [Extensions README](README.md#extension-catalogs).
135135

136-
**For extension publishing**: All community extensions should be added to `catalog.community.json`. Users browse this catalog and copy extensions they trust into their own `catalog.json`.
136+
**For extension publishing**: All community extensions are listed in `extensions/catalog.community.json`. Users browse this catalog and copy extensions they trust into their own `catalog.json`.
137137

138-
### 1. Fork the spec-kit Repository
138+
### How to Submit
139139

140-
```bash
141-
# Fork on GitHub
142-
# https://github.com/github/spec-kit/fork
143-
144-
# Clone your fork
145-
git clone https://github.com/YOUR-USERNAME/spec-kit.git
146-
cd spec-kit
147-
```
140+
To submit your extension to the community catalog, file a new issue using the **[Extension Submission](https://github.com/github/spec-kit/issues/new?template=extension_submission.yml)** template. The template collects all required metadata, including:
148141

149-
### 2. Add Extension to Community Catalog
142+
- Extension ID, name, and version
143+
- Description, author, and license
144+
- Repository, download URL, and documentation links
145+
- Required Spec Kit version and any tool dependencies
146+
- Number of commands and hooks
147+
- Tags and key features
148+
- Testing confirmation
150149

151-
Edit `extensions/catalog.community.json` and add your extension:
150+
> [!IMPORTANT]
151+
> Do **not** open a pull request directly to edit the catalog JSON. All community extension submissions must go through the issue template so a maintainer can review the metadata and update the catalog.
152152

153-
```json
154-
{
155-
"schema_version": "1.0",
156-
"updated_at": "2026-01-28T15:54:00Z",
157-
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
158-
"extensions": {
159-
"your-extension": {
160-
"name": "Your Extension Name",
161-
"id": "your-extension",
162-
"description": "Brief description of your extension",
163-
"author": "Your Name",
164-
"version": "1.0.0",
165-
"download_url": "https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip",
166-
"repository": "https://github.com/your-org/spec-kit-your-extension",
167-
"homepage": "https://github.com/your-org/spec-kit-your-extension",
168-
"documentation": "https://github.com/your-org/spec-kit-your-extension/blob/main/docs/",
169-
"changelog": "https://github.com/your-org/spec-kit-your-extension/blob/main/CHANGELOG.md",
170-
"license": "MIT",
171-
"requires": {
172-
"speckit_version": ">=0.1.0",
173-
"tools": [
174-
{
175-
"name": "required-mcp-tool",
176-
"version": ">=1.0.0",
177-
"required": true
178-
}
179-
]
180-
},
181-
"provides": {
182-
"commands": 3,
183-
"hooks": 1
184-
},
185-
"tags": [
186-
"category",
187-
"tool-name",
188-
"feature"
189-
],
190-
"verified": false,
191-
"downloads": 0,
192-
"stars": 0,
193-
"created_at": "2026-01-28T00:00:00Z",
194-
"updated_at": "2026-01-28T00:00:00Z"
195-
}
196-
}
197-
}
198-
```
199-
200-
**Important**:
201-
202-
- Set `verified: false` (maintainers will verify)
203-
- Set `downloads: 0` and `stars: 0` (auto-updated later)
204-
- Use current timestamp for `created_at` and `updated_at`
205-
- Update the top-level `updated_at` to current time
206-
207-
### 3. Update Community Extensions Table
208-
209-
Add your extension to the Community Extensions table in the project root `README.md`:
210-
211-
```markdown
212-
| Your Extension Name | Brief description of what it does | `<category>` | <effect> | [repo-name](https://github.com/your-org/spec-kit-your-extension) |
213-
```
153+
### What Happens After You Submit
214154

215-
**(Table) Category** — pick the one that best fits your extension:
155+
1. Your issue is automatically labeled and assigned to the Spec Kit maintainers team for review
156+
2. A maintainer verifies that the metadata is complete and the download URL is accessible
157+
3. Once approved, the maintainer adds your extension to `extensions/catalog.community.json` and the Community Extensions table in the README
158+
4. Your extension becomes discoverable via `specify extension search`
216159

217-
- `docs` — reads, validates, or generates spec artifacts
218-
- `code` — reviews, validates, or modifies source code
219-
- `process` — orchestrates workflow across phases
220-
- `integration` — syncs with external platforms
221-
- `visibility` — reports on project health or progress
160+
### Updating an Existing Extension
222161

223-
**Effect** — choose one:
224-
225-
- Read-only — produces reports without modifying files
226-
- Read+Write — modifies files, creates artifacts, or updates specs
227-
228-
Insert your extension in alphabetical order in the table.
229-
230-
### 4. Submit Pull Request
231-
232-
```bash
233-
# Create a branch
234-
git checkout -b add-your-extension
235-
236-
# Commit your changes
237-
git add extensions/catalog.community.json README.md
238-
git commit -m "Add your-extension to community catalog
239-
240-
- Extension ID: your-extension
241-
- Version: 1.0.0
242-
- Author: Your Name
243-
- Description: Brief description
244-
"
245-
246-
# Push to your fork
247-
git push origin add-your-extension
248-
249-
# Create Pull Request on GitHub
250-
# https://github.com/github/spec-kit/compare
251-
```
252-
253-
**Pull Request Template**:
254-
255-
```markdown
256-
## Extension Submission
257-
258-
**Extension Name**: Your Extension Name
259-
**Extension ID**: your-extension
260-
**Version**: 1.0.0
261-
**Author**: Your Name
262-
**Repository**: https://github.com/your-org/spec-kit-your-extension
263-
264-
### Description
265-
Brief description of what your extension does.
266-
267-
### Checklist
268-
- [x] Valid extension.yml manifest
269-
- [x] README.md with installation and usage docs
270-
- [x] LICENSE file included
271-
- [x] GitHub release created (v1.0.0)
272-
- [x] Extension tested on real project
273-
- [x] All commands working
274-
- [x] No security vulnerabilities
275-
- [x] Added to extensions/catalog.community.json
276-
- [x] Added to Community Extensions table in README.md
277-
278-
### Testing
279-
Tested on:
280-
- macOS 13.0+ with spec-kit 0.1.0
281-
- Project: [Your test project]
282-
283-
### Additional Notes
284-
Any additional context or notes for reviewers.
285-
```
162+
To update an extension that is already in the catalog (e.g., for a new version), file a new **[Extension Submission](https://github.com/github/spec-kit/issues/new?template=extension_submission.yml)** issue with the updated version, download URL, and any other changed fields. Mention in the issue that this is an update to an existing entry.
286163

287164
---
288165

0 commit comments

Comments
 (0)