agentic-sdlc-wizard 1.76.0 → 1.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +25 -0
- package/CLAUDE_CODE_SDLC_WIZARD.md +24 -20
- package/README.md +3 -2
- package/cli/init.js +76 -0
- package/cli/lib/repo-complexity.js +2 -2
- package/cli/templates/settings.json +4 -0
- package/hooks/goal-confidence-check.sh +82 -0
- package/hooks/hooks.json +4 -0
- package/hooks/model-effort-check.sh +3 -3
- package/package.json +1 -1
- package/skills/sdlc/SKILL.md +9 -7
- package/skills/setup/SKILL.md +2 -2
- package/skills/update/SKILL.md +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ All notable changes to the SDLC Wizard.
|
|
|
4
4
|
|
|
5
5
|
> **Note:** This changelog is for humans to read. Don't manually apply these changes - just run the wizard ("Check for SDLC wizard updates") and it handles everything automatically.
|
|
6
6
|
|
|
7
|
+
## [1.78.0] - 2026-06-02
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Bumped recommended model from Opus 4.7 → Opus 4.8** (closes #365). Opus 4.8 launched 2026-05-28; day 5 in-the-wild sentiment settled positive, proof-of-life via `claude --print --model claude-opus-4-8` confirmed reachability, and the `opus[1m]` alias auto-resolves to latest Opus on CC v2.1.154+ (no settings.json template change needed — alias does the work). Updated prose across `SDLC.md` (Recommended Model row + effort warning), `CLAUDE_CODE_SDLC_WIZARD.md` (~11 mentions in effort table + autocompact + mixed-mode tier + 1M-context section), `skills/sdlc/SKILL.md`, `skills/setup/SKILL.md` (mixed-mode + flagship tier suggestions), `skills/update/SKILL.md`, `hooks/model-effort-check.sh` (warning text), and `cli/lib/repo-complexity.js` (tier comments). Min CC bumped v2.1.111+ → v2.1.154+ (required to resolve `opus[1m]` to 4.8). Effort semantics preserved — strict effort behavior introduced in 4.7 carried forward to 4.8, so `max` remains the recommended default and `xhigh` the floor.
|
|
12
|
+
|
|
13
|
+
### Notes
|
|
14
|
+
|
|
15
|
+
- **Un-run gates 2+3 tracked as post-deploy follow-up obligations on #365.** Gate 2 (A/B coder quality vs 4.7 on real PRs) and Gate 3 (dogfood for 24h before bump) were both deferred. If real-world use surfaces the system-card-flagged regressions for 4.8 — prompt-injection +60% on Gray Swan, file-deletion tendency, or eval-awareness affecting wizard output — revert via a single PR that flips the 4.7↔4.8 prose. Settings.json template unchanged means revert is prose-only.
|
|
16
|
+
|
|
17
|
+
## [1.77.0] - 2026-05-24
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- **`release-dry-run.yml` CI workflow** (A1, v1.75.1 post-mortem). Runs `npm publish --dry-run --tag dry-run --json` on every PR touching `release.yml`, `package.json`, or the shipped package surface (`cli/`, `hooks/`, `skills/`, `.claude-plugin/`, `CLAUDE_CODE_SDLC_WIZARD.md`, `CHANGELOG.md`). Catches MODULE_NOT_FOUND-class regressions, dropped shipped paths, Node/npm version drift — visible at PR-time instead of producing a half-published tag. Uses `permissions: contents: read` only (no `id-token: write` — npm CLI runs OIDC setup before the dry-run branch, so requesting that permission would attempt token mint on every PR). Rewrites `package.json` to `0.0.0-dry-run-<SHA>` in a temp checkout to avoid the "cannot publish over previously published versions" error. Path filter is `package.json.files`-aware and tested for drift. 25 quality tests in `tests/test-release-dry-run-workflow.sh`.
|
|
22
|
+
- **`cc-version-drift.yml` cadence workflow** (closes #350). The fix for the gap that let native `/goal` (CC v2.1.139) slip past for 32 versions / 5 weeks. Pure GH-API detector — no LLM, no API spend. Mon 09:30 UTC cron (staggered from `weekly-update.yml` 09:00 and `weekly-api-update.yml` 10:00) + `workflow_dispatch`. Parses new `<!-- Claude Code Baseline: vX.Y.Z -->` anchor in `SDLC.md` (single-purpose; NOT `<!-- SDLC Wizard Version -->` which is the wizard's own pkg version), compares to `npm view @anthropic-ai/claude-code version`, opens a tracking issue when patch gap > 5 (major/minor jumps alert regardless of threshold). Idempotent via label `cc-version-drift` + machine-readable marker in issue body. Edits existing open issue instead of comment-spamming. Re-opens a closed issue only if delta WIDENED (respects "won't fix for now"). 22 workflow tests + 18 unit tests on the extracted `scripts/cc-drift-check.sh` (bash 3 compatible, strict SemVer validation, refuses prereleases and regressions).
|
|
23
|
+
- **`/goal` SDLC-discipline gates in `/sdlc` skill** (PR-D). Two new load-bearing rules now that native `/goal` is universal across CC (v2.1.139+) and Codex CLI: **(1) Confidence gate — NEVER invoke `/goal` below HIGH 95%** (mirrors existing Confidence Check; below 95% the Haiku evaluator rubber-stamps "did the agent flail" as progress). **(2) DLC binding — the condition MUST name the active DLC** (`/sdlc`, `/gdlc`, `/ldlc`, etc.) so the evaluator anchors on "doing it right," not just "doing it." Example: `/goal "tests pass + clean tree following /sdlc, stop after 20 turns"`. `test_sdlc_skill_has_goal_wrapper` extended to grep both new keywords (9 quality elements total).
|
|
24
|
+
- **`<!-- Claude Code Baseline: v2.1.150 -->` anchor in `SDLC.md`** — single-purpose machine-parseable source of truth for `cc-version-drift.yml`. Maintainer updates this anchor + the human-readable `Claude Code Recommended` row when bumping CC support. Test asserts both stay in sync.
|
|
25
|
+
|
|
26
|
+
### Notes
|
|
27
|
+
|
|
28
|
+
- **Trusted Publishing flow held.** Third release shipped via OIDC since the v1.75.0 migration; no token to rotate, expire, or 2FA-gate.
|
|
29
|
+
- **Cross-model design reviews** at `.reviews/176-followup-prio-codex.md` (Codex gpt-5.5 xhigh). Caught: (a) naive `npm publish --dry-run` against already-published version fails today; (b) `id-token: write` on the dry-run workflow would attempt OIDC mint on every PR; (c) `weekly-update.yml` is the wrong host for #350 (cron is disabled + tests assert no `issues: write`); (d) "minor versions" is wrong terminology — `2.1.150 → 2.1.180` is a SemVer patch delta.
|
|
30
|
+
- **Self-test landed in PR-B:** the new `release-dry-run.yml` workflow ran ON the PR that introduced it (paths filter included `release-dry-run.yml` itself) and SUCCEEDED — first proof that the dry-run mechanism works end-to-end against the temp-version-rewrite + `--tag dry-run` flow.
|
|
31
|
+
|
|
7
32
|
## [1.76.0] - 2026-05-24
|
|
8
33
|
|
|
9
34
|
### Added
|
|
@@ -241,7 +241,7 @@ When Anthropic provides official plugins or tools that handle something:
|
|
|
241
241
|
| **Claude Code v2.1.69+** | Required for InstructionsLoaded hook, skill directory variable, and Tasks system |
|
|
242
242
|
| **Git repository** | Files should be committed for team sharing |
|
|
243
243
|
|
|
244
|
-
**Blank repos (no CLAUDE.md, no code):** The wizard works on empty repos. Run `npx agentic-sdlc-wizard init` — it installs hooks, skills, and the wizard doc. On first session, the hooks detect missing SDLC files and redirect to `/setup-wizard`, which generates CLAUDE.md, SDLC.md, TESTING.md, and ARCHITECTURE.md interactively. You do NOT need to run Claude's built-in `/init` first — the setup wizard handles everything.
|
|
244
|
+
**Blank repos (no CLAUDE.md, no code):** The wizard works on empty repos. Run `npx -y agentic-sdlc-wizard@latest init` — it installs hooks, skills, and the wizard doc. (The `@latest` pin guards against stale npx caches per #358.) On first session, the hooks detect missing SDLC files and redirect to `/setup-wizard`, which generates CLAUDE.md, SDLC.md, TESTING.md, and ARCHITECTURE.md interactively. You do NOT need to run Claude's built-in `/init` first — the setup wizard handles everything.
|
|
245
245
|
|
|
246
246
|
---
|
|
247
247
|
|
|
@@ -249,26 +249,26 @@ When Anthropic provides official plugins or tools that handle something:
|
|
|
249
249
|
|
|
250
250
|
Claude Code's **effort level** controls how much thinking the model does before responding. Higher effort = deeper reasoning but more tokens.
|
|
251
251
|
|
|
252
|
-
> ⚠️ **On Opus 4.
|
|
252
|
+
> ⚠️ **On Opus 4.8, effort below `xhigh` breaks SDLC compliance in practice.** Inherited from 4.7, Opus 4.8 respects effort levels *strictly* — at `high` or below it scopes work tighter (shallow reasoning, skipped TDD, no self-review) rather than going above-and-beyond. Treat the table below accordingly: **`max` is the recommended default, `xhigh` is the floor**, `high` or below is for trivial grep/search subagents only.
|
|
253
253
|
|
|
254
254
|
| Level | When to Use | How to Set |
|
|
255
255
|
|-------|-------------|------------|
|
|
256
|
-
| `high` or below | **Not for SDLC work on Opus 4.
|
|
257
|
-
| `xhigh` | **Floor for SDLC work on Opus 4.
|
|
258
|
-
| `max` | **Recommended default for Opus 4.
|
|
259
|
-
|
|
260
|
-
**
|
|
261
|
-
- **`xhigh`
|
|
262
|
-
- **Claude Code
|
|
263
|
-
- **Opus 4.7 respects effort levels more strictly** than 4.6 — at lower levels it scopes work tighter instead of going above and beyond. If you see shallow reasoning, raise effort rather than prompting around it
|
|
264
|
-
- **`budget_tokens` is deprecated** on Opus 4.7 — use adaptive thinking with effort instead
|
|
256
|
+
| `high` or below | **Not for SDLC work on Opus 4.8.** Only for trivial grep/search subagents or one-shot questions that don't require planning | `effort: high` in a specific subagent frontmatter only |
|
|
257
|
+
| `xhigh` | **Floor for SDLC work on Opus 4.8.** Long-running tasks, repeated tool calls, deep exploration. Claude Code defaults to this on Opus 4.7+ | `/effort xhigh` or set in skill frontmatter |
|
|
258
|
+
| `max` | **Recommended default for Opus 4.8 SDLC work.** Multi-file changes, architecture decisions, debugging, cross-model reviews, any task touching wizard/skill/CI code | `/effort max` (session only — resets next session) |
|
|
259
|
+
|
|
260
|
+
**Strict effort behavior (Opus 4.7+, carried forward to 4.8):**
|
|
261
|
+
- **`xhigh` was introduced in 4.7** — sits between `high` and `max`, designed for coding and agentic work (30+ minute tasks with token budgets in the millions)
|
|
262
|
+
- **Claude Code defaults to `xhigh`** on Opus 4.7+ for all plans
|
|
263
|
+
- **Opus 4.7+ respects effort levels more strictly** than 4.6 — at lower levels it scopes work tighter instead of going above and beyond. If you see shallow reasoning, raise effort rather than prompting around it
|
|
264
|
+
- **`budget_tokens` is deprecated** on Opus 4.7+ — use adaptive thinking with effort instead
|
|
265
265
|
- When running at `xhigh` or `max`, set a large `max_tokens` (64k+) so the model has room to think across subagents and tool calls
|
|
266
266
|
|
|
267
267
|
**Why `high` was the previous default:** Claude Code uses **adaptive thinking** to dynamically allocate reasoning budget per turn. On Pro and Max plans, the default effort level was **medium (85)**, which causes the model to under-allocate reasoning on complex multi-step tasks — leading to shallow analysis, missed edge cases, and "lazy" outputs. This was [confirmed by Anthropic engineer Boris Cherny](https://github.com/anthropics/claude-code/issues/42796) and is documented at [code.claude.com](https://code.claude.com/docs/en/model-config). API, Team, and Enterprise plans default to high effort and are not affected.
|
|
268
268
|
|
|
269
269
|
**Don't rely on the CC default — set effort yourself.** Anthropic's [2026-04-23 post-mortem](https://www.anthropic.com/engineering/april-23-postmortem) is independent third-party evidence that CC has flipped reasoning_effort defaults across versions (high → medium → xhigh/high). The default has changed before and will change again. The wizard's `model-effort-check.sh` hook nudges to `xhigh`/`max` at session start specifically because the in-product default is not load-bearing — it can shift release-to-release without notice. Set `/effort max` explicitly every session you do SDLC work, and treat any "I assumed the default was X" reasoning as a bug.
|
|
270
270
|
|
|
271
|
-
The `/sdlc` skill sets `effort: high` in its frontmatter as a baseline, overriding the medium default on every SDLC invocation. **On Opus 4.
|
|
271
|
+
The `/sdlc` skill sets `effort: high` in its frontmatter as a baseline, overriding the medium default on every SDLC invocation. **On Opus 4.8, run `/effort max` at session start** — the frontmatter is a floor, not a ceiling, and `max` is where SDLC-compliant work actually happens on 4.8.
|
|
272
272
|
|
|
273
273
|
**Nuclear option — disable adaptive thinking entirely:** Set `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` in your environment or settings.json `env` block. This forces a fixed reasoning budget per turn instead of letting the model dynamically allocate. Use this if you observe persistent quality issues even with `effort: high`. See [Claude Code model config docs](https://code.claude.com/docs/en/model-config) for details.
|
|
274
274
|
|
|
@@ -966,7 +966,7 @@ Override the default auto-compact threshold with environment variables. These ar
|
|
|
966
966
|
| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Trigger compaction at this % of context capacity (1-100) | ~95% |
|
|
967
967
|
| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Override context capacity in tokens (useful for 1M models) | Model default |
|
|
968
968
|
|
|
969
|
-
**Opt-in (issue #198):** The SDLC Wizard CLI ships `.claude/settings.json` with **no** `model` or `env` pin so Claude Code's auto-mode stays enabled. The setup skill's Step 9.5 asks whether to opt into `"model": "opus[1m]"` + `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30` (tuned for the 1M window — compacts at ~300K). Default answer is **No**. Pinning the model at the top level tells Claude Code you've explicitly chosen a model and turns off per-turn model auto-selection — a real tradeoff, so we ask. Power users who want guaranteed Opus 4.
|
|
969
|
+
**Opt-in (issue #198):** The SDLC Wizard CLI ships `.claude/settings.json` with **no** `model` or `env` pin so Claude Code's auto-mode stays enabled. The setup skill's Step 9.5 asks whether to opt into `"model": "opus[1m]"` + `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30` (tuned for the 1M window — compacts at ~300K). Default answer is **No**. Pinning the model at the top level tells Claude Code you've explicitly chosen a model and turns off per-turn model auto-selection — a real tradeoff, so we ask. Power users who want guaranteed Opus 4.8 + 1M context answer yes.
|
|
970
970
|
|
|
971
971
|
To opt in by hand, edit `.claude/settings.json`:
|
|
972
972
|
|
|
@@ -1021,13 +1021,13 @@ Claude Code supports both 200K and 1M context windows. **`opus[1m]` is an opt-in
|
|
|
1021
1021
|
**Why `opus[1m]` is opt-in (issue #198):**
|
|
1022
1022
|
- **Pinning disables auto-mode.** Max-plan users pay for Claude Code's per-turn model selection (Sonnet for cheap tasks, Opus for hard ones, plus weekly-limit smoothing). A top-level `model` gives that up.
|
|
1023
1023
|
- **The 1M headroom has to earn it.** If your typical session stays under 150K, you're giving up auto-mode for headroom you're not using.
|
|
1024
|
-
- **Power users who want guaranteed Opus 4.
|
|
1024
|
+
- **Power users who want guaranteed Opus 4.8 + 1M** — go ahead, it's a real win for long shepherding sessions. Just make it a conscious choice, not a silent default.
|
|
1025
1025
|
|
|
1026
|
-
**Opt in when:** you routinely cross 100K tokens in a single session (plan → TDD → review → CI shepherd on one feature), you want Opus 4.
|
|
1026
|
+
**Opt in when:** you routinely cross 100K tokens in a single session (plan → TDD → review → CI shepherd on one feature), you want Opus 4.8 specifically (not Sonnet), and you're OK losing auto-mode.
|
|
1027
1027
|
|
|
1028
1028
|
**Stay on auto-mode (default) when:** you're unsure, your work is mixed short/long, or you want Claude Code to do the model math for you.
|
|
1029
1029
|
|
|
1030
|
-
**How to opt in:** run `/model opus[1m]` in your session (transient), or set `"model": "opus[1m]"` in `.claude/settings.json` (persistent). Requires Claude Code v2.1.
|
|
1030
|
+
**How to opt in:** run `/model opus[1m]` in your session (transient), or set `"model": "opus[1m]"` in `.claude/settings.json` (persistent). Requires Claude Code v2.1.154+ for Opus 4.8 (the `opus[1m]` alias auto-resolves to the latest Opus). The setup wizard's Step 9.5 also asks once, with default No.
|
|
1031
1031
|
|
|
1032
1032
|
**How to opt out:** remove the `model` line from `.claude/settings.json`, or run `/model` and pick "Default (recommended)".
|
|
1033
1033
|
|
|
@@ -1037,14 +1037,14 @@ Claude Code supports both 200K and 1M context windows. **`opus[1m]` is an opt-in
|
|
|
1037
1037
|
|
|
1038
1038
|
### Mixed-Mode Tier (Sonnet coder + Opus reviewer, roadmap #233)
|
|
1039
1039
|
|
|
1040
|
-
For trivial / blank / config-only / CRUD-style repos, full Opus 4.
|
|
1040
|
+
For trivial / blank / config-only / CRUD-style repos, full Opus 4.8 on every turn is overkill on the coder leg. The **mixed-mode tier** pins `model: "sonnet[1m]"` for in-session work while keeping the cross-model review layer (Codex / external reviewer) at the flagship — so the reviewer still catches what Sonnet missed.
|
|
1041
1041
|
|
|
1042
1042
|
**The split:**
|
|
1043
1043
|
|
|
1044
1044
|
| Layer | Mixed-mode tier | Flagship tier |
|
|
1045
1045
|
|-------|----------------|---------------|
|
|
1046
1046
|
| Coder (in-session CC) | `model: "sonnet[1m]"` | `model: "opus[1m]"` |
|
|
1047
|
-
| Cross-model reviewer (Codex etc.) | gpt-5.5 xhigh (or Opus 4.
|
|
1047
|
+
| Cross-model reviewer (Codex etc.) | gpt-5.5 xhigh (or Opus 4.8 max via Bash) | gpt-5.5 xhigh (or Opus 4.8 max via Bash) |
|
|
1048
1048
|
| Effort floor (CC session) | xhigh; max preferred | xhigh; max preferred |
|
|
1049
1049
|
|
|
1050
1050
|
The reviewer always stays at flagship — the whole point of mixed-mode is that adversarial review catches Sonnet's blind spots, so weakening the review leg defeats the savings.
|
|
@@ -1058,7 +1058,7 @@ The reviewer always stays at flagship — the whole point of mixed-mode is that
|
|
|
1058
1058
|
**When to stay flagship:**
|
|
1059
1059
|
- Stakes-flagged repo: anywhere `.env` / `secrets/` / `credentials/` exists. Force flagship even if LOC is tiny — leaks are catastrophic
|
|
1060
1060
|
- Architecture work, debugging non-obvious bugs, security review, anything where the *coder's* judgment matters as much as the reviewer's
|
|
1061
|
-
- Long shepherd sessions (plan → TDD → review → CI loop) — they cross 100K tokens regularly and Opus 4.
|
|
1061
|
+
- Long shepherd sessions (plan → TDD → review → CI loop) — they cross 100K tokens regularly and Opus 4.8 fits the window better in a single thread
|
|
1062
1062
|
|
|
1063
1063
|
**Auto-detection:** the setup wizard runs `cli/lib/repo-complexity.js` against the target repo and suggests the tier. Stakes flag (`.env` / `secrets/`) forces complex regardless of size. The user always picks the final answer — the heuristic is a hint, not a gate.
|
|
1064
1064
|
|
|
@@ -2366,6 +2366,8 @@ PLANNING → DOCS → TDD RED → TDD GREEN → Tests Pass → Self-Review
|
|
|
2366
2366
|
|
|
2367
2367
|
> **Always append `< /dev/null`** to `codex exec` calls run from background, hooks, CI, or any non-interactive parent. Without it, codex blocks on stdin reads even when the prompt is given as an argument — the process sits at S/0% CPU indefinitely with a 0-byte `-o` output file (the file is only written on completion, so a hang gives zero visibility). Validated on codex-cli 0.130.0 / macOS 14, 2026-05-15. For live progress, use `scripts/codex-review-with-progress.sh` instead.
|
|
2368
2368
|
|
|
2369
|
+
> **Always launch codex via `run_in_background: true` on the Bash tool.** The Bash tool clamps `timeout` to 600000 ms (10 min) regardless of the value passed, and force-kills the foreground process at that wall. Multi-artifact bundle reviews (release reviews per the checklist below, multi-finding rechecks, etc.) routinely run 6–30 minutes — they need background mode to complete. The wrapper `scripts/codex-review.sh` already has a 30-min stall watchdog (`STALL_SECONDS=1800`) as the real timeout control. A foreground call killed mid-review plus the Stop-hook re-invocation loop can burn 60+ minutes of session compute on what should be a single 7-minute run (issue #364, 2026-05-27 incident). The general rule: **any long-running wrapper invoked through the CC Bash tool — codex, slow builds, long test suites — should use `run_in_background: true` unconditionally and let the wrapper's own stall watchdog be the timeout authority.**
|
|
2370
|
+
|
|
2369
2371
|
3. If CERTIFIED → proceed to CI. If NOT CERTIFIED → go to Round 2.
|
|
2370
2372
|
|
|
2371
2373
|
### Round 2+: Dialogue Loop
|
|
@@ -2981,7 +2983,7 @@ If deployment fails or post-deploy verification catches issues:
|
|
|
2981
2983
|
|
|
2982
2984
|
**SDLC.md:**
|
|
2983
2985
|
```markdown
|
|
2984
|
-
<!-- SDLC Wizard Version: 1.
|
|
2986
|
+
<!-- SDLC Wizard Version: 1.78.0 -->
|
|
2985
2987
|
<!-- Setup Date: [DATE] -->
|
|
2986
2988
|
<!-- Completed Steps: step-0.1, step-0.2, step-0.4, step-1, step-2, step-3, step-4, step-5, step-6, step-7, step-8, step-9 -->
|
|
2987
2989
|
<!-- Git Workflow: [PRs or Solo] -->
|
|
@@ -3802,6 +3804,8 @@ codex exec \
|
|
|
3802
3804
|
|
|
3803
3805
|
> **Always append `< /dev/null`** to `codex exec` calls run from background, hooks, CI, or any non-interactive parent. Without it, codex blocks on stdin reads even when the prompt is given as an argument — the process sits at S/0% CPU indefinitely with a 0-byte `-o` output file. Validated on codex-cli 0.130.0 / macOS 14, 2026-05-15. For live progress visibility, use `scripts/codex-review-with-progress.sh` instead.
|
|
3804
3806
|
|
|
3807
|
+
> **Always launch via `run_in_background: true` on the Bash tool.** Same reason as the parallel callout in the Cross-Model Review Loop section above — Bash tool clamps `timeout` to 600000 ms (10 min) regardless of the value passed and force-kills foreground at the wall. Multi-artifact bundle reviews need background mode to complete. See issue #364 (2026-05-27 incident: 70 min session compute on a 7-min review).
|
|
3808
|
+
|
|
3805
3809
|
4. If CERTIFIED → done. If NOT CERTIFIED → enter the dialogue loop.
|
|
3806
3810
|
|
|
3807
3811
|
**The Dialogue Loop (Round 2+):**
|
package/README.md
CHANGED
|
@@ -12,8 +12,9 @@ A **self-evolving Software Development Life Cycle (SDLC) enforcement system for
|
|
|
12
12
|
|
|
13
13
|
Run from your terminal or from inside Claude Code (`!` prefix):
|
|
14
14
|
```bash
|
|
15
|
-
npx agentic-sdlc-wizard init
|
|
15
|
+
npx -y agentic-sdlc-wizard@latest init
|
|
16
16
|
```
|
|
17
|
+
The `@latest` pin forces npm to fetch the newest version. Without it, `npx` may serve a stale CLI from your local cache (#358); `init` also nudges if it detects a gap.
|
|
17
18
|
Then start (or restart) Claude Code — type `/exit` then `claude` to reload hooks. Setup auto-invokes on first prompt — Claude reads the wizard doc, scans your project, and generates bespoke CLAUDE.md, SDLC.md, TESTING.md, and ARCHITECTURE.md. No manual commands needed.
|
|
18
19
|
|
|
19
20
|
<details>
|
|
@@ -242,7 +243,7 @@ This isn't the only Claude Code SDLC tool. Here's an honest comparison:
|
|
|
242
243
|
| **Evaluation** | 95% CI, CUSUM, SDP, Tier 1/2 | Configuration testing | skilltest framework |
|
|
243
244
|
| **CI Shepherd** | Local CI fix loop | No | No |
|
|
244
245
|
| **Auto-updates** | Weekly CC + community scan | No | No |
|
|
245
|
-
| **Install** | `npx agentic-sdlc-wizard init` | npm install | npm install |
|
|
246
|
+
| **Install** | `npx -y agentic-sdlc-wizard@latest init` | npm install | npm install |
|
|
246
247
|
| **Philosophy** | Lightweight, prove-it-or-delete | Scale and optimization | Documentation-first |
|
|
247
248
|
|
|
248
249
|
**Our unique strengths:** Statistical rigor (CUSUM + 95% CI), SDP scoring (model quality vs SDLC compliance), CI shepherd loop, Prove-It A/B pipeline, comprehensive automated test suite, dogfooding enforcement.
|
package/cli/init.js
CHANGED
|
@@ -25,6 +25,7 @@ const FILES = [
|
|
|
25
25
|
{ src: 'hooks/instructions-loaded-check.sh', dest: '.claude/hooks/instructions-loaded-check.sh', executable: true, base: REPO_ROOT },
|
|
26
26
|
{ src: 'hooks/model-effort-check.sh', dest: '.claude/hooks/model-effort-check.sh', executable: true, base: REPO_ROOT },
|
|
27
27
|
{ src: 'hooks/precompact-seam-check.sh', dest: '.claude/hooks/precompact-seam-check.sh', executable: true, base: REPO_ROOT },
|
|
28
|
+
{ src: 'hooks/goal-confidence-check.sh', dest: '.claude/hooks/goal-confidence-check.sh', executable: true, base: REPO_ROOT },
|
|
28
29
|
// #254 Bug 1: shared helper sourced by all hooks above. Must ship — without
|
|
29
30
|
// it, hooks emit "_find-sdlc-root.sh: No such file or directory" + the
|
|
30
31
|
// SDLC root walk-up logic is silently dead.
|
|
@@ -283,6 +284,79 @@ function invalidateVersionCache({ dryRun }) {
|
|
|
283
284
|
return true;
|
|
284
285
|
}
|
|
285
286
|
|
|
287
|
+
// #358: Nudge the user if their CLI is behind npm latest. Stale-npx-cache
|
|
288
|
+
// is the quiet onboarding bug — `npx agentic-sdlc-wizard init` (no @latest
|
|
289
|
+
// pin) serves whatever version is cached on disk, sometimes months old.
|
|
290
|
+
// Reuses the SDLC_WIZARD_CACHE_DIR/latest-version cache that the
|
|
291
|
+
// instructions-loaded hook already populates (#64/#196), so up-to-date users
|
|
292
|
+
// pay zero extra latency.
|
|
293
|
+
function maybeEmitStaleCliNudge() {
|
|
294
|
+
const semverRe = /^(\d+)\.(\d+)\.(\d+)$/;
|
|
295
|
+
const cmp = (a, b) => {
|
|
296
|
+
const am = a.match(semverRe);
|
|
297
|
+
const bm = b.match(semverRe);
|
|
298
|
+
if (!am || !bm) return 0;
|
|
299
|
+
for (let i = 1; i <= 3; i++) {
|
|
300
|
+
const ai = parseInt(am[i], 10);
|
|
301
|
+
const bi = parseInt(bm[i], 10);
|
|
302
|
+
if (ai < bi) return -1;
|
|
303
|
+
if (ai > bi) return 1;
|
|
304
|
+
}
|
|
305
|
+
return 0;
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
let current;
|
|
309
|
+
try {
|
|
310
|
+
current = require('../package.json').version;
|
|
311
|
+
} catch (_) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (!semverRe.test(current)) return;
|
|
315
|
+
|
|
316
|
+
const cacheDir = process.env.SDLC_WIZARD_CACHE_DIR
|
|
317
|
+
|| path.join(os.homedir(), '.cache', 'sdlc-wizard');
|
|
318
|
+
const cacheFile = path.join(cacheDir, 'latest-version');
|
|
319
|
+
let latest = null;
|
|
320
|
+
|
|
321
|
+
// Try cache first (24h TTL, valid semver, #239 sanity check: cached
|
|
322
|
+
// "latest" must be >= installed — older value means poisoned, refetch).
|
|
323
|
+
if (fs.existsSync(cacheFile)) {
|
|
324
|
+
try {
|
|
325
|
+
const stat = fs.statSync(cacheFile);
|
|
326
|
+
const ageMs = Date.now() - stat.mtimeMs;
|
|
327
|
+
if (ageMs < 86400 * 1000) {
|
|
328
|
+
const content = fs.readFileSync(cacheFile, 'utf8').trim();
|
|
329
|
+
if (semverRe.test(content) && cmp(content, current) >= 0) {
|
|
330
|
+
latest = content;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
} catch (_) { /* unreadable — fall through to npm fetch */ }
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Cache miss / stale / poisoned → npm fetch (5s timeout, write on success)
|
|
337
|
+
if (latest === null) {
|
|
338
|
+
try {
|
|
339
|
+
const { execSync } = require('child_process');
|
|
340
|
+
const fetched = execSync('npm view agentic-sdlc-wizard version 2>/dev/null', {
|
|
341
|
+
encoding: 'utf8',
|
|
342
|
+
timeout: 5000,
|
|
343
|
+
}).trim();
|
|
344
|
+
if (semverRe.test(fetched)) {
|
|
345
|
+
latest = fetched;
|
|
346
|
+
try {
|
|
347
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
348
|
+
fs.writeFileSync(cacheFile, latest);
|
|
349
|
+
} catch (_) { /* best-effort cache write */ }
|
|
350
|
+
}
|
|
351
|
+
} catch (_) { /* offline or npm unavailable — silent */ }
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (latest && cmp(current, latest) < 0) {
|
|
355
|
+
console.log(`\n ${YELLOW}STALE${RESET} agentic-sdlc-wizard CLI ${current} in use; npm latest is ${latest}.`);
|
|
356
|
+
console.log(` Recommended: rerun with ${CYAN}npx -y agentic-sdlc-wizard@latest init${RESET} to install the newest hooks/skills.`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
286
360
|
function init(targetDir, { force = false, dryRun = false, preserveCustomized = false } = {}) {
|
|
287
361
|
if (!dryRun && !force) {
|
|
288
362
|
const pluginPaths = detectPluginInstall();
|
|
@@ -302,6 +376,8 @@ function init(targetDir, { force = false, dryRun = false, preserveCustomized = f
|
|
|
302
376
|
}
|
|
303
377
|
}
|
|
304
378
|
|
|
379
|
+
maybeEmitStaleCliNudge();
|
|
380
|
+
|
|
305
381
|
const ops = planOperations(targetDir, { force, preserveCustomized });
|
|
306
382
|
|
|
307
383
|
if (dryRun) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Roadmap #233: repo complexity heuristic for mixed-mode tier selection.
|
|
2
2
|
//
|
|
3
3
|
// Output: { tier: 'simple' | 'complex', score: <number>, signals: [...] }
|
|
4
|
-
// - 'simple' → setup wizard suggests mixed-mode (Sonnet 4.6 coder + Opus 4.
|
|
5
|
-
// - 'complex' → setup wizard suggests full flagship (Opus 4.
|
|
4
|
+
// - 'simple' → setup wizard suggests mixed-mode (Sonnet 4.6 coder + Opus 4.8 reviewer)
|
|
5
|
+
// - 'complex' → setup wizard suggests full flagship (Opus 4.8 everywhere)
|
|
6
6
|
// Cross-model review (Codex / external) always stays at the flagship tier
|
|
7
7
|
// regardless of coder selection — see CLAUDE_CODE_SDLC_WIZARD.md.
|
|
8
8
|
//
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# /goal SDLC discipline gate (ROADMAP #360).
|
|
3
|
+
#
|
|
4
|
+
# UserPromptSubmit hook. When the user invokes `/goal <condition>`, scan the
|
|
5
|
+
# prior assistant text for a HIGH 95% confidence statement AND check the
|
|
6
|
+
# condition for a DLC binding (`/sdlc`, `/gdlc`, `/ldlc`, etc.). Emit loud
|
|
7
|
+
# warnings on either gap so the SDLC-discipline gap surfaces BEFORE the goal
|
|
8
|
+
# evaluator starts rubber-stamping flailing as progress.
|
|
9
|
+
#
|
|
10
|
+
# PR #355 (v1.77.0) added the guidance text in skills/sdlc/SKILL.md. This
|
|
11
|
+
# hook is the enforcement layer per #360. Non-blocking soft nudge — same
|
|
12
|
+
# pattern as model-effort-check.sh.
|
|
13
|
+
|
|
14
|
+
HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
+
source "$HOOK_DIR/_find-sdlc-root.sh"
|
|
16
|
+
|
|
17
|
+
# Plugin + project copies both register this hook → plugin yields (#236).
|
|
18
|
+
dedupe_plugin_or_project "${BASH_SOURCE[0]}" || exit 0
|
|
19
|
+
|
|
20
|
+
# Must be invoked via hook (stdin JSON), not interactively.
|
|
21
|
+
[ -t 0 ] && exit 0
|
|
22
|
+
STDIN_JSON=$(cat)
|
|
23
|
+
[ -z "$STDIN_JSON" ] && exit 0
|
|
24
|
+
command -v jq > /dev/null 2>&1 || exit 0
|
|
25
|
+
|
|
26
|
+
PROMPT=$(printf '%s' "$STDIN_JSON" | jq -r '.prompt // empty' 2>/dev/null) || exit 0
|
|
27
|
+
[ -z "$PROMPT" ] && exit 0
|
|
28
|
+
|
|
29
|
+
# Only act on `/goal <condition>` invocations. `/goal` alone (status) and
|
|
30
|
+
# `/goal clear` (reset) must stay silent — those aren't discipline events.
|
|
31
|
+
case "$PROMPT" in
|
|
32
|
+
"/goal") exit 0 ;;
|
|
33
|
+
"/goal "[[:space:]]*) exit 0 ;;
|
|
34
|
+
"/goal clear") exit 0 ;;
|
|
35
|
+
"/goal clear "*) exit 0 ;;
|
|
36
|
+
"/goal "*) ;;
|
|
37
|
+
*) exit 0 ;;
|
|
38
|
+
esac
|
|
39
|
+
|
|
40
|
+
CONDITION="${PROMPT#/goal }"
|
|
41
|
+
|
|
42
|
+
# === Confidence gate ===
|
|
43
|
+
# Read transcript_path, slurp JSONL, find last assistant message with text
|
|
44
|
+
# content, scan for HIGH-95% confidence pattern. Silent on missing/unreadable
|
|
45
|
+
# transcript — better to under-warn than crash a soft nudge.
|
|
46
|
+
TRANSCRIPT_PATH=$(printf '%s' "$STDIN_JSON" | jq -r '.transcript_path // empty' 2>/dev/null) || TRANSCRIPT_PATH=""
|
|
47
|
+
HAS_CONFIDENCE=0
|
|
48
|
+
if [ -n "$TRANSCRIPT_PATH" ] && [ -r "$TRANSCRIPT_PATH" ]; then
|
|
49
|
+
LAST_ASSISTANT_TEXT=$(jq -rs '
|
|
50
|
+
[.[] | select(.type == "assistant")]
|
|
51
|
+
| last
|
|
52
|
+
| if . == null then ""
|
|
53
|
+
else (.message.content // []) | map(select(.type == "text") | .text) | join("\n")
|
|
54
|
+
end
|
|
55
|
+
' "$TRANSCRIPT_PATH" 2>/dev/null) || LAST_ASSISTANT_TEXT=""
|
|
56
|
+
if printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qiE 'HIGH \(?95%|confidence:?[[:space:]]+HIGH|HIGH[[:space:]]+95%|95%[[:space:]]+confidence'; then
|
|
57
|
+
HAS_CONFIDENCE=1
|
|
58
|
+
fi
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
if [ "$HAS_CONFIDENCE" -eq 0 ]; then
|
|
62
|
+
echo ""
|
|
63
|
+
echo "!! /GOAL CONFIDENCE GATE: prior turn did not state HIGH 95% confidence !!"
|
|
64
|
+
echo " The /goal Haiku evaluator rubber-stamps flailing as progress below 95%."
|
|
65
|
+
echo " Recommendation: /goal clear → do research → state HIGH 95% confidence → re-issue /goal."
|
|
66
|
+
echo " (Source: skills/sdlc/SKILL.md Long-Running Goals section, ROADMAP #360.)"
|
|
67
|
+
echo ""
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# === DLC binding gate ===
|
|
71
|
+
# Condition MUST name a DLC (`/sdlc`, `/gdlc`, `/ldlc`, etc.) so the
|
|
72
|
+
# evaluator anchors on "doing it right" not just "doing it".
|
|
73
|
+
if ! printf '%s' "$CONDITION" | grep -qiE '/[a-z]+dlc'; then
|
|
74
|
+
echo ""
|
|
75
|
+
echo "!! /GOAL DLC-BINDING GATE: condition does not name a DLC (/sdlc, /gdlc, /ldlc) !!"
|
|
76
|
+
echo " The evaluator needs a discipline anchor to judge 'doing it right' vs flailing."
|
|
77
|
+
echo " Recommendation: rewrite condition to include 'following /sdlc' (or /gdlc/etc)."
|
|
78
|
+
echo " (Source: skills/sdlc/SKILL.md Long-Running Goals section, ROADMAP #360.)"
|
|
79
|
+
echo ""
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
exit 0
|
package/hooks/hooks.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Behavior (per ROADMAP #217):
|
|
5
5
|
# effort=max -> silent (preferred default, above floor)
|
|
6
|
-
# effort=xhigh -> silent (minimum floor on Opus 4.
|
|
6
|
+
# effort=xhigh -> silent (minimum floor on Opus 4.8)
|
|
7
7
|
# effort=high|medium|low (or unset) -> LOUD WARNING:
|
|
8
|
-
# Opus 4.
|
|
8
|
+
# Opus 4.8 needs xhigh floor for SDLC compliance (TDD, self-review, deep reasoning).
|
|
9
9
|
# Recommends `/effort max`. Also reminds about recommended model `opus[1m]`.
|
|
10
10
|
#
|
|
11
11
|
# CC does not expose the current model to hooks, so the model nudge is emitted as
|
|
@@ -57,7 +57,7 @@ else
|
|
|
57
57
|
fi
|
|
58
58
|
|
|
59
59
|
echo "=============================================================================="
|
|
60
|
-
echo " WARNING: effort '$effort_display' breaks SDLC compliance on Opus 4.
|
|
60
|
+
echo " WARNING: effort '$effort_display' breaks SDLC compliance on Opus 4.8."
|
|
61
61
|
echo " Below xhigh = shallow reasoning, skipped TDD, dropped self-review."
|
|
62
62
|
echo ""
|
|
63
63
|
echo " Run: /effort max (preferred, full SDLC compliance)"
|
package/package.json
CHANGED
package/skills/sdlc/SKILL.md
CHANGED
|
@@ -110,11 +110,11 @@ Use plan mode for: multi-file changes, new features, LOW confidence, bugs needin
|
|
|
110
110
|
|
|
111
111
|
## Long-Running Goals (`/goal`)
|
|
112
112
|
|
|
113
|
-
Native `/goal <condition>` (**
|
|
113
|
+
Native `/goal <condition>` (**v2.1.143+**). Haiku evaluator re-checks transcript per turn. **Confidence gate — NEVER invoke below HIGH 95%**; below that the evaluator rubber-stamps flailing as progress. **DLC binding — condition MUST name the DLC** (`/sdlc`, `/gdlc`, `/ldlc`, etc.) so the evaluator anchors on "doing it right." **Pre-flight:** trusted workspace; `disableAllHooks`/`allowManagedHooksOnly` both off. **Condition = contract:** end state + check + constraints + hard turn/time bound (no native cap); e.g. `/goal "tests pass + clean tree following /sdlc, stop after 20 turns"`. **Anti-pattern:** evaluator can't call tools — transcript-only. `--resume` resets counters.
|
|
114
114
|
|
|
115
115
|
## Recommended Model
|
|
116
116
|
|
|
117
|
-
**Opt-in: `opus[1m]` (Opus 4.
|
|
117
|
+
**Opt-in: `opus[1m]` (Opus 4.8 with 1M context).** `/model opus[1m]` at the start of non-trivial sessions — understand the tradeoff (issue #198). A top-level `model` pin in `.claude/settings.json` disables CC's per-turn auto-selection; pin only when you need 1M headroom. Requires CC v2.1.154+.
|
|
118
118
|
|
|
119
119
|
**Pair with `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30` when you opt in.** Without it, the default fires at ~76K on 1M. **Pick ONE — do NOT set both `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30` AND `CLAUDE_CODE_AUTO_COMPACT_WINDOW=400000`** — they compound to 30% × 400K = 120K trigger ≈ 12% of 1M, fires almost immediately (#207). See wizard "Autocompact Tuning" for details.
|
|
120
120
|
|
|
@@ -130,18 +130,20 @@ The loop goes back to PLANNING, not TDD RED. Run `/code-review`; issues at confi
|
|
|
130
130
|
|
|
131
131
|
## Cross-Model Review (If Configured)
|
|
132
132
|
|
|
133
|
-
**When to run:** high-stakes changes (auth, payments, data), releases/publishes, complex refactors. **When to skip:** trivial changes, time-sensitive hotfixes, risk < review cost. **Prerequisites:** Codex CLI (`npm i -g @openai/codex`) + OpenAI API key. **Reviewer at flagship tier (#233):** even when project pins `sonnet[1m]`, reviewer runs `gpt-5.5` / Opus 4.
|
|
133
|
+
**When to run:** high-stakes changes (auth, payments, data), releases/publishes, complex refactors. **When to skip:** trivial changes, time-sensitive hotfixes, risk < review cost. **Prerequisites:** Codex CLI (`npm i -g @openai/codex`) + OpenAI API key. **Reviewer at flagship tier (#233):** even when project pins `sonnet[1m]`, reviewer runs `gpt-5.5` / Opus 4.8 max — adversarial diversity is the point.
|
|
134
134
|
|
|
135
135
|
PROTOCOL is universal across domains; only `review_instructions` and `verification_checklist` change.
|
|
136
136
|
|
|
137
137
|
1. **Preflight** (`.reviews/preflight-{review_id}.md`) — what you already checked: `/code-review` passed, tests passing, manual verifications, known limits. Reduces reviewer findings to 0-1/round.
|
|
138
|
-
2. **Mission-first handoff** (`.reviews/handoff.json`) — required
|
|
139
|
-
3. **Run reviewer:** `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access -o .reviews/latest-review.md "<prompt>" < /dev/null`. Always `xhigh`.
|
|
138
|
+
2. **Mission-first handoff** (`.reviews/handoff.json`) — required keys: `"review_id"`, `"status": "PENDING_REVIEW"`, `"round": 1`, `"mission"`/`"success"`/`"failure"` (without them you get "looks good"), `"files_changed"`, `"verification_checklist"` (verification checklist with file:line refs — NOT generic), `"review_instructions"`, `"preflight_path"`. Optional `"pr_number":` opts into PreCompact self-heal (#209: PR MERGED → implicit CERTIFIED).
|
|
139
|
+
3. **Run reviewer:** `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access -o .reviews/latest-review.md "<prompt>" < /dev/null`. Always `xhigh`. Bash tool requires `run_in_background: true` + `dangerouslyDisableSandbox: true`; append `< /dev/null` always. **Why:** `< /dev/null` prevents codex stdin-hang at S/0% CPU; `run_in_background: true` avoids the Bash 10-min (`600000` ms) `timeout` cap that force-kills foreground codex (multi-artifact bundles take 5–30 min). xhigh 1–30 min; wrapper's `STALL_SECONDS=1800` is the real control. Heartbeat: `scripts/codex-review-with-progress.sh`. Foreground burned 70 min on a 7-min review (#364).
|
|
140
140
|
4. **Dialogue loop:** per-finding response (`{"finding": "1", "action": "FIXED|DISPUTED|ACCEPTED", "summary": "..."}` in `.reviews/response.json`). Bump round, set status `PENDING_RECHECK`, add `fixes_applied` (numbered, file:line). Recheck prompt: "TARGETED RECHECK. FIXED → verify certify condition. DISPUTED → ACCEPT if sound, REJECT with reasoning. ACCEPTED → verify applied. No new findings unless P0."
|
|
141
141
|
|
|
142
|
-
**Convergence:** 2 rounds sweet spot, 3 max
|
|
142
|
+
**Convergence:** 2 rounds sweet spot, 3 max. After 3 NOT CERTIFIED → escalate.
|
|
143
143
|
|
|
144
|
-
**
|
|
144
|
+
**Enforcement:** `hooks/goal-confidence-check.sh` warns when `/goal` skips the 95%-confidence or DLC-binding gates (#360).
|
|
145
|
+
|
|
146
|
+
**Multi-reviewer:** respond to each reviewer independently (no shared anchoring). **Non-code domains:** add `"audience"`/`"stakes"` keys to handoff.
|
|
145
147
|
|
|
146
148
|
### Release Review Focus
|
|
147
149
|
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -247,8 +247,8 @@ The output is JSON: `{ tier: "simple" | "complex", score, signals }`. Use the re
|
|
|
247
247
|
> How do you want to configure the model for this repo?
|
|
248
248
|
>
|
|
249
249
|
> - **[N] No pin (default, recommended for most repos):** Leaves auto-mode enabled. Claude Code picks the model per turn. Compaction follows upstream defaults. Simplest, lowest friction.
|
|
250
|
-
> - **[m] Mixed-mode** *(suggested for **simple** tier — roadmap #233):* Pins `model: "sonnet[1m]"` for the coder (Sonnet 4.6 with 1M context). The cross-model review layer (Codex / external reviewer) **always stays at the flagship** (Opus 4.
|
|
251
|
-
> - **[f] Flagship full** *(suggested for **complex** / stakes-flagged tier):* Pins `model: "opus[1m]"` (Opus 4.
|
|
250
|
+
> - **[m] Mixed-mode** *(suggested for **simple** tier — roadmap #233):* Pins `model: "sonnet[1m]"` for the coder (Sonnet 4.6 with 1M context). The cross-model review layer (Codex / external reviewer) **always stays at the flagship** (Opus 4.8 max or gpt-5.5 xhigh) regardless. Saves cost/quota on simple repos; reviewer catches what Sonnet misses. Requires comfort with losing per-turn auto-selection.
|
|
251
|
+
> - **[f] Flagship full** *(suggested for **complex** / stakes-flagged tier):* Pins `model: "opus[1m]"` (Opus 4.8 with 1M context) and sets `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30`. Long SDLC sessions cross 100K tokens regularly; the 1M window gives headroom and 30% autocompact fires at ~300K. Requires Claude Code v2.1.154+.
|
|
252
252
|
>
|
|
253
253
|
> `[N/m/f]`
|
|
254
254
|
|
package/skills/update/SKILL.md
CHANGED
|
@@ -93,17 +93,18 @@ Parse CHANGELOG entries between the user's installed version and latest. Present
|
|
|
93
93
|
|
|
94
94
|
```
|
|
95
95
|
Installed: 1.42.0
|
|
96
|
-
Latest: 1.
|
|
96
|
+
Latest: 1.78.0
|
|
97
97
|
|
|
98
98
|
What changed:
|
|
99
|
+
- [1.78.0] Opus 4.7 → 4.8 model recommendation (#365) + min CC v2.1.154+.
|
|
100
|
+
- [1.77.0] release-dry-run.yml + cc-version-drift.yml (#350) + /goal SDLC gates (95% + DLC binding).
|
|
99
101
|
- [1.76.0] /goal /sdlc wrapper (#347) + CC v2.1.150 feature adoption + ROADMAP demand-signal gate (4 excise, 4 kill).
|
|
100
102
|
- [1.75.1] release-workflow fix — Node 22 → 24 (ships npm 11.x), dropped flaky `npm install -g` self-upgrade (hit MODULE_NOT_FOUND on v1.75.0 publish). Explicit npm-version guard.
|
|
101
103
|
- [1.75.0] npm Trusted Publishing — `release.yml` swapped from `NPM_TOKEN` to OIDC. No more token rotation. Requires one-time publisher config on the npm package page.
|
|
102
104
|
- [1.74.0] v1.43 salvage: #338 precedence preamble; #235ab `/insights`; codex `< /dev/null` stdin-hang fix; test env-isolation.
|
|
103
|
-
- [1.73.0] precompact stale REBASE_HEAD fix
|
|
105
|
+
- [1.73.0] precompact stale REBASE_HEAD fix + 15 stale artifact deletes (-460 LOC).
|
|
104
106
|
- [1.72.0] #323 closed — customization-aware `check` recommendation + new `--preserve-customized` flag. `init --force --preserve-customized` skips CUSTOMIZED files (action `PRESERVE`), still OVERWRITEs MATCH and CREATEs MISSING. Default `init --force` unchanged. 10 tests.
|
|
105
107
|
- [1.71.0–1.69.0] token-bloat sweep #236 — BASELINE + TDD CHECK fire once per `session_id` (-12K, -0.5-1.5K); sdlc-skill Cross-Model Review trimmed.
|
|
106
|
-
- [1.68.0–1.65.0] roadmap hygiene — five paperwork closes: #97 Anthropic Policy NO-GO + AAR-paper validating parallel; #99 AutoGPT NO-GO; #95 Nous NO-GO; #243 token-history liveness verified; #210 Node-24 false-green; #235 Thoughtworks AI Evals NO-GO. **6/6 external-product audits NO-GO** (continues #76, #77). Research write-ups in `.reviews/research-*.md`.
|
|
107
108
|
- [1.64.0] XDLC ecosystem cross-references — README, wizard doc, and ROADMAP now cross-reference all three sibling packages (`agentic-sdlc-wizard`, `codex-sdlc-wizard`, `claude-gdlc-wizard`). New "Ecosystem (Sibling Projects)" section in README. 3 new doc-consistency tests prevent drift.
|
|
108
109
|
- [1.63.0] cache-cost observability closeout (#204 absorbed by #220) — token-spike test gains explicit cache-miss + negative-control coverage. "Cache-Cost Surprises" docs added (10-20× silent blowups from mid-session CLAUDE.md edits, idle pruning).
|
|
109
110
|
- [1.62.0] roadmap hygiene + #211 backfill — closes paperwork-stale rows. Backfilled 5 corrupted `score-history.jsonl` rows from `max_score:10` → `:11` (UI scenarios). Codex strategic review confirmed scope.
|
|
@@ -169,7 +170,7 @@ Check user's `.claude/settings.json`:
|
|
|
169
170
|
1. **`model: "opus[1m]"` AND `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE: "30"`** — likely the old wizard-installed pair, not an intentional choice. Ask:
|
|
170
171
|
> Your `.claude/settings.json` pins `model: "opus[1m]"` with `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30`. This pair was the wizard default in 1.31.0–1.33.x, but it disables Claude Code's auto-mode (issue #198).
|
|
171
172
|
> - **Remove the pin** (recommended) — keeps auto-mode enabled
|
|
172
|
-
> - **Keep the pin** — guaranteed Opus 4.
|
|
173
|
+
> - **Keep the pin** — guaranteed Opus 4.8 + 1M, OK with no auto-selection
|
|
173
174
|
> Remove, keep, or decide later? `[r/k/l]`
|
|
174
175
|
|
|
175
176
|
2. **Only one of the two fields matches** — treat as intentional customization. Do not prompt.
|