|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v3.4.0.0 (2026-08-06) |
| 4 | + |
| 5 | +idstack is a Claude Code plugin now, and only that. The OpenAI Codex CLI target that shipped in v2.5.0.0 is removed, and the Gemini CLI target that was planned is off the roadmap. Nothing about the 11 skills, the evidence base, the manifest schema, or the report contract changes. |
| 6 | + |
| 7 | +To update: `cd` into your idstack clone, then `git pull && ./setup`. Restart Claude Code afterward — plugins load at session start. |
| 8 | + |
| 9 | +### Removed — the second CLI target |
| 10 | + |
| 11 | +- **Codex CLI is no longer supported.** `./setup` no longer detects `codex` on `PATH`, and the `--codex` / `--no-codex` flags are gone (passing either is now an unknown-argument error). `dist/codex/` is deleted, along with the repo-root `AGENTS.md` and `templates/agent-context.md`, the file it was generated from. |
| 12 | +- **If you had the Codex install, `./setup` will not clean it up** — it no longer knows those paths, and with `dist/codex/` deleted the symlinks it created now dangle. Remove them yourself: |
| 13 | + |
| 14 | + ```bash |
| 15 | + rm -f "${CODEX_HOME:-$HOME/.codex}"/skills/idstack-* "$HOME/.agents/plugins/idstack" |
| 16 | + ``` |
| 17 | + |
| 18 | + For a `--local` install the same two live under the project: `./.codex/skills/idstack-*` and `./.agents/plugins/idstack`. |
| 19 | +- **Gemini CLI support is off the roadmap.** It was never implemented; the ROADMAP and TODOS entries planning it are removed. |
| 20 | + |
| 21 | +### Changed |
| 22 | + |
| 23 | +- **`bin/idstack-gen-skills` takes no `--target`.** One output layout, `skills/<name>/SKILL.md`. A caller passing `--target all` now exits 2 — `setup` and `test/mutation-test.sh` were updated. |
| 24 | +- **`$_IDSTACK` resolution dropped two paths.** `~/.agents/plugins/idstack` and `~/.agents/skills/idstack` existed only for the Codex install layout. The chain is now `CLAUDE_PLUGIN_ROOT`, `IDSTACK_HOME`, then the Claude Code marketplace cache. All five copies move together: the canonical snippet, the preamble's three inline blocks, and the longhand copy spliced from `templates/manifest-schema.md`. |
| 25 | +- **The preamble's Interaction Conventions no longer describe two hosts.** `AskUserQuestion`, `Agent`, and `Skill` are still named as concepts, and `Agent`'s inline fallback stays — it is genuinely absent from some skills' `allowed-tools`. What goes is the per-CLI translation rule that told the model to rewrite `/idstack:foo` as `$foo`. `/idstack:pipeline`'s degradation branch now prints `/idstack:<skill>` instructions and fires on a failed `Skill` call rather than on a host without the tool. |
| 26 | + |
| 27 | +### For contributors |
| 28 | + |
| 29 | +- **A regression gate replaces the Codex assertions.** smoke-test lost the 47 assertions covering the Codex bundle and gained 7: `dist/`, `AGENTS.md`, and `templates/agent-context.md` must not exist; the generator must accept no `--target`; the resolve snippet and preamble must not carry the `~/.agents` fallbacks; and a repo-wide grep must find no `codex`/`gemini` outside `CHANGELOG.md`. That last one is the assertion that matters — a green suite proves nothing once you delete the checks that were doing the looking. 393 → 353 assertions. |
| 30 | +- **One deliberate exemption in that sweep.** `test/smoke-test.sh` and `test/test-version-classifier.sh` credit "Gemini Code Assist", the PR-review bot that flagged the version classifier on #15, #19, #20, and #21. That attribution is why those cases exist and has nothing to do with the CLI, so it stays. It is exempted by a per-line `IDSTACK_CLI_LEAK_ALLOW` tag, not by filtering the bot's name as a string — the first draft did the latter, which silently exempted that string everywhere and would have let an untagged capability claim carrying it through anywhere in the repo. Mutation 17 pins the difference. |
| 31 | +- `test/mutation-test.sh`'s `regen()` called `--target all` under `|| true`. Left alone, the flag removal would have turned every regeneration into a silent no-op, and the mutations would have been caught by the staleness gate instead of by the assertions they exist to exercise. Fixed. Its fixture now also copies `CLAUDE.md`, `CONTRIBUTING.md`, `DESIGN.md`, and `ROADMAP.md` so the new sweep can see them. |
| 32 | +- `test/test-setup.sh` no longer passes `--no-codex`, and `test/integration-test.sh` no longer builds `dist/` and `AGENTS.md` into its sandbox. |
| 33 | +- Four new mutations prove the gate bites: a reference reintroduced into README, an empty `dist/` directory (which the content grep alone would miss), an untagged reference inside `docs/index.html` — the one file carrying legitimate tagged lines, so this catches a future "simplification" from exempting lines to exempting the whole landing page — and a capability claim that happens to carry the review bot's name. Mutation suite 18 → 22. |
| 34 | +- `regen()` in the mutation suite no longer swallows a generator failure. A failed regeneration means the mutation trips smoke-test's staleness gate instead of the assertion it exists to exercise, and every GUARDED line after it is meaningless. It now aborts loudly. |
| 35 | + |
3 | 36 | ## v3.3.0.4 (2026-08-06) |
4 | 37 |
|
5 | 38 | No user-facing change — this release is test coverage for the two scripts a user runs when something has gone wrong. |
|
0 commit comments