docs: make the catalog refresh a release step, not an afterthought - #204
Merged
Conversation
The 0.1.4 release exposed a gap in the runbook rather than a one-off slip. `docs/RELEASING.md` describes packing the catalog `.zip` asset but never says to refresh the community-catalog entry that points at it, and nothing in the pipeline does it automatically — the entry is data in another repository, pinned to a specific release asset. The result: adrkit's entry sat at 0.1.2 through both 0.1.3 and 0.1.4, still advertising `speckit_version: >=0.13.0,<0.16.0` — a bound that by then refused to install on any current Spec Kit. Catalog users were getting a two-versions-old artifact whose manifest rejected their toolchain, while npm looked perfectly healthy. The npm publish looked like the whole release and was not. The mechanism also changed under us. Upstream's publishing guide now states plainly that pull requests against `catalog.community.json` are not accepted, and routes version bumps through the Extension Submission issue template. The original 0.1.0 listing did land as a PR (#3947), so the obvious move is now the wrong one and worth naming explicitly. - `docs/RELEASING.md` gains the refresh step in the adapter release section: file the issue (not a PR), wait for the asset to resolve because maintainers verify the URL, and change only `version`, `download_url`, `requires.speckit_version`, and `updated_at`. - ADR-0019 action item 5 records that this is a standing per-release obligation rather than the completed task it read as, and links the 0.1.4 refresh (github/spec-kit#4571). - The `[spec-kit-0.1.4]` CHANGELOG heading moves to 2026-09-13, the date the tag and release actually landed. The ADR and evidence-index dates are unchanged and correct — they date the re-verification, which did happen on 2026-09-12. Documentation only. Schema, `packages/ci`, and every shipped artifact untouched; `check:changelog`, `check:doc-pins`, `check:deps` and `adr lint` (37 records, 0 errors) pass. Claude-Session: https://claude.ai/code/session_01UHoVZxZp529qJg1mgwJqxZ Signed-off-by: Mark Beacom <m@beacom.dev>
Decisions governing this change
|
There was a problem hiding this comment.
🟡 Changes recommended
Four unresolved documentation corrections remain, including the catalog refresh status.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Updates release documentation to make Spec Kit catalog refreshes a recurring release step and corrects related history.
Changes:
- Adds issue-based catalog refresh guidance to
docs/RELEASING.md. - Records the ongoing obligation in ADR-0019.
- Corrects the
spec-kit-0.1.4changelog date.
File summaries
| File | Summary | Review findings |
|---|---|---|
docs/RELEASING.md |
Adds catalog refresh instructions and asset verification. | Three nit findings: parameterize the release version, correct the initial listing history, and scope metadata-update guidance. |
docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md |
Records the recurring catalog obligation. | One nit finding: distinguish the submitted update request from a completed catalog refresh. |
CHANGELOG.md |
Corrects the 0.1.4 release date. | No findings. |
Review details
Suppressed comments (2)
docs/RELEASING.md:221
- The linked upstream submission was for version 0.1.2, not 0.1.0: issue #3942 and PR #3947 both show
0.1.2. Calling it the original 0.1.0 listing misstates the release history; describe it as the initial catalog listing or name 0.1.2.
original 0.1.0 listing did land as a PR, [#3947](https://github.com/github/spec-kit/pull/3947);
docs/RELEASING.md:233
- This absolute instruction conflicts with upstream's update guidance, which says to include any other changed fields when extension metadata changes. Applied to a future release that changes commands, hooks, description, or tools, it would leave the catalog stale. Limit the four-field list to releases like 0.1.4 and say other changed extension metadata should also be submitted, while preserving only the maintainer-managed fields.
Change only `version`, `download_url`, `requires.speckit_version`, and
`updated_at`; `created_at`, `verified`, `downloads`, and `stars` are
maintainer-managed and must be preserved as listed.
- Files reviewed: 3/3 changed files
- Comments generated: 2
- Review effort level: Lite
… a filing a refresh Review feedback on #204, all four points valid, and the factual one changes the story rather than just a detail. `github/spec-kit#3947` listed **0.1.2**, not 0.1.0 — and its body says "submitted by @mbeacom via issue #3942". Issue #3942 is ours, dated 2026-08-03 and labeled `extension-submission`; the pull request was the maintainer applying it the same day. So the contributor path was *always* the issue template. The previous text said the original listing "did land as a PR" and that "that path has since been closed", which implied a process change that never happened and invited exactly the pull request upstream refuses. Corrected to name both, and to say plainly that the pull request is the maintainer's step, not ours. That also dates ADR-0019's action item 5, which said "landed 2026-08-25"; the issue and the pull request are both 2026-08-03, corroborated by the catalog entry's own `created_at`. Corrected, with the prior claim noted rather than silently overwritten. The remaining three: - The `curl` check hardcoded `spec-kit-v0.1.4`. In a step whose whole point is that it recurs, copying it for 0.1.5 would validate the *old* asset and return 200 — confirming the wrong thing while looking like verification. Now binds `tag` once and interpolates it. - "Change only `version`, `download_url`, `requires.speckit_version`, and `updated_at`" was absolute where upstream asks for "any other changed fields". A future release that alters the description, `category`, `effect`, the command or hook counts, or `requires.tools` would have followed that instruction into a stale entry the version number does not reveal. Reframed as the common case, with the rule being to compare the proposed entry against `extension.yml`. - ADR-0019 called #4571 a completed refresh. It is an open submission: the entry is still 0.1.2, and `specify extension search` keeps serving it until a maintainer applies the update. Filing is not refreshing, and recording it as done would have hidden a live staleness behind a checked box — the same failure this PR exists to fix. Now recorded as submitted and open, with the refresh to be recorded when it lands. Documentation only. `check:changelog`, `check:doc-pins`, `check:deps`, and `adr lint` (37 records, 0 errors) pass. Claude-Session: https://claude.ai/code/session_01UHoVZxZp529qJg1mgwJqxZ Signed-off-by: Mark Beacom <m@beacom.dev>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What and why
Cutting
spec-kit-v0.1.4surfaced a gap in the runbook rather than a one-off slip.docs/RELEASING.mdexplains how the catalog.zipasset gets packed and what acatalog.community.jsonentry'sdownload_urlpoints at — and then never says to refresh that entry. Nothing in the pipeline does it: the entry is data in someone else's repository, pinned to a specific release asset.So it didn't get refreshed. adrkit's community-catalog entry sat at 0.1.2 through both 0.1.3 and 0.1.4, still advertising
speckit_version: >=0.13.0,<0.16.0— a bound that by then refused to install on any current Spec Kit. Anyone discovering adrkit the idiomatic way (specify extension search) got a two-versions-old artifact whose manifest rejected their toolchain, while npm looked perfectly healthy the whole time. The npm publish looked like the whole release and wasn't.The mechanism is an issue, not a pull request — upstream's publishing guide says so outright ("Do not open a pull request directly to edit
extensions/catalog.community.json"), and routes version bumps through the same Extension Submission template as a first listing.And it always was. adrkit's initial listing (at 0.1.2) went through issue #3942 on 2026-08-03, which a maintainer applied the same day in #3947. That pull request was the maintainer's step, not ours. So there was no process change to miss — the obligation was always "file the issue, every release", and we simply never repeated it after the first one. That is a duller story than "the rules moved", and it is the true one.
Changes
docs/RELEASING.md— the adapter release section gains the refresh step: file the issue (not a PR), wait for the release asset to actually resolve because maintainers verify thedownload_url, and compare the proposed entry againstextension.ymlrather than against the previous entry.[x]and read as a completed one-time task. It's a standing per-release obligation, and reading it as one-time is what cost two releases. Now records that, corrects the listing history and date, and tracks the 0.1.4 submission honestly (see below).[spec-kit-0.1.4]heading moves2026-09-12→2026-09-13, the date the tag and release actually landed. The ADR addendum and evidence-index dates are deliberately unchanged: they date the re-verification, which did happen on 2026-09-12.Catalog status — submitted, not yet refreshed
github/spec-kit#4571 is open. The catalog entry is still 0.1.2, and
specify extension searchkeeps serving it until a maintainer applies the update. Filing is not refreshing, so neither this PR nor ADR-0019 records it as done — the refresh gets recorded when the catalog change actually lands. Upstream's stated review window is 3–7 business days, and theextension-submissionlabel that starts automated validation can only be applied by a maintainer.Review feedback addressed
All four points from the Copilot review were valid and are fixed in
7cacc69:curlexample hardcodedspec-kit-v0.1.4200— confirming the wrong thing while looking like verification. Now bindstagonce and interpolates it.#3947listed 0.1.2, not 0.1.0category,effect, command/hook counts, orrequires.toolswould have followed that instruction straight into a stale entry the version number doesn't reveal. Reframed as the common case.Correcting the
#3947reference also exposed a pre-existing error in ADR-0019 action item 5: it said the listing "landed 2026-08-25", but both the issue and the pull request are dated 2026-08-03, corroborated by the catalog entry's owncreated_at. Corrected, with the prior claim noted rather than silently overwritten.Release status (for context)
spec-kit-v0.1.4is published and verified:d3438f77) peeling toc5cae1eonmainnpm dist-tags.latest0.1.4dist.integritysha512-xAjP3GQQ…— byte-identical to the pre-merge pack dry runadrkit.zip(16,335 bytes)200,extension.ymlat archive root,package.jsoncorrectly droppedafter_plan→optional: true; tree has notest/,tsconfig.json,package.json,node_modules/context.sh(queue + path-scoped) against a real 38-record corpuscheck.shwith no feature dirThat non-
--devinstall also confirms the.specify-dev/note from #203: it's absent here, so it really is a dev-install artifact of the loader rather than anything shipped.Checklist
packages/ci, and every shipped artifact untouched.check:changelog,check:doc-pins,check:deps, andadr lint(37 records, 0 errors) pass.https://claude.ai/code/session_01UHoVZxZp529qJg1mgwJqxZ