diff --git a/AGENTS.md b/AGENTS.md index 3a1b3c9..3e39170 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ Status: early — phases 0–6 landed and v0.18.0 is public. `@adrkit/core`, `@adrkit/evaluator`, `@adrkit/cli` (`lint`, `new`, `graph`, `explain`, `check`, `queue`, `accept`, `approve`, `object`, `resolve`, `migrate --from madr`, `evaluate`) are published on npm, as is -the independently versioned `@adrkit/spec-kit` Spec Kit extension (0.1.4); the +the independently versioned `@adrkit/spec-kit` Spec Kit extension (0.1.5); the repository-backed CI Action is available at `mbeacom/adrkit/packages/ci@v0`. The governing-decisions Action also has a root `action.yml` alias for GitHub Marketplace beginning with v0.13.0. Root @@ -208,8 +208,8 @@ second distribution surface namespaced commands to a [Spec Kit](https://github.com/github/spec-kit) project — `/speckit.adrkit.context`, `/speckit.adrkit.check`, `/speckit.adrkit.draft` — plus one **optional** `after_plan` hook that offers to run the check. Pinned to -Spec Kit `>=0.13.0,<1.1.0`, verified against 0.13.0, 0.14.4, 0.15.1, 0.16.5, -1.0.0, and 1.0.4–1.0.6. +Spec Kit `>=0.13.0,<1.2.0`, verified against 0.13.0, 0.14.4, 0.15.1, 0.16.5, +1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. Authorized by [ADR-0019](./docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md). **Landed / reference-verified** on ADR-0014 rungs 1–2; rung 3 open. @@ -220,7 +220,7 @@ Things that are load-bearing and easy to break: [ADR-0007](./docs/adr/0007-adapter-isolation-and-public-surface-build.md) — its semver contract is with Spec Kit, not with `@adrkit/core`. It releases on its own `spec-kit-v` tag (see [`docs/RELEASING.md`](./docs/RELEASING.md)), - currently **0.1.4**, and does **not** move with the repository version. + currently **0.1.5**, and does **not** move with the repository version. - **Two version fields must agree**: `package.json` (npm) and `extension.yml` (Spec Kit). A test asserts they match — 0.1.1 shipped with them diverged and told every user the wrong version. @@ -232,7 +232,7 @@ Things that are load-bearing and easy to break: same reason. Enforced by `test/packaging.test.ts`. - **The community catalog is discovery-only, so docs install from the archive.** `specify extension add adrkit` exits 1 on every Spec Kit version measured - (0.13.0 to 1.0.13). The docs give + (0.13.0 to 1.1.3). The docs give `--from .../releases/download/spec-kit-v/adrkit.zip`, which prompts `Continue with installation? [y/N]` (no `--yes`; `--force` does not skip it). `releases/latest/download` follows the lockstep release and 404s, so the URL diff --git a/CHANGELOG.md b/CHANGELOG.md index 8246487..52295e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -107,6 +107,40 @@ Until `1.0.0`, minor releases may include breaking changes that instead of "exited 2". This follows a Windows report (git 2.55.0.vfs.0.10) whose cause is not reproduced here. +## [spec-kit-0.1.5] - 2026-10-09 + +### Changed + +- **The Spec Kit pin is widened to `>=0.13.0,<1.2.0`.** Re-verified, not + bumped on inference. 0.1.4 refuses every 1.1.x with `Compatibility Error: + Extension requires spec-kit >=0.13.0,<1.1.0, but 1.1.3 is installed.` + (exit 1, from the release archive and from `--dev`). Upstream's extension API + reference is byte-identical from 0.16.5 through 1.1.2, and 1.1.3 adds only + the bundled `bug` extension's hook events. The 1.1 loader changes (generic + integration registration, exact catalog releases, transactional install + rollback, external agent adapters) remove nothing this extension uses. On + 1.1.0 and 1.1.3, under both the Copilot and Claude integrations, the + extension installs with `--dev`, from its archive, and through `specify init + --extension`; it registers the same three `speckit-adrkit-*` skills; the + `after_plan` hook is recorded `optional: true`; the generated plan skill + still maps dots to hyphens; and `context.sh` and `check.sh` run from the + installed location against a small corpus with `@adrkit/cli` 0.18.0. 1.1.1 + and 1.1.2 were sampled under Copilot with the same results. 1.1.0 is not on + PyPI and was installed from its git tag + ([ADR-0019](docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md), + 2026-10-09 addendum). + + `<1.2.0` asserts "verified through the `1.1` line"; 1.2.0 is where the + extension fails loud and re-verification is owed. + +### Fixed + +- **The packaged README gives an install command that works.** The 0.1.4 + archive and npm README still say `specify extension add adrkit`, which every + measured Spec Kit refuses because the community catalog is discovery-only. + 0.1.5 ships the corrected README, which installs from the versioned release + archive and names the commands per integration. + ## [0.18.0] - 2026-10-09 This release adds `adr approve`, `adr object`, and `adr resolve`, so review @@ -2114,6 +2148,7 @@ against live Spec Kit, rather than reasoning about it: [0.6.0]: https://github.com/mbeacom/adrkit/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/mbeacom/adrkit/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/mbeacom/adrkit/compare/v0.3.0...v0.4.0 +[spec-kit-0.1.5]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.4...spec-kit-v0.1.5 [spec-kit-0.1.4]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.3...spec-kit-v0.1.4 [spec-kit-0.1.3]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.2...spec-kit-v0.1.3 [spec-kit-0.1.2]: https://github.com/mbeacom/adrkit/compare/spec-kit-v0.1.1...spec-kit-v0.1.2 diff --git a/README.md b/README.md index 1302c18..d153d73 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ See the [Quickstart guide](https://adrkit.dev/quickstart/) and the full | Run adrkit from an OCI image | [Container usage](#container-usage) | Lockstep multi-architecture image, beginning with the first release containing ADR-0032 | | Comment governing decisions on pull requests | [Use in CI](https://adrkit.dev/ci/) | GitHub Action from this repository | | Evaluate decision governance with a generated wiki | [Generated knowledge guide](https://adrkit.dev/generated-knowledge/) | Provisional OpenWiki recipe; no runtime coupling | -| Add decision memory to Spec Kit | [`@adrkit/spec-kit`](packages/adapters/spec-kit/README.md) | Published separately for Spec Kit `>=0.13.0,<1.1.0` | +| Add decision memory to Spec Kit | [`@adrkit/spec-kit`](packages/adapters/spec-kit/README.md) | Published separately for Spec Kit `>=0.13.0,<1.2.0` | | Add decision memory to Copilot, Claude Code, or opencode | [`adrkit` agent plugin](packages/adapters/agent-plugin/README.md) | Install from this repository or marketplace | ## Container usage @@ -223,8 +223,8 @@ construction, and hooks can only reach commands that do not write — `draft` is deliberately unreachable from any hook, because a plan-phase hook creating records unprompted would manufacture decision memory rather than record it. -Pinned to Spec Kit `>=0.13.0,<1.1.0` and tested against 0.13.0, 0.14.4, 0.15.1, -0.16.5, 1.0.0, and 1.0.4–1.0.6. It is listed in the Spec Kit community catalog, +Pinned to Spec Kit `>=0.13.0,<1.2.0` and tested against 0.13.0, 0.14.4, 0.15.1, +0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. It is listed in the Spec Kit community catalog, which is discovery-only, so install it from its release archive with `specify extension add adrkit --from `; see the package README for the URL and setup. Under the Claude Code integration, and under Copilot from Spec diff --git a/bun.lock b/bun.lock index d54c9c1..3e70250 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/adapters/spec-kit": { "name": "@adrkit/spec-kit", - "version": "0.1.4", + "version": "0.1.5", }, "packages/catalog-envelope": { "name": "@adrkit/catalog-envelope", diff --git a/docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md b/docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md index 0f1d894..f4fd2f6 100644 --- a/docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md +++ b/docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md @@ -243,9 +243,9 @@ floating range that appears to work until it does not. 1. [x] Build the extension at `packages/adapters/spec-kit/` under the constraints above 2. [x] Enforce the read-only hook boundary with a test observed failing first -3. [x] Re-verify the `speckit_version` pin against the next Spec Kit minor before widening it — done 2026-08-01, see the addendum above; widened to `<0.16.0`, verified at 0.13.0, 0.14.4, 0.15.1. **Superseded twice since, and this item records the practice rather than a one-time task:** re-verified 2026-09-09 and widened to `<1.1.0`, then extended 2026-09-12 to close the `1.0` line's upper edge. The current bound and its evidence live in the two addenda below, not on this line. +3. [x] Re-verify the `speckit_version` pin against the next Spec Kit minor before widening it — done 2026-08-01, see the addendum above; widened to `<0.16.0`, verified at 0.13.0, 0.14.4, 0.15.1. **Superseded three times since, and this item records the practice rather than a one-time task:** re-verified 2026-09-09 and widened to `<1.1.0`, then extended 2026-09-12 to close the `1.0` line's upper edge, then re-verified 2026-10-09 and widened to `<1.2.0`. The current bound and its evidence live in the addenda below, not on this line. 4. [x] Decide whether to publish `@adrkit/spec-kit` to npm, or install it from the repository — **both channels**, see the addendum below -5. [x] Submit the catalog entry to `github/spec-kit` once a release asset exists — submitted 2026-08-03 as issue [github/spec-kit#3942](https://github.com/github/spec-kit/issues/3942) and applied the same day by a maintainer in [#3947](https://github.com/github/spec-kit/pull/3947), listing version 0.1.2. (An earlier revision of this line said "landed 2026-08-25 via #3947"; both the issue and the pull request are dated 2026-08-03, and the pull request was the maintainer's step rather than ours.) **This is a standing per-release obligation, not a one-time task, and treating it as one-time cost two releases:** the entry stayed pinned at 0.1.2 through 0.1.3 and 0.1.4, still advertising `>=0.13.0,<0.16.0` — a bound that by then refused to install on any current Spec Kit. An update request for 0.1.4 was **submitted** 2026-09-13 as [github/spec-kit#4571](https://github.com/github/spec-kit/issues/4571) and is **still open**: the catalog entry remains at 0.1.2 until a maintainer applies it, so `specify extension search` keeps serving the stale entry in the meantime. Filing is not refreshing, and this item is not closed by the filing — record the refresh when the catalog change actually lands. The release runbook carries the step ([`docs/RELEASING.md`](../RELEASING.md)). +5. [x] Submit the catalog entry to `github/spec-kit` once a release asset exists — submitted 2026-08-03 as issue [github/spec-kit#3942](https://github.com/github/spec-kit/issues/3942) and applied the same day by a maintainer in [#3947](https://github.com/github/spec-kit/pull/3947), listing version 0.1.2. (An earlier revision of this line said "landed 2026-08-25 via #3947"; both the issue and the pull request are dated 2026-08-03, and the pull request was the maintainer's step rather than ours.) **This is a standing per-release obligation, not a one-time task, and treating it as one-time cost two releases:** the entry stayed pinned at 0.1.2 through 0.1.3 and 0.1.4, still advertising `>=0.13.0,<0.16.0` — a bound that by then refused to install on any current Spec Kit. An update request for 0.1.4 was submitted 2026-09-13 as [github/spec-kit#4571](https://github.com/github/spec-kit/issues/4571) and applied when a maintainer closed it on 2026-09-15: on 2026-10-09 `catalog.community.json` lists 0.1.4 with `>=0.13.0,<1.1.0`, which `specify extension search adrkit` on 1.1.x also reports. Filing is not refreshing, so record each refresh when the catalog change actually lands, not when the issue is filed. 0.1.5 owes the same submission once its asset resolves. The release runbook carries the step ([`docs/RELEASING.md`](../RELEASING.md)). 6. [x] Remove `@adrkit/spec-kit` from `BOOTSTRAP_PACKAGES` after its first publish, once Trusted Publishing is configured for the name — done 2026-08-03; the set is now empty, which is its correct steady state. The `NPM_BOOTSTRAP_TOKEN` secret can be deleted. ### Addendum, 2026-08-02: distribution channels (action item 4) @@ -356,3 +356,28 @@ exercises `0.13.0`/`0.14.4`/`0.15.1`, and bringing `0.16.5`, `1.0.0`, and No manifest change accompanies this addendum — the pin already reads `>=0.13.0,<1.1.0`; only its evidence moved. `@adrkit/spec-kit` 0.1.4 is the release that carries it. + +### Addendum, 2026-10-09: widening to the `1.1` line + +Spec Kit 1.1.0 shipped on 2026-10-02, and the `<1.1.0` gate fired as this +decision intends: 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. This addendum records +the re-verification on the same maintainer-session terms as the two above. + +| Evidence | Result | +|---|---| +| `extensions/EXTENSION-API-REFERENCE.md`, `v1.0.13` → `v1.1.3` | byte-identical through `v1.1.2` (SHA-256 `cb037d69fe62c7d8…`); `v1.1.3` adds only the bundled `bug` extension's hook events. Additive. | +| Loader, `v1.0.13` → `v1.1.3` | generic-integration registration (#4785), exact catalog release selection (#4726), external agent adapters (#4862), and install rollback that unregisters hooks on failure. `SpecifierSet` parsing and `.extensionignore` are untouched; the one new refusal applies only to catalog installs. | +| Install of 0.1.5 on `1.1.0` (git tag; never on PyPI) and `1.1.3` (PyPI), Copilot and Claude integrations, by `--dev`, by `--from` its packed archive, and by `specify init --extension` | exit 0 on all twelve; three `speckit-adrkit-*` skills registered; `after_plan` recorded `optional: true`; the plan skill still maps dots to hyphens; no development files deposited. `1.1.1` and `1.1.2` sampled under Copilot with the same results. | +| `context.sh` and `check.sh` from the installed location, `@adrkit/cli` 0.18.0 | exit 0 on every run, with the expected governing records | + +Nothing in `commands/` or `scripts/` needed to change. The bound is widened to +`>=0.13.0,<1.2.0`: `<1.2.0` asserts "verified through the `1.1` line", and +1.2.0 is where re-verification is next owed. `@adrkit/spec-kit` moves to 0.1.5 +with this widening, which also ships the README install line corrected after +0.1.4. The full matrix is in +[`docs/reference-verification-spec-kit-extension.md`](../reference-verification-spec-kit-extension.md). + +Limitations: unchanged. These are maintainer-session installs, not tracked +dogfood legs, and no live agent session watched the hook offer render on 1.1.x. diff --git a/docs/reference-verification-spec-kit-extension.md b/docs/reference-verification-spec-kit-extension.md index 2c04a5b..dd8a9ee 100644 --- a/docs/reference-verification-spec-kit-extension.md +++ b/docs/reference-verification-spec-kit-extension.md @@ -49,7 +49,7 @@ the Phase 6 rung-2 evidence. It is **not** this monorepo. | `.extensionignore` at that ref | SHA-256 `f1a39b110fcc888ed32c9cfcdea50971caf4caef292350e0dfddf29482f26c0c` | | Validation script | `scripts/validate-spec-kit-extension.sh`, SHA-256 `c0bde9297f3fc7b535974b1c489f3be1ad4a985dc2b4d4c27883bd771b56082f` | | Validation workflow | `.github/workflows/spec-kit-extension.yml`, SHA-256 `5c2af3fc5d0e139d3445962f3a1bb98a232cac0750ff1a3edab3f9587a487a2a` | -| Spec Kit versions exercised | `0.13.0`, `0.14.4`, `0.15.1` — the endpoints and midpoint of the range the manifest declared *at the time of this run*, `>=0.13.0,<0.16.0`. The manifest has since widened to `>=0.13.0,<1.1.0`; this workflow leg has not, and the gap is recorded in the addenda below. | +| Spec Kit versions exercised | `0.13.0`, `0.14.4`, `0.15.1` — the endpoints and midpoint of the range the manifest declared *at the time of this run*, `>=0.13.0,<0.16.0`. The manifest has since widened to `>=0.13.0,<1.2.0`; this workflow leg has not, and the gap is recorded in the addenda below. | | `adr` CLI under test | published `@adrkit/cli@0.3.0` from npm — the surface a real consumer installs, not a workspace build | | Runner / runtimes | `ubuntu-latest`; Node 22; Python 3.12 | | Workflow permissions | `contents: read` only. No PAT, no repository secret, no write scope. | @@ -287,3 +287,49 @@ functionally broken, and `extension.yml` and `commands/` are unchanged; the docs now give the install command that works and a per-integration name table. No live agent session drove `/speckit-plan` to watch the offer render, so that last step rests on the generated instruction, not on an observed run. + +## 2026-10-09: widening to the `1.1` line (`>=0.13.0,<1.2.0`) + +The sections above are untouched. Spec Kit 1.1.0 shipped on 2026-10-02 and +1.1.3 is now PyPI's newest, so the `<1.1.0` gate fired as designed. This +section records the maintainer-session re-verification that widened the pin to +`<1.2.0` and moved `@adrkit/spec-kit` to 0.1.5. Like the addenda above, it is +real installs against real upstream releases, and **not** a rung-2 matrix +extension. No 1.2 release or tag exists as of this run. + +Method: the same as the section above, with `uvx` on Python 3.13. `1.1.0` is a +GitHub release that never reached PyPI (PyPI goes from `1.0.13` to `1.1.1`), so +it ran as `uvx --from git+https://github.com/github/spec-kit.git@v1.1.0 +specify`, as `1.0.0` did on 2026-09-09. `1.1.1`, `1.1.2`, and `1.1.3` ran from +PyPI, except the 0.1.4 refusal runs on `1.1.3`, which used its git tag. The archive under test is the 0.1.5 `adrkit.zip` that +`release:pack -- --only @adrkit/spec-kit --tag spec-kit-v0.1.5` and +`scripts/pack-extension-zip.ts` produce, served from `http://127.0.0.1`, +because the `spec-kit-v0.1.5` release asset does not exist until the tag is +pushed. The scripts ran against a four-record fixture corpus with the published +`@adrkit/cli` 0.18.0 as `ADRKIT_CLI`. + +| Evidence | Result | +|---|---| +| 0.1.4 on `1.1.0` and `1.1.3`, both integrations: `printf 'y\n' \| specify extension add adrkit --from …/spec-kit-v0.1.4/adrkit.zip`, and `extension add --dev` of the unchanged tree | exit 1 on all eight: `Compatibility Error: Extension requires spec-kit >=0.13.0,<1.1.0, but 1.1.3 is installed.` (`1.1.0` on that version), then `Upgrade spec-kit with: uv tool install specify-cli --force --from git+https://github.com/github/spec-kit.git`. The fail-loud gate works on both install routes. | +| `extensions/EXTENSION-API-REFERENCE.md`, `v0.16.5` → `v1.1.3` | byte-identical (SHA-256 `cb037d69fe62c7d8…`, 896 lines) at `v0.16.5`, `v1.0.4`, `v1.0.6`, `v1.0.13`, `v1.1.0`, `v1.1.1`, `v1.1.2`. `v1.1.3` (`a54e2239e1fd4de6…`, 907 lines) adds one block listing the bundled `bug` extension's `before_/after_bug_{assess,fix,test}` events. Additive. | +| Loader, `v1.0.13` → `v1.1.3` (`extensions/__init__.py`, `command_add.py`, `agents.py`) | three feature commits: generic-integration command and skill registration (#4785), exact catalog release selection (#4726), and catalog-installed external agent adapters (#4862), plus install rollback that unregisters hooks if a later step fails. `SpecifierSet` version parsing and `.extensionignore` handling are untouched. The one new refusal, an archive whose id or version disagrees with the catalog entry it was selected from, applies only to catalog installs, which the community catalog does not allow. | +| `specify extension add --dev` (0.1.5 tree), `1.1.0` and `1.1.3` × `copilot` and `claude`; `1.1.1` and `1.1.2` × `copilot` | exit 0 on all six. `extension list` reports `v0.1.5`. Installed tree: `LICENSE`, `NOTICE`, `README.md`, `commands/`, `extension.yml`, `scripts/`, plus the loader's `.specify-dev/`. No `test/`, `tsconfig.json`, `package.json`, or `node_modules/`. | +| `printf 'y\n' \| specify extension add adrkit --from <0.1.5 archive>`, same six | exit 0, `✓ Extension installed successfully!`, `v0.1.5`, three commands listed. The `⚠ Untrusted Source` question is unchanged. | +| `specify init --extension <0.1.5 archive> --trust-extension-urls --non-interactive`, same six | exit 0, `.specify/extensions/adrkit/` installed | +| `specify extension add adrkit` (catalog form), `1.1.0` and `1.1.3` | exit 1, the same discovery-only error as `0.16.5`–`1.0.13`. `extension search adrkit` lists `v0.1.4`: the 0.1.4 catalog update ([github/spec-kit#4571](https://github.com/github/spec-kit/issues/4571)) was applied 2026-09-15. | +| Commands registered | `.github/skills/speckit-adrkit-{context,check,draft}/` under Copilot and `.claude/skills/speckit-adrkit-{context,check,draft}/` under Claude, on every 1.1.x run. You type `/speckit-adrkit-check`, as on `1.0.x`. Skill metadata credits `author: Mark Beacom (@mbeacom)`. Its `source` field is `extension:adrkit` under Copilot and `adrkit:commands/check.md` under Claude, the same split as on `1.0.13`. | +| `after_plan` hook | `.specify/extensions.yml` records `command: speckit.adrkit.check`, `enabled: true`, `optional: true`, `priority: 10` on every run. The generated `speckit-plan/SKILL.md` still says "replace dots (`.`) with hyphens (`-`)". On `1.1.2` and `1.1.3`, `extension info adrkit --json` (new in 1.1.2) reports `hooks: [{trigger: after_plan, targetCommand: speckit.adrkit.check, optional: true}]` and the three commands. `1.1.0` and `1.1.1` reject `--json` with exit 2. | +| Scripts from `.specify/extensions/adrkit/scripts/`, every 1.1.x run | `context.sh` with no paths: exit 0, a QueueReport v1 JSON document. `context.sh src/net/client.ts`: exit 0, governed by `0001`, `0002`, `0003`. `check.sh src/net/client.ts`: exit 0, the `==> adrkit:check` section, and on stderr the stated omission of routing because `ADRKIT_SNAPSHOT` is unset. | +| Extension test suite | No test drives Spec Kit itself. The version-dependent assertion is the pin in `test/manifest.test.ts`, which failed on `<1.2.0` before its expectation moved. The two version-agreement tests (`package.json` vs `extension.yml`, and the README and site archive URL vs `extension.yml`) failed when only `extension.yml` moved to 0.1.5. | + +Nothing in `commands/` or `scripts/` changed; 1.1.x needed only the pin. + +**The README URL points at an asset that does not exist yet.** The guard +from 2026-10-09 ties the README and site URL to `extension.yml`'s version, so +both now name `spec-kit-v0.1.5/adrkit.zip`, which returns 404 until the tag is +pushed. Merge and tag together. + +**Limitation (unchanged)**: the dogfood workflow's three legs still exercise +`0.13.0`/`0.14.4`/`0.15.1`. No live agent session drove `/speckit-plan` on +1.1.x to watch the hook offer render; that rests on the generated instruction +and the recorded hook, as on 1.0.x. diff --git a/packages/adapters/spec-kit/README.md b/packages/adapters/spec-kit/README.md index 88490d3..f1c0580 100644 --- a/packages/adapters/spec-kit/README.md +++ b/packages/adapters/spec-kit/README.md @@ -23,8 +23,8 @@ Plus one hook: `after_plan` offers to run `/speckit.adrkit.check`. It is ## Requirements -- Spec Kit `>=0.13.0,<1.1.0`. Compatibility is tested against 0.13.0, 0.14.4, - 0.15.1, 0.16.5, 1.0.0, and 1.0.4–1.0.6. +- Spec Kit `>=0.13.0,<1.2.0`. Compatibility is tested against 0.13.0, 0.14.4, + 0.15.1, 0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. - The `adr` CLI (`npm install -g @adrkit/cli`), a project-local installation, or `ADRKIT_CLI` pointing at its entry point. - An ADR corpus. Defaults to `docs/adr`. @@ -35,7 +35,7 @@ Install from the release archive, which carries the version in its URL: ```sh specify extension add adrkit \ - --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.4/adrkit.zip + --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.5/adrkit.zip ``` Spec Kit asks before installing from a URL (`⚠ Untrusted Source` … @@ -45,7 +45,7 @@ To answer it non-interactively, pipe the answer in: ```sh printf 'y\n' | specify extension add adrkit \ - --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.4/adrkit.zip + --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.5/adrkit.zip ``` adrkit is listed in the @@ -69,7 +69,7 @@ type depends on how Spec Kit registers commands for your agent: | Integration | What Spec Kit writes | You type | |---|---|---| -| Claude Code, every Spec Kit version measured (0.13.0 to 1.0.13) | `.claude/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | +| Claude Code, every Spec Kit version measured (0.13.0 to 1.1.3) | `.claude/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | | GitHub Copilot, Spec Kit 0.16.5 and later | `.github/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | | GitHub Copilot, Spec Kit 0.13.0 to 0.15.1 | `.github/prompts/speckit.adrkit.*.prompt.md` | `/speckit.adrkit.check`, `/speckit.plan` | @@ -126,7 +126,7 @@ network — a missing CLI is reported, never fetched. ## Compatibility and support The extension is tested against Spec Kit 0.13.0, 0.14.4, 0.15.1, 0.16.5, 1.0.0, -and 1.0.4–1.0.6. Report +1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. Report compatibility issues in the [adrkit issue tracker](https://github.com/mbeacom/adrkit/issues). Maintainers can find the detailed verification record in diff --git a/packages/adapters/spec-kit/extension.yml b/packages/adapters/spec-kit/extension.yml index bd02e06..78c1220 100644 --- a/packages/adapters/spec-kit/extension.yml +++ b/packages/adapters/spec-kit/extension.yml @@ -2,10 +2,12 @@ # # The upper bound is a verification boundary, not a guess. The extension has been # installed and rendered against Spec Kit 0.13.0 (spike 008), 0.14.4, 0.15.1, -# 0.16.5, 1.0.0, and 1.0.4–1.0.6. `extensions/EXTENSION-API-REFERENCE.md` changed -# only additively across that span (byte-identical from 0.16.5 through 1.0.6), and -# the loader's changes over it are additive, refactor, or strictly more permissive. -# Widening past 1.0 is a re-verification, not a version bump — per ADR-0007 an +# 0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. +# `extensions/EXTENSION-API-REFERENCE.md` changed only additively across that +# span (byte-identical from 0.16.5 through 1.1.2; 1.1.3 adds only the bundled +# `bug` extension's hook events), and the loader's changes over it are additive, +# refactor, or strictly more permissive on every path this extension uses. +# Widening past 1.1 is a re-verification, not a version bump — per ADR-0007 an # adapter's semver contract is with its upstream, so breaking loudly on an # unverified minor is the intended behavior, not a defect. # @@ -13,15 +15,15 @@ # verified at the endpoints and samples of each admitted line — not at every # patch — because upstream patches inside an already-verified minor are the case # semver exists to describe, and a bound that chased them would have to move on -# a release adrkit has no say over. `<1.1.0` therefore asserts "verified through -# the 1.0 line", and 1.1.0 is where the fail-loud gate fires and this comment's +# a release adrkit has no say over. `<1.2.0` therefore asserts "verified through +# the 1.1 line", and 1.2.0 is where the fail-loud gate fires and this comment's # evidence list must be extended again. schema_version: "1.0" extension: id: "adrkit" name: "adrkit — decision memory for spec-driven development" - version: "0.1.4" + version: "0.1.5" description: "Pulls the decisions governing this work into agent context, checks produced plans against them, and drafts an ADR from a plan artifact." author: "Mark Beacom (@mbeacom)" repository: "https://github.com/mbeacom/adrkit" @@ -35,7 +37,7 @@ extension: effect: "read-write" requires: - speckit_version: ">=0.13.0,<1.1.0" + speckit_version: ">=0.13.0,<1.2.0" tools: - name: "adr" version: ">=0.3.0" diff --git a/packages/adapters/spec-kit/package.json b/packages/adapters/spec-kit/package.json index dd8cd0a..6a70cc9 100644 --- a/packages/adapters/spec-kit/package.json +++ b/packages/adapters/spec-kit/package.json @@ -1,6 +1,6 @@ { "name": "@adrkit/spec-kit", - "version": "0.1.4", + "version": "0.1.5", "description": "Spec Kit extension that injects adrkit's governing decisions into the spec-driven plan loop.", "type": "module", "license": "Apache-2.0", diff --git a/packages/adapters/spec-kit/test/manifest.test.ts b/packages/adapters/spec-kit/test/manifest.test.ts index 2f2cd22..be85541 100644 --- a/packages/adapters/spec-kit/test/manifest.test.ts +++ b/packages/adapters/spec-kit/test/manifest.test.ts @@ -85,12 +85,13 @@ describe('extension manifest', () => { test('speckit_version is a bounded specifier, not a bare version', () => { // Bounded on both ends on purpose, and the upper bound is a verification // boundary rather than a guess: installed and rendered against 0.13.0 - // (spike 008), 0.14.4, 0.15.1, 0.16.5, 1.0.0, and 1.0.4–1.0.6. The upstream API + // (spike 008), 0.14.4, 0.15.1, 0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and + // 1.1.0–1.1.3. The upstream API // reference changed only additively across that span and the loader never // removed behavior this extension uses. Raising it means re-verifying // against the new minor first — breaking loudly on an unverified one is // ADR-0007's intended adapter behavior. - expect(manifest.requires.speckit_version).toBe('>=0.13.0,<1.1.0'); + expect(manifest.requires.speckit_version).toBe('>=0.13.0,<1.2.0'); }); test('declares the adr CLI as a required tool', () => { diff --git a/packages/adapters/spec-kit/test/packaging.test.ts b/packages/adapters/spec-kit/test/packaging.test.ts index a767744..c9c18d4 100644 --- a/packages/adapters/spec-kit/test/packaging.test.ts +++ b/packages/adapters/spec-kit/test/packaging.test.ts @@ -116,7 +116,7 @@ describe('packaging', () => { test('excludes development-only files from what a consumer receives', () => { // `.extensionignore` is upstream's gitignore-semantics exclusion list, - // supported across the whole pinned range (present in 0.13.0, 0.15.1, and 1.0.4–1.0.6). + // supported across the whole pinned range (present in 0.13.0, 0.15.1, 1.0.4–1.0.6, and 1.1.0–1.1.3). // Without it the install deposits our test suite and tsconfig in someone // else's repository. const ignoreFile = join(packageRoot, '.extensionignore'); diff --git a/plan.md b/plan.md index bcf7d16..2d58afc 100644 --- a/plan.md +++ b/plan.md @@ -57,7 +57,7 @@ an upstream's shape, not by the phase below them. | Adapter | Package | Status | |---|---|---| -| Spec Kit | `packages/adapters/spec-kit/` (`@adrkit/spec-kit`) | **landed / reference-verified** — three namespaced commands (`context`, `check`, `draft`) plus one optional `after_plan` hook, pinned to Spec Kit `>=0.13.0,<1.1.0` (installed and rendered against 0.13.0, 0.14.4, 0.15.1, 0.16.5, 1.0.0, and 1.0.4–1.0.6). Authorized by [ADR-0019](docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md), which records spike 008's `no-go` as a measurement artifact of that spike's own verdict procedure (byte-identical `git status` applied to `install`/`remove`, lifecycle actions that necessarily write) rather than a finding against the mechanism, and carries the spike's verified constraints forward as production requirements. Spike 008's verdict, evidence bundle, and audit history are unmodified. Rung-2 met: maintainer-owned isolated reference-repository validation in [`adrkit-t018-dogfood`](https://github.com/mbeacom/adrkit-t018-dogfood) (PR #9, merge `b559d32`), 41 self-verifying, fail-closed assertions per upstream version across 0.13.0/0.14.4/0.15.1, pinned to adrkit `61f5910`. The gate was **observed failing** on a deliberate divergence run before being trusted. Evidence index: [`docs/reference-verification-spec-kit-extension.md`](docs/reference-verification-spec-kit-extension.md). **Not** externally validated ([ADR-0014](docs/adr/0014-stage-phase-landing-evidence-across-a-three-rung-validation-ladder.md) rung 3 open). Landing it made ADR-0007's `core-has-no-adapter-deps` assertion non-vacuous for the first time; the rule has since been observed failing against a deliberately introduced `@adrkit/core → @adrkit/spec-kit` dependency ([ADR-0016](docs/adr/0016-require-every-check-to-be-observed-failing-before-it-counts-as-coverage.md)). | +| Spec Kit | `packages/adapters/spec-kit/` (`@adrkit/spec-kit`) | **landed / reference-verified** — three namespaced commands (`context`, `check`, `draft`) plus one optional `after_plan` hook, pinned to Spec Kit `>=0.13.0,<1.2.0` (installed and rendered against 0.13.0, 0.14.4, 0.15.1, 0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3). Authorized by [ADR-0019](docs/adr/0019-ship-the-spec-kit-extension-treating-the-spike-no-go-as-a-measurement-artifact.md), which records spike 008's `no-go` as a measurement artifact of that spike's own verdict procedure (byte-identical `git status` applied to `install`/`remove`, lifecycle actions that necessarily write) rather than a finding against the mechanism, and carries the spike's verified constraints forward as production requirements. Spike 008's verdict, evidence bundle, and audit history are unmodified. Rung-2 met: maintainer-owned isolated reference-repository validation in [`adrkit-t018-dogfood`](https://github.com/mbeacom/adrkit-t018-dogfood) (PR #9, merge `b559d32`), 41 self-verifying, fail-closed assertions per upstream version across 0.13.0/0.14.4/0.15.1, pinned to adrkit `61f5910`. The gate was **observed failing** on a deliberate divergence run before being trusted. Evidence index: [`docs/reference-verification-spec-kit-extension.md`](docs/reference-verification-spec-kit-extension.md). **Not** externally validated ([ADR-0014](docs/adr/0014-stage-phase-landing-evidence-across-a-three-rung-validation-ladder.md) rung 3 open). Landing it made ADR-0007's `core-has-no-adapter-deps` assertion non-vacuous for the first time; the rule has since been observed failing against a deliberately introduced `@adrkit/core → @adrkit/spec-kit` dependency ([ADR-0016](docs/adr/0016-require-every-check-to-be-observed-failing-before-it-counts-as-coverage.md)). | | Catalog (Backstage) | `packages/adapters/catalog-backstage/` (`@adrkit/catalog-backstage`) + `packages/catalog-envelope/` (`@adrkit/catalog-envelope`) | **`implemented`** — feature `specs/010-catalog-backstage/`, authorized by [ADR-0020](docs/adr/0020-rescope-sc-010-and-authorize-work-toward-the-backstage-catalog-adapter.md). Offline snapshot generator, admissibility and ownership resolution, the fifteen trigger classes, and a separate digest-verified envelope consumer that imports nothing from the adapter. Both packages are at version `0.0.0` and are absent from the release set: **no release is claimed, scheduled, or prepared**, and ADR-0020 clause 9 is enforced executably by `bun run check:clause8`. The spike-009 **carry-forward blocker is discharged, not inherited**: Phase B is a fresh T014 → T014a cycle that re-froze the oracle with `derivedPathPatterns` in `compareCodeUnits`-sorted order (T017) and independently re-audited it by recomputing both hashes from the artifacts rather than copying recorded values (T019); the audit was **observed failing** against an input-order variant, retained at [`evidence/negative-cases/oracle-input-order/`](specs/010-catalog-backstage/evidence/negative-cases/oracle-input-order/). Spike 009's own oracle, verdict, and evidence bundle are unmodified. Every check the feature introduces was observed failing before being counted as coverage, registered bidirectionally against the tree in [`evidence/observed-failing-register.md`](specs/010-catalog-backstage/evidence/observed-failing-register.md) ([ADR-0016](docs/adr/0016-require-every-check-to-be-observed-failing-before-it-counts-as-coverage.md)). **This is [ADR-0014](docs/adr/0014-stage-phase-landing-evidence-across-a-three-rung-validation-ladder.md) rung 1 only. It is *not* `reference-verified` (rung 2 — no reference-repository run exists) and *not* `externally validated` (rung 3 — open/absent).** No claim is made about Backstage as a running system; the claim is scoped to a predicate return over a frozen corpus. Self-assessment: [`evidence/honesty-close-out.md`](specs/010-catalog-backstage/evidence/honesty-close-out.md). | Advance **scoping** (spec → plan → tasks) of the next phase is explicitly permitted diff --git a/site/src/content/docs/spec-kit.mdx b/site/src/content/docs/spec-kit.mdx index db48040..2b4cc14 100644 --- a/site/src/content/docs/spec-kit.mdx +++ b/site/src/content/docs/spec-kit.mdx @@ -30,8 +30,8 @@ The optional `after_plan` hook offers to run `/speckit.adrkit.check` after ## Requirements -- **Spec Kit `>=0.13.0,<1.1.0`.** Compatibility is tested against 0.13.0, - 0.14.4, 0.15.1, 0.16.5, 1.0.0, and 1.0.4–1.0.6. +- **Spec Kit `>=0.13.0,<1.2.0`.** Compatibility is tested against 0.13.0, + 0.14.4, 0.15.1, 0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. - **The `adr` CLI.** Install `@adrkit/cli` globally or in the project, or set `ADRKIT_CLI` to its entry point. - **An ADR corpus.** Defaults to `docs/adr`. @@ -49,7 +49,7 @@ Install from the release archive, which carries the version in its URL: ```sh specify extension add adrkit \ - --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.4/adrkit.zip + --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.5/adrkit.zip ``` Spec Kit asks before installing from a URL (`⚠ Untrusted Source` … @@ -59,7 +59,7 @@ In a script or CI job, pipe the answer in: ```sh printf 'y\n' | specify extension add adrkit \ - --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.4/adrkit.zip + --from https://github.com/mbeacom/adrkit/releases/download/spec-kit-v0.1.5/adrkit.zip ``` @@ -78,7 +78,7 @@ adrkit is listed in the [Spec Kit community catalog](https://github.com/github/spec-kit/blob/main/extensions/catalog.community.json), but that catalog is discovery-only: `specify extension add adrkit` finds the entry and refuses to install from it, on every Spec Kit version measured from -0.13.0 to 1.0.13. +0.13.0 to 1.1.3. Then the commands are available in your agent, and Spec Kit's plan command offers the `after_plan` hook. @@ -90,7 +90,7 @@ type depends on how Spec Kit registers commands for your agent: | Integration | What Spec Kit writes | You type | |---|---|---| -| Claude Code, every Spec Kit version measured (0.13.0 to 1.0.13) | `.claude/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | +| Claude Code, every Spec Kit version measured (0.13.0 to 1.1.3) | `.claude/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | | GitHub Copilot, Spec Kit 0.16.5 and later | `.github/skills/speckit-adrkit-*/` | `/speckit-adrkit-check`, `/speckit-plan` | | GitHub Copilot, Spec Kit 0.13.0 to 0.15.1 | `.github/prompts/speckit.adrkit.*.prompt.md` | `/speckit.adrkit.check`, `/speckit.plan` | @@ -153,7 +153,7 @@ network** — a missing CLI is reported, never fetched. `@adrkit/spec-kit` is listed in the Spec Kit community catalog, installs from its release archive, and is tested against Spec Kit 0.13.0, 0.14.4, 0.15.1, -0.16.5, 1.0.0, and 1.0.4–1.0.6. If you find a compatibility issue, [open an issue](https://github.com/mbeacom/adrkit/issues). +0.16.5, 1.0.0, 1.0.4–1.0.6, 1.0.13, and 1.1.0–1.1.3. If you find a compatibility issue, [open an issue](https://github.com/mbeacom/adrkit/issues). For implementation details, see the [`@adrkit/spec-kit` README](https://github.com/mbeacom/adrkit/blob/main/packages/adapters/spec-kit/README.md).