Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bundle_submission.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Bundle Submission
description: Submit your bundle metadata for community catalog validation
title: "[Bundle]: Add "
labels: ["enhancement", "needs-triage"]
labels: ["triage-must-have"]
body:
- type: markdown
attributes:
Expand All @@ -16,7 +16,7 @@ body:
- If you host a bundle catalog, test catalog installation with `specify bundle catalog add <catalog-url> --id <catalog-id> --policy install-allowed` and `specify bundle install <bundle-id>`
- If your bundle depends on components from non-default catalogs, document those catalog URLs and test installation from a clean project

**After submitting:** a maintainer applies the `bundle-submission` label during issue triage, which starts the automated catalog validation. You don't need to apply any label or ask for one.
**After submitting:** GitHub automatically applies the `triage-must-have` intake verdict. A maintainer separately applies the `bundle-submission` label during issue triage, which starts the automated catalog validation. You don't need to apply any label or ask for one.

- type: input
id: bundle-id
Expand Down
8 changes: 8 additions & 0 deletions docs/reference/bundles.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,14 @@ Bundle authors validate and package bundles locally, then host the generated art

If your bundle references components from non-default catalogs, document those catalog URLs and test the install path from a clean project with those catalogs added. Community bundle submissions should include that dependency-resolution evidence in the [Bundle Submission](https://github.com/github/spec-kit/issues/new?template=bundle_submission.yml) issue.

### What Happens After You Submit

1. GitHub applies the `triage-must-have` verdict when the issue is opened through the Bundle Submission form. Bundle submissions join extension and preset submissions in using this intake automation; the manual triage rubric for other issues remains unchanged.
2. A maintainer reviews the issue during issue triage and applies the separate `bundle-submission` label, which starts the automated catalog validation. On this public repository, contributors cannot apply that label themselves, so there is nothing to label or re-request — the issue simply waits in triage.
3. The automated workflow validates the submission and, when validation passes, updates `bundles/catalog.community.json` and `docs/community/bundles.md` in a draft pull request
4. A maintainer reviews the generated pull request and merges it when approved
5. Your bundle becomes discoverable via `specify bundle search`

## Manage Catalog Sources

Bundles are discovered through a priority-ordered stack of catalog sources (project, user, and built-in scopes). The built-in sources are:
Expand Down
11 changes: 10 additions & 1 deletion tests/test_github_workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -515,12 +515,21 @@ def test_preset_submission_form_applies_only_automatic_intake_verdict():
assert "preset-submission" not in preset_form["labels"]


def test_bundle_submission_form_applies_only_automatic_intake_verdict():
forms_dir = REPO_ROOT / ".github" / "ISSUE_TEMPLATE"
bundle_form = yaml.safe_load(
(forms_dir / "bundle_submission.yml").read_text(encoding="utf-8")
)

assert bundle_form["labels"] == ["triage-must-have"]
assert "bundle-submission" not in bundle_form["labels"]


def test_other_issue_forms_do_not_apply_automatic_intake_verdict():
forms_dir = REPO_ROOT / ".github" / "ISSUE_TEMPLATE"
for form_name in (
"agent_request.yml",
"bug_report.yml",
"bundle_submission.yml",
"feature_request.yml",
):
form = yaml.safe_load((forms_dir / form_name).read_text(encoding="utf-8"))
Expand Down
Loading