Skip to content

feat(spec-kit): support Spec Kit 1.1.x (@adrkit/spec-kit 0.1.5) - #281

Merged
mbeacom merged 3 commits into
mainfrom
feat/spec-kit-1-1
Oct 10, 2026
Merged

mbeacom merged 3 commits into
mainfrom
feat/spec-kit-1-1

Conversation

@mbeacom

@mbeacom mbeacom commented Oct 10, 2026

Copy link
Copy Markdown
Owner

What and why

Spec Kit 1.1.0 shipped on 2026-10-02, and 1.1.3 is now current on PyPI. The extension's pin is >=0.13.0,<1.1.0, so @adrkit/spec-kit 0.1.4 refuses every 1.1.x release. That gate is working as designed: per ADR-0007 and ADR-0019, widening past a minor is a re-verification, not an inference. I re-verified 1.1.x, widened the pin to >=0.13.0,<1.2.0, and moved the extension to 0.1.5. No 1.2 release or tag exists yet.

Nothing in commands/ or scripts/ had to change. 1.1.x needed only the pin.

What I checked upstream, v1.0.13 → v1.1.3:

Measurements

These ran in throwaway projects with uvx on macOS, Python 3.13, NO_COLOR=1, and GIT_CONFIG_GLOBAL=/dev/null. No model calls. 1.1.0 never reached PyPI (PyPI goes from 1.0.13 to 1.1.1), so I ran it from its git tag, as 1.0.0 was on 2026-09-09. 1.1.1–1.1.3 came from PyPI. The 0.1.5 archive is the adrkit.zip that release:pack -- --only @adrkit/spec-kit --tag spec-kit-v0.1.5 and scripts/pack-extension-zip.ts produce. I served it from 127.0.0.1, because the release asset does not exist until the tag does. The scripts ran against a four-record fixture corpus with the published @adrkit/cli 0.18.0.

Spec Kit Integration 0.1.4 (--from release zip, --dev) 0.1.5 --dev 0.1.5 --from archive init --extension Skills registered after_plan context.sh / check.sh
1.1.0 (git tag) copilot exit 1, both exit 0 exit 0 exit 0 .github/skills/speckit-adrkit-{context,check,draft} optional: true 0 / 0
1.1.0 (git tag) claude exit 1, both exit 0 exit 0 exit 0 .claude/skills/speckit-adrkit-{context,check,draft} optional: true 0 / 0
1.1.1 (PyPI) copilot not run exit 0 exit 0 exit 0 .github/skills/… optional: true 0 / 0
1.1.2 (PyPI) copilot not run exit 0 exit 0 exit 0 .github/skills/… optional: true 0 / 0
1.1.3 (PyPI for 0.1.5, git tag for 0.1.4) copilot exit 1, both exit 0 exit 0 exit 0 .github/skills/… optional: true 0 / 0
1.1.3 (PyPI for 0.1.5, git tag for 0.1.4) claude exit 1, both exit 0 exit 0 exit 0 .claude/skills/… optional: true 0 / 0
  • 0.1.4's refusal, verbatim: Compatibility Error: Extension requires spec-kit >=0.13.0,<1.1.0, but 1.1.3 is installed., then Upgrade spec-kit with: uv tool install specify-cli --force --from git+https://github.com/github/spec-kit.git. 1.1.0 prints the same with its own version.
  • Names are unchanged from 1.0.x. You type /speckit-adrkit-check under both integrations. .specify/extensions.yml records command: speckit.adrkit.check, enabled: true, optional: true. The generated speckit-plan/SKILL.md still says "replace dots (.) with hyphens (-)". On 1.1.2 and 1.1.3, extension info adrkit --json reports v0.1.5, the three commands, and the after_plan hook with optional: true. 1.1.0 and 1.1.1 reject --json (exit 2).
  • The installed tree is LICENSE, NOTICE, README.md, commands/, extension.yml, scripts/, plus the loader's own .specify-dev/ on --dev. No test/, tsconfig.json, package.json, or node_modules/.
  • The scripts:
    • context.sh with no paths emits a QueueReport v1.
    • context.sh src/net/client.ts returns 0001, 0002, 0003.
    • check.sh src/net/client.ts emits ==> adrkit:check. On stderr it says the routing section was skipped because ADRKIT_SNAPSHOT is unset.
  • The catalog form, specify extension add adrkit, still exits 1 on 1.1.0 and 1.1.3 with the discovery-only error. extension search adrkit lists 0.1.4: the update I filed as [Extension]: Update adrkit to 0.1.4 — widen Spec Kit compatibility to >=0.13.0,<1.1.0 (current entry is unusable on 0.16+/1.0) github/spec-kit#4571 was applied on 2026-09-15. I recorded that in ADR-0019's action item 5.

The full matrix is in a new 2026-10-09 section of docs/reference-verification-spec-kit-extension.md, with a matching ADR-0019 addendum.

What changed

  • extension.yml:
    • speckit_version: ">=0.13.0,<1.2.0"
    • version: "0.1.5"
    • The comment's evidence list now runs through 1.1.0–1.1.3, and it moves the fail-loud point to 1.2.0.
  • package.json and the workspace entry in bun.lock are now 0.1.5.
  • test/manifest.test.ts now expects <1.2.0.
  • The tested-version lists now read "…, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3" in AGENTS.md, both READMEs, the site page, and plan.md.
  • The README and site install URL now point at spec-kit-v0.1.5/adrkit.zip.
  • A [spec-kit-0.1.5] CHANGELOG section. It notes that 0.1.5 ships the corrected README. The 0.1.4 archive and the npm README still say specify extension add adrkit, which no measured Spec Kit accepts.

Merge and tag together. The guard from #280 ties the README and site URL to extension.yml's version. Both now name releases/download/spec-kit-v0.1.5/adrkit.zip, which returns 404 until the spec-kit-v0.1.5 tag is pushed and the Release workflow attaches the asset.

Checklist

  • Commits are DCO signed off (git commit -s).

  • No recorded decision changed. ADR-0019 gets an evidence addendum, following the 2026-09-09 and 2026-09-12 widenings, and no new ADR.

  • Schema unchanged.

  • packages/ci/src and @adrkit/core unchanged.

  • I saw each test fail before it passed (ADR-0016). The pin test in test/manifest.test.ts failed on <1.2.0 before its expectation moved. Both version-agreement tests (package.json vs extension.yml, and the README/site archive URL vs extension.yml) failed while only extension.yml said 0.1.5.

  • All of these pass:

    • bun run typecheck && bun run build && bun test && bun run lint
    • check:changelog, check:doc-pins, check:stale-refs, check:deps, check:site-grammar, check:freeze-hashes, check:no-spike-heuristics
    • site:lint, and emit:manifest with no diff
    • the site build and check:rendered
    • release:pack -- --only @adrkit/spec-kit --tag spec-kit-v0.1.5 as a dry pack (it publishes nothing)

    The first full bun test run timed out two git-subprocess tests in scripts/update-action-tag.test.ts at 5 s while the machine was busy. They pass alone, and the full suite passed clean when I reran it (3969 pass, 0 fail).

Notes for reviewers

  • I did not drive a live /speckit-plan agent session on 1.1.x. The hook offer rests on the recorded hook and the generated dots-to-hyphens instruction, as it did on 1.0.x.
  • The dogfood workflow still exercises 0.13.0/0.14.4/0.15.1 only. This is maintainer-session evidence, not a rung-2 matrix extension.
  • docs/RELEASING.md keeps tag=spec-kit-v0.1.4 in its catalog curl example. It is labelled as an illustration rather than a copied constant, so I left it.

Release steps (for me, after merge)

From docs/RELEASING.md, "Adapter releases", with the real tag:

  • git switch main && git pull, then confirm packages/adapters/spec-kit/package.json says 0.1.5.
  • Dry-run the exact pack: bun run release:pack -- --only @adrkit/spec-kit --tag spec-kit-v0.1.5
  • Tag and push (annotated):
    git tag -a spec-kit-v0.1.5 -m "@adrkit/spec-kit 0.1.5"
    git push origin spec-kit-v0.1.5
    The Release workflow publishes npm and the GitHub release with adrkit.zip.
  • Confirm the asset resolves, since the README and site link to it:
    tag=spec-kit-v0.1.5
    curl -sIL -o /dev/null -w '%{http_code}\n' \
      "https://github.com/mbeacom/adrkit/releases/download/$tag/adrkit.zip"
  • Refresh the community catalog through an Extension Submission issue on github/spec-kit, not a pull request, marked as an update. Change version → 0.1.5, download_url → …/spec-kit-v0.1.5/adrkit.zip, requires.speckit_version → >=0.13.0,<1.2.0, and updated_at. Compare against extension.yml, not the previous entry. 1.1's exact-release selection (feat(extensions): select exact catalog releases github/spec-kit#4726) rejects an archive whose version disagrees with its entry, so version must be exactly 0.1.5.
  • Record the filed issue in ADR-0019 action item 5, and record the refresh once it lands.

Spec Kit 1.1.0 shipped on 2026-10-02 and 1.1.3 is now current, so the
`<1.1.0` pin fired as intended: 0.1.4 refuses 1.1.0 and 1.1.3 from both its
release archive and `--dev` with "Compatibility Error: Extension requires
spec-kit >=0.13.0,<1.1.0, but 1.1.3 is installed." and exit 1.

I re-verified before widening. Upstream's extension API reference is
byte-identical through 1.1.2, and 1.1.3 adds only the bundled `bug`
extension's hook events. The 1.1 loader changes remove nothing this
extension uses. On 1.1.0 (git tag; it never reached PyPI) and 1.1.3, under
the Copilot and Claude integrations, the 0.1.5 tree installs by `--dev`, by
`--from` its packed archive, and through `specify init --extension`. The
three `speckit-adrkit-*` skills register, `after_plan` is recorded
`optional: true`, and `context.sh` and `check.sh` run from the installed
location with @adrkit/cli 0.18.0. I sampled 1.1.1 and 1.1.2 under Copilot
with the same results. Nothing in `commands/` or `scripts/` changed.

- Widen `speckit_version` to `>=0.13.0,<1.2.0` and extend the manifest
  comment's evidence list.
- Bump `@adrkit/spec-kit` to 0.1.5 in `package.json`, `extension.yml`, and
  the workspace entry in `bun.lock`.
- Point the README and site install URL at `spec-kit-v0.1.5/adrkit.zip`.
  That asset exists only once the tag is pushed, so merge and tag together.
- Update the tested-version lists, add a 2026-10-09 section to the
  verification doc and an addendum to ADR-0019, and record that the 0.1.4
  catalog update was applied on 2026-09-15.
- Add the spec-kit-0.1.5 CHANGELOG section. It notes that 0.1.5 ships the
  corrected README install line that the 0.1.4 archive and npm README lack.

I saw the pin test fail on `<1.2.0`, and both version-agreement tests fail
with only `extension.yml` at 0.1.5, before each passed.

Signed-off-by: Mark Beacom <m@beacom.dev>
Signed-off-by: Mark Beacom <m@beacom.dev>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 02:27
@github-actions

github-actions Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Decisions governing this change

12 accepted decisions govern this change

Show all 12 governing decisions and why each applies
  • 0001 — Record architecture decisions as versioned markdown in git
    • via path: docs/adr/**
  • 0003 — Ship as a Spec Kit extension plus a standalone CLI, not a competing harness
    • via path: packages/adapters/spec-kit/**
  • 0007 — Isolate integrations as optional adapters and build only against public surfaces
    • via path: packages/adapters/**
  • 0011 — Host the canonical JSON Schema at its $id on adrkit.dev
    • via path: site/**
  • 0014 — Stage phase-landing evidence across a three-rung validation ladder
    • via path: plan.md
  • 0016 — Require every check to be observed failing before it counts as coverage
    • via path: packages/adapters/*/test/**
  • 0019 — Ship the Spec Kit extension, treating the spike's no-go as a measurement artifact
    • via path: packages/adapters/spec-kit/**
  • 0030 — Keep extension surfaces that carry a dependency tree outside this repository
    • via path: packages/adapters/**
  • 0032 — Publish one lockstep OCI image after the coordinated release succeeds
    • via path: README.md
  • 0033 — Select interactive graph presentation at the CLI boundary while preserving piped DOT
    • via path: site/src/content/docs/**
  • 0037 — Treat generated knowledge systems as downstream read models, not decision authorities
    • via path: README.md
    • via path: site/src/content/docs/**
  • 0040 — Keep derived surfaces in lockstep with three mechanisms matched to three classes of drift
    • via path: AGENTS.md

Links point at 68553af, this run's GITHUB_SHA. Run adr explain <path> locally to see why a file is governed.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Canonical agent and ADR documentation contain stale or contradictory compatibility-history claims.

3 open findings
What changed in this PR

Updates @adrkit/spec-kit to 0.1.5 after verifying Spec Kit 1.1.x compatibility.

Changes:

  • Widens compatibility to <1.2.0.
  • Aligns package, manifest, lockfile, and install URLs.
  • Records verification evidence and release notes.

Decision-context MCP lookup was unavailable, so ADR applicability was not independently verified.

File Description
AGENTS.md Updates Spec Kit support and version guidance.
README.md Updates supported Spec Kit range.
CHANGELOG.md Adds 0.1.5 release notes.
bun.lock Aligns workspace version.
plan.md Updates adapter status.
docs/​adr/​0019-*.md Records 1.1.x verification.
docs/​reference-verification-spec-kit-extension.md Adds verification matrix.
packages/​adapters/​spec-kit/​README.md Updates requirements and archive URLs.
packages/​adapters/​spec-kit/​extension.yml Widens pin and bumps version.
packages/​adapters/​spec-kit/​package.json Bumps package to 0.1.5.
packages/​adapters/​spec-kit/​test/​manifest.test.ts Updates compatibility assertion.
packages/​adapters/​spec-kit/​test/​packaging.test.ts Updates verification commentary.
site/​src/​content/​docs/​spec-kit.mdx Updates public documentation.

🧠 Review effort: Balanced

Comment thread AGENTS.md

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The compatibility bound, versions, lockfile, archive URLs, tests, and evidence records are internally consistent.

0 open findings

3 resolved since last review

🧠 Review effort: Balanced

@mbeacom
mbeacom merged commit 6902202 into main Oct 10, 2026
18 checks passed
@mbeacom
mbeacom deleted the feat/spec-kit-1-1 branch October 10, 2026 03:02
@mbeacom mbeacom self-assigned this Oct 10, 2026
@mbeacom mbeacom added the enhancement New feature or request label Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants