agentic-sdlc-wizard 1.83.0 → 1.84.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.
@@ -249,30 +249,30 @@ 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
- > ⚠️ **SDLC requires `max` effort on all Claude models.** Below max = degraded reasoning, shallow TDD, weak self-review. Persist via env var: `CLAUDE_CODE_EFFORT_LEVEL=max` (CC docs: `effortLevel: "max"` in settings.json is **session-only and silently ignored**the env var is the only way to persist it).
252
+ > ⚠️ **SDLC requires model-appropriate effort, not a blanket setting.** Below the model's own sweet spot = degraded reasoning, shallow TDD, weak self-review. **Above** it (`max` on a model that only supports up to `xhigh`, or `max` on a model where it overthinks) wastes tokens for no quality gain this is not a "more is always better" knob. See `AI_SETUP_LANES.md` for the current per-model recommendation.
253
253
 
254
- | Level | When to Use | How to Set |
255
- |-------|-------------|------------|
256
- | `max` | **Required for all SDLC work.** Claude: max. OpenAI/Codex: xhigh (their highest). | `CLAUDE_CODE_EFFORT_LEVEL=max` in settings env block |
257
- | `high` or below | **Not for SDLC work.** Only for trivial grep/search subagents | `effort: high` in a specific subagent frontmatter only |
254
+ | Model | Recommended Effort | Why |
255
+ |-------|--------------------|-----|
256
+ | Sonnet 5 (recommended default) | `high`, escalate to `xhigh` for hard tasks | `xhigh` as a blanket default doubles cost for marginal gains per CodeRabbit testing; `high` is the tested sweet spot |
257
+ | Opus 4.8 (escalation only) | `xhigh` | `max` triggers excessive reasoning on 4.7/4.8 documented 40-60x cache-token jump vs `high` (see "Opus 4.6 Stability" tier below) |
258
+ | Fable 5 (advisor) | `high` (its own designed default) | Adaptive thinking always on; `xhigh`/`max` mainly move the thinking-token budget with small marginal gain for review work |
259
+ | Opus 4.6 (Stability lane) | `max` | The one model where `max` doesn't overthink — no `xhigh` support at all (only low/medium/high/max) |
260
+ | OpenAI/Codex (cross-model reviewer) | `xhigh` (their highest) | Always — lower reasoning misses subtle bugs the reviewer exists to catch |
258
261
 
259
- **Strict effort behavior (Opus 4.7+, carried forward in 4.8 — and why 4.6 max is the wizard's pick):**
262
+ **Strict effort behavior (Opus 4.7+, carried forward in 4.8):**
260
263
  - **`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)
261
264
  - **Claude Code defaults to `xhigh`** on Opus 4.7+ for all plans
262
265
  - **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
263
266
  - **`budget_tokens` is deprecated** on Opus 4.7+ — use adaptive thinking with effort instead
264
- - **4.6 max is the wizard's flagship pick despite this:** community signal converges on 4.6 being the only Opus version where `max` effort tolerates without overthinking (Andon Labs Vending-Bench, Paweł Huryn's 4.7 guide, BSWEN effort decision guide, r/Claudeopus field reports). On 4.7 and 4.8, `max` triggers excessive reasoning that hits context limits faster and burns more tokens per turn — making the strict-effort behavior backfire. 4.6 max stays in the sweet spot. See [README → "Choosing Your Model"](../README.md#choosing-your-model) for the full evidence
265
267
  - 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
268
 
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.
269
+ **Why `high` was the previous CC-wide default (now largely superseded by the table above):** 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
270
 
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 warns on anything below `max` at session start. Set `CLAUDE_CODE_EFFORT_LEVEL=max` in your settings env block, and treat any "I assumed the default was X" reasoning as a bug.
271
+ **Don't rely on the CC default — set effort yourself, matched to your model.** 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. The default has changed before and will change again. The wizard's `model-effort-check.sh` hook warns when effort falls below the model-appropriate floor at session start. Set effort per-session with `/effort`, not a shell-rc or settings `env` block persisting it that way silently overrides a later `/effort` change after you switch models (a real incident, documented in `SDLC.md`'s Lessons Learned).
270
272
 
271
- The `/sdlc` skill sets `effort: max` in its frontmatter, overriding the medium default on every SDLC invocation. This matches the wizard's v1.80.0 contract: Opus 4.6 max is the recommended flagship, and `max` is where SDLC-compliant work actually happens on 4.6.
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 at the model-appropriate effort ceiling. See [Claude Code model config docs](https://code.claude.com/docs/en/model-config) for details.
272
274
 
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 at `max` effort. See [Claude Code model config docs](https://code.claude.com/docs/en/model-config) for details.
274
-
275
- **When to escalate to `max`:**
275
+ **When to escalate effort:**
276
276
  - You hit LOW confidence on your approach — deeper thinking may find clarity
277
277
  - You've failed the same thing twice — something non-obvious is wrong
278
278
  - Architecture decisions with wide blast radius
@@ -280,28 +280,29 @@ The `/sdlc` skill sets `effort: max` in its frontmatter, overriding the medium d
280
280
  - Cross-model review analysis (reading and evaluating external reviewer findings)
281
281
 
282
282
  **How it works:**
283
- - `/effort max` changes effort for the current session only (resets next session)
284
- - `effort: max` in SKILL.md frontmatter persists every `/sdlc` invocation uses `max`
283
+ - `/effort <level>` changes effort for the current session only (resets next session)
284
+ - An `effort:` field in a skill's frontmatter persists across every invocation of that skill — the `/sdlc` skill deliberately does NOT set one, since the right effort depends on which model is driving, not which skill is running
285
285
  - You can also type `ultrathink` in any prompt for a single high-effort turn
286
286
 
287
- **Cost note:** `max` uses more tokens than lower efforts. Always `max` on all Claude models (#395). Token burn is higher on 4.7/4.8 than 4.6 that's why 4.6 is the wizard's flagship.
287
+ **Cost note:** higher effort uses more tokens. Match effort to your model per the table above a blanket `max` wastes tokens on models where it overthinks, without any quality gain to show for it.
288
288
 
289
- > See also: the **Effort** column in the [Confidence Check table](#confidence-check-required) below for per-confidence-level guidance on when to escalate to `max`.
289
+ > See also: the **Effort** column in the [Confidence Check table](#confidence-check-required) below for per-confidence-level guidance on when to escalate.
290
290
 
291
291
  ### Anti-Laziness Guidance for CLAUDE.md
292
292
 
293
- If you notice Claude Code producing shallow outputs despite `effort: max`, add these instructions to your project's `CLAUDE.md`. These target the **specific mechanisms** behind quality degradation — adaptive thinking and effort levels — rather than vague directives:
293
+ If you notice Claude Code producing shallow outputs at your model's recommended effort (see "Recommended Effort Level" above), add these instructions to your project's `CLAUDE.md`. These target the **specific mechanisms** behind quality degradation — adaptive thinking and effort levels — rather than vague directives:
294
294
 
295
295
  ```markdown
296
296
  ## Quality Anchoring
297
- - This project uses effort: max via SDLC skill frontmatter. Do not reduce reasoning depth.
297
+ - This project sets effort per-session with /effort, matched to the active model
298
+ (see AI_SETUP_LANES.md). Do not reduce reasoning depth below that level.
298
299
  - Adaptive thinking may under-allocate your thinking budget on complex tasks. When working on
299
300
  multi-file changes, architecture decisions, or debugging: reason through the full problem
300
301
  before acting, even if the system prompt suggests taking the "simplest approach first."
301
302
  - If you catch yourself skipping steps, re-read the task requirements and verify completeness.
302
303
  ```
303
304
 
304
- **Why this works:** Claude Code's hidden system prompt includes "Go straight to the point. Try the simplest approach first." This is good for simple queries but causes the model to under-invest in reasoning on complex SDLC tasks. The instructions above don't fight the system prompt — they provide task-specific context that justifies deeper reasoning. Note that CLAUDE.md instructions can be partially overridden by the system prompt, so `effort: max` in skill frontmatter remains the primary defense.
305
+ **Why this works:** Claude Code's hidden system prompt includes "Go straight to the point. Try the simplest approach first." This is good for simple queries but causes the model to under-invest in reasoning on complex SDLC tasks. The instructions above don't fight the system prompt — they provide task-specific context that justifies deeper reasoning. Note that CLAUDE.md instructions can be partially overridden by the system prompt, so the per-session `/effort` level (not a skill-frontmatter field — the `/sdlc` skill deliberately omits one, since effort is model-aware) remains the primary defense; `hooks/model-effort-check.sh` nudges at session start if it drops below your model's floor.
305
306
 
306
307
  ---
307
308
 
@@ -408,9 +409,10 @@ New built-in commands available to use alongside the wizard:
408
409
 
409
410
  | Driver | Advisor | Lane |
410
411
  |--------|---------|------|
411
- | Opus 4.6 (`claude-opus-4-6`) | Fable (`"fable"`) | Setup A — Premium |
412
- | Sonnet via opusplan | Opus (`"claude-opus-4-6"`) | Setup B — Saver |
413
- | Opus 4.8 (`claude-opus-4-8`) | Fable (`"fable"`) | Latest tier |
412
+ | Sonnet 5 (`sonnet`) | Fable (`"fable"`) | Setup A — default |
413
+ | Opus 4.6 (`claude-opus-4-6`) | Fable (`"fable"`) | Setup B — Stability |
414
+ | Sonnet via opusplan | Opus 4.8 (`"claude-opus-4-8"`) | Setup C OpusPlan Hybrid |
415
+ | Opus 4.8 (`claude-opus-4-8`) | Fable (`"fable"`) | Escalation tier |
414
416
 
415
417
  **Settings precedence:** Managed > CLI flags > Local (`.claude/settings.local.json`) > Project (`.claude/settings.json`) > User (`~/.claude/settings.json`). The wizard writes project-level by default — never nukes global settings. Setup skill Step 9.5 asks if you also want global.
416
418
 
@@ -428,14 +430,14 @@ Skills support these frontmatter fields:
428
430
  |-------|---------|---------|
429
431
  | `name` | Skill name (matches `/command`) | `name: sdlc` |
430
432
  | `description` | Trigger description for auto-invocation | `description: Full SDLC workflow...` |
431
- | `effort` | Set reasoning effort level | `effort: max` |
433
+ | `effort` | Set reasoning effort level | `effort: high` |
432
434
  | `paths` | Restrict skill to specific file patterns | `paths: ["src/**/*.ts", "tests/**"]` |
433
435
  | `context` | Context mode (`fork` = isolated subagent) | `context: fork` |
434
436
  | `argument-hint` | Hint for `$ARGUMENTS` placeholder | `argument-hint: [task description]` |
435
437
  | `disable-model-invocation` | Prevent skill from being auto-invoked by model | `disable-model-invocation: true` |
436
438
 
437
439
  **Key fields explained:**
438
- - **`effort: max`** — The wizard's `/sdlc` skill uses this to ensure Claude gives full attention at the recommended effort level for Opus 4.6 max (v1.80.0+).
440
+ - **`effort:`**Use sparingly on skills that run under many different driver models. The wizard's own `/sdlc` skill deliberately omits this field the right effort level depends on which model is driving (see "Recommended Effort Level" above), not on which skill is running, so a fixed frontmatter value would fight `/effort`'s per-session, per-model guidance.
439
441
  - **`paths:`** — Limits when a skill activates based on files being worked on. Useful for language-specific or directory-specific skills.
440
442
  - **`context: fork`** — Runs the skill in an isolated subagent context. The subagent gets its own context window, so it won't pollute the main conversation. Useful for review skills or analysis that should run independently.
441
443
 
@@ -508,7 +510,7 @@ When a cached prompt prefix is re-served after idle pruning, downstream thinking
508
510
 
509
511
  **Workaround**: if you hit suspicious shallow reasoning mid-session — especially after a long idle gap — start a fresh session with `claude --continue` to reset cache state. The wizard's PreCompact hook gates manual `/compact` precisely because compacting at bad seams can also pull thinking blocks out of context.
510
512
 
511
- **Detection signal**: the wizard's `model-effort-check.sh` loud-warns below `max`. Combine with token-spike anomaly detection (ROADMAP #220) once shipped.
513
+ **Detection signal**: the wizard's `model-effort-check.sh` loud-warns below `high` (the model-aware floor — see "Recommended Effort Level" above). Combine with token-spike anomaly detection (ROADMAP #220) once shipped.
512
514
 
513
515
  ### Prompt brevity caps can compound across turns (post-mortem 2026-04-23)
514
516
 
@@ -524,7 +526,7 @@ See the dedicated subsection under [Tasks System](#tasks-system-v2116) (above, i
524
526
 
525
527
  ### MCP-tool hooks audit (ROADMAP #218, CC 2.1.118)
526
528
 
527
- CC 2.1.118 introduced `type: "mcp_tool"` for hooks — a hook can now directly invoke an MCP tool instead of running a bash script. **Audit (2026-04-26) of all 5 wizard hooks concluded: none migrate, all stay bash.** This subsection documents the per-hook reasoning so future audits don't redo the work; if a future PR migrates a hook to MCP, update this entry with the new rationale rather than deleting it.
529
+ CC 2.1.118 introduced `type: "mcp_tool"` for hooks — a hook can now directly invoke an MCP tool instead of running a bash script. **Audit (2026-04-26) of the 5 wizard hooks that existed at the time concluded: none migrate, all stay bash.** This subsection documents the per-hook reasoning so future audits don't redo the work; if a future PR migrates a hook to MCP, update this entry with the new rationale rather than deleting it. **Not yet re-audited**: 4 hooks shipped since 2026-04-26 (`goal-confidence-check.sh`, `codex-gate-check.sh`, `token-spike-check.sh`, `codex-review-stop-check.sh`) — the project now registers 9 hooks total (see `.claude/settings.json`), but this table only covers the original 5.
528
530
 
529
531
  **Decision criteria applied** (any one rules out MCP):
530
532
 
@@ -536,8 +538,8 @@ CC 2.1.118 introduced `type: "mcp_tool"` for hooks — a hook can now directly i
536
538
 
537
539
  - **`sdlc-prompt-check.sh`** (UserPromptSubmit, ~132 lines) — emits the SDLC BASELINE text on every prompt; writes effort-bump signals to `~/.cache/sdlc-wizard/effort-signals.log` for self-consumption on next invocation. Decision: **Stay bash.** Portability criterion: same script ships to Codex sibling unchanged. Local-state criterion: signal log is local-only.
538
540
  - **`instructions-loaded-check.sh`** (~202 lines) — InstructionsLoaded event; validates SDLC files exist, fetches npm `latest` with daily file cache (`~/.cache/sdlc-wizard/npm-latest.json`), emits staleness warnings. Decision: **Stay bash.** Portability criterion: Codex sibling has its own equivalent of session-start validation; bash port is direct. Local-state criterion: cache file is local.
539
- - **`tdd-pretool-check.sh`** (~29 lines) — PreToolUse on Write/Edit/MultiEdit; emits the TDD reminder text. Decision: **Stay bash.** Portability criterion: trivially portable (one-screen text emit). Gating criterion: not applicable (this hook does not block, it advises). MCP would add a runtime dependency for zero functional gain.
540
- - **`model-effort-check.sh`** (~69 lines) — SessionStart event; reads `CLAUDE_CODE_EFFORT` env var, emits silent/soft/loud nudge per-tier. Decision: **Stay bash.** Portability criterion: env-var read maps 1:1 to any agent runtime. Local-state criterion: not applicable, hook is stateless.
541
+ - **`tdd-pretool-check.sh`** (~115 lines) — PreToolUse on Write/Edit/MultiEdit; emits a TDD reminder, and (since #436) **blocks** with `exit 2` when a `src/**` write happens before any test file was touched this session (an edit-ordering proxy for TDD RED, session-scoped via a cache-dir sentinel). Decision: **Stay bash.** Fail-closed gating criterion applies now that this hook blocks: bash `exit 2` fails closed by definition, whereas an `mcp_tool` hook's block decision is lost if the MCP server errors wrong default for a gate. Portability criterion: still trivially portable.
542
+ - **`model-effort-check.sh`** (~80 lines) — SessionStart event; reads `CLAUDE_CODE_EFFORT_LEVEL` env var (falling back to `effortLevel` in the settings cascade), emits nothing when effort is `high`/`xhigh`/`max`, otherwise a loud warning. Decision: **Stay bash.** Portability criterion: env-var read maps 1:1 to any agent runtime. Local-state criterion: not applicable, hook is stateless.
541
543
  - **`precompact-seam-check.sh`** (~125 lines) — PreCompact event (matcher: `manual`); reads `.reviews/handoff.json` via jq, blocks manual `/compact` with exit 2 + stderr message when status is `PENDING_*` and the linked PR (if any) isn't merged. Decision: **Stay bash.** Fail-closed gating criterion: bash exit 2 fails closed by definition; an MCP `mcp_tool` hook returning `decision: "block"` works on the happy path, but if the MCP server crashes/times out the action proceeds — that flips the safety property from fail-closed to fail-open. For a hook whose entire job is to prevent context loss at bad seams, fail-open is the wrong default.
542
544
 
543
545
  **When to revisit this audit:**
@@ -987,16 +989,31 @@ Override: resolve the blocker (certify the review, finish the rebase), or tempor
987
989
 
988
990
  ### Autocompact Tuning
989
991
 
990
- Override the default auto-compact threshold with environment variables. These are community-discovered settings referenced in upstream issues ([#34332](https://github.com/anthropics/claude-code/issues/34332), [#42375](https://github.com/anthropics/claude-code/issues/42375)) — not yet officially documented by Anthropic. For a rigorous benchmarking methodology to validate these thresholds, see [AUTOCOMPACT_BENCHMARK.md](AUTOCOMPACT_BENCHMARK.md).
992
+ Override the default auto-compact threshold with environment variables. Per official docs ([model-config](https://code.claude.com/docs/en/model-config#sonnet-5-context-window), [env-vars](https://code.claude.com/docs/en/env-vars)): `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` is applied as a percentage of `CLAUDE_CODE_AUTO_COMPACT_WINDOW` which itself defaults to the model's own tuned threshold, not necessarily the raw context capacity. **The override can only lower the threshold; values above the model's default have no effect.** For a rigorous benchmarking methodology to validate these thresholds, see [AUTOCOMPACT_BENCHMARK.md](AUTOCOMPACT_BENCHMARK.md).
991
993
 
992
994
  | Variable | What It Does | Default |
993
995
  |----------|-------------|---------|
994
- | `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Trigger compaction at this % of context capacity (1-100) | ~95% |
995
- | `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Override context capacity in tokens (useful for 1M models) | Model default |
996
+ | `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Trigger compaction at this % of `CLAUDE_CODE_AUTO_COMPACT_WINDOW` (1-100). Lower-only. | Model-dependent (see below) |
997
+ | `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Override context capacity in tokens used for compaction math | Model's context window — **except Sonnet 5**, which has its own default |
998
+
999
+ **Sonnet 5 specifics:** Sonnet 5 always runs at 1M context (no 200K variant, no `[1m]` suffix needed) and proactively compacts at its own tuned default of **~967K tokens (96.7%)** — not the generic 1M ceiling. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=75` on Sonnet 5 fires at ~75% *of that 967K*, i.e. ~725K tokens — earlier and safer than the native default, not later. **Do not carry over an `opus[1m]`-era `30%` setting to Sonnet 5** — that figure was derived for `opus[1m]`'s older extended-context opt-in, never re-derived for Sonnet 5's smarter native default, and is needlessly conservative here (verified 2026-07-05).
1000
+
1001
+ **Opt-in (issue #198):** The SDLC Wizard CLI ships `.claude/settings.json` with **no** `model`, `advisorModel`, or `env` pin so Claude Code's auto-mode stays enabled. The setup skill's Step 9.5 offers four choices: no pin (default, auto-mode), Sonnet 5 + Fable advisor (recommended if pinning at all, Setup A), OpusPlan Hybrid with an Opus 4.8 advisor (Setup C), and Opus 4.6 Stability + Fable advisor (legacy flagship, Setup B). Opus 4.8 itself is an escalation model, not a persistent Step 9.5 pin — reach for it per-session via `/model claude-opus-4-8` when Sonnet 5 gets stuck (see "Latest tier" below). Default is **No pin**. Pinning the model turns off per-turn auto-selection — a real tradeoff, so we ask.
1002
+
1003
+ To opt in by hand, edit `.claude/settings.json` (Sonnet 5 example — the recommended default):
996
1004
 
997
- **Opt-in (issue #198):** The SDLC Wizard CLI ships `.claude/settings.json` with **no** `model`, `advisorModel`, or `env` pin so Claude Code's auto-mode stays enabled. The setup skill's Step 9.5 offers four choices: `[N]` no pin, `[o]` opusplan + Opus advisor, `[f]` flagship Opus 4.6 + Fable advisor, `[l]` latest Opus 4.8 + Fable advisor. Default is **No**. Pinning the model turns off per-turn auto-selection — a real tradeoff, so we ask.
1005
+ ```json
1006
+ {
1007
+ "model": "sonnet",
1008
+ "advisorModel": "fable",
1009
+ "effortLevel": "xhigh",
1010
+ "env": {
1011
+ "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "75"
1012
+ }
1013
+ }
1014
+ ```
998
1015
 
999
- To opt in by hand, edit `.claude/settings.json` (flagship example):
1016
+ For `opus[1m]` instead (older pin, still valid for proven stability), pair with a lower override since it lacks Sonnet 5's smarter native default:
1000
1017
 
1001
1018
  ```json
1002
1019
  {
@@ -1009,17 +1026,14 @@ To opt in by hand, edit `.claude/settings.json` (flagship example):
1009
1026
  }
1010
1027
  ```
1011
1028
 
1012
- If you switch back to the 200K model (`opus`), raise the override to `75` — otherwise 30% of 200K = 60K compacts too early. Alternatively, set via shell profile (`~/.bashrc`, `~/.zshrc`) or per-project `.envrc`:
1013
-
1014
- ```bash
1015
- export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30
1016
- ```
1029
+ If you switch back to the 200K model (`opus`, no `[1m]`), raise the override to `75` — otherwise 30% of 200K = 60K compacts too early.
1017
1030
 
1018
- **Community-recommended thresholds by use case:**
1031
+ **Recommended thresholds by use case:**
1019
1032
 
1020
1033
  | Use Case | AUTOCOMPACT % | Why |
1021
1034
  |----------|--------------|-----|
1022
- | **Opt-in SDLC setup (`opus[1m]`)** | **30%** | **Fires at ~300K on 1M right balance for plan + TDD + review sessions. Paired with the opt-in `opus[1m]` pin (see issue #198)** |
1035
+ | **Sonnet 5 (default driver)** | **75%** | Fires at ~75% of its native ~967K threshold (~725K tokens) safe margin without being overly conservative. Verified against official docs 2026-07-05. |
1036
+ | `opus[1m]` (opt-in extended context) | 30% | Fires at ~300K on 1M — right balance for plan + TDD + review sessions. Paired with the opt-in `opus[1m]` pin (see issue #198) |
1023
1037
  | General development (200K `opus`) | 75% | Leaves room for implementation after planning |
1024
1038
  | Complex refactors (200K `opus`) | 80% | Slightly more context before compaction |
1025
1039
  | CI pipelines | 60% | Short tasks, compact early to stay fast |
@@ -1035,7 +1049,7 @@ The thresholds above are community consensus — not empirically validated. For
1035
1049
 
1036
1050
  ### 1M vs 200K Context Window
1037
1051
 
1038
- Claude Code supports both 200K and 1M context windows. **`opus[1m]` is an opt-in power-user pin** ask yourself whether you actually need the headroom before setting it, because pinning the model at the top level disables Claude Code's auto-mode (see issue #198).
1052
+ Claude Code supports both 200K and 1M context windows. **This section is about Opus** — `opus[1m]` is an opt-in power-user pin, and ask yourself whether you actually need the headroom before setting it, because pinning the model at the top level disables Claude Code's auto-mode (see issue #198). **Sonnet 5 is a different case: it always runs at 1M natively** (no `[1m]` suffix, no opt-in decision, no auto-mode tradeoff) — see [`code.claude.com/docs/en/model-config#sonnet-5-context-window`](https://code.claude.com/docs/en/model-config#sonnet-5-context-window). The table below applies to choosing whether to pin Opus at 1M, not to Sonnet 5.
1039
1053
 
1040
1054
  | | 200K Context (default / auto-mode) | 1M Context (`opus[1m]`, opt-in) |
1041
1055
  |---|---|---|
@@ -1051,13 +1065,13 @@ Claude Code supports both 200K and 1M context windows. **`opus[1m]` is an opt-in
1051
1065
  **Why `opus[1m]` is opt-in (issue #198):**
1052
1066
  - **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.
1053
1067
  - **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.
1054
- - **Power users who want guaranteed Opus 4.6 max + 1M**go ahead, it's a real win for long shepherding sessions. Just make it a conscious choice, not a silent default.
1068
+ - **⚠️ `opus[1m]` is NOT guaranteed to mean Opus 4.6.** The alias auto-resolves to whichever Opus model Claude Code currently considers "latest" that was Opus 4.6 when this alias was introduced, but it now means **Opus 4.8**. If you specifically want Opus 4.6 (Setup B Stability, proven consistency), pin the explicit model string `claude-opus-4-6`, not the `opus[1m]` alias.
1055
1069
 
1056
- **Opt in when:** you routinely cross 100K tokens in a single session (plan → TDD → review → CI shepherd on one feature), you want Opus 4.6 max specifically (not Sonnet), and you're OK losing auto-mode.
1070
+ **Opt in when:** you routinely cross 100K tokens in a single session (plan → TDD → review → CI shepherd on one feature), you want guaranteed 1M context on whichever Opus is current (or `claude-opus-4-6` explicitly if you want Opus 4.6 specifically), and you're OK losing auto-mode.
1057
1071
 
1058
1072
  **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.
1059
1073
 
1060
- **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.6 max (the `opus[1m]` alias auto-resolves to the latest Opus). The setup wizard's Step 9.5 also asks once, with default No.
1074
+ **How to opt in:** run `/model opus[1m]` in your session (transient) for whichever Opus is current, or `/model claude-opus-4-6` if you specifically want Opus 4.6; set `"model"` to either value in `.claude/settings.json` for a persistent pin. Requires Claude Code v2.1.154+ for the `opus[1m]` alias. The setup wizard's Step 9.5 also asks once, with default No.
1061
1075
 
1062
1076
  **How to opt out:** remove the `model` line from `.claude/settings.json`, or run `/model` and pick "Default (recommended)".
1063
1077
 
@@ -1065,74 +1079,70 @@ Claude Code supports both 200K and 1M context windows. **`opus[1m]` is an opt-in
1065
1079
 
1066
1080
  **Autocompact pairing (important):** If you opt into `opus[1m]`, also set `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30` — otherwise CC's default autocompact fires at ~76K and destroys the headroom you're paying for. Step 9.5 writes both together when you opt in.
1067
1081
 
1068
- ### OpusPlan Tier (Opus planner + Sonnet driver, #395)
1082
+ ### OpusPlan Tier (Opus planner + Sonnet driver, #395) — Setup C
1069
1083
 
1070
- For cost-conscious SDLC work, CC's native `opusplan` alias gives you Opus reasoning during Plan Mode (Shift+Tab) and Sonnet execution — both at 200K, Max-bundled, no API credit drain.
1084
+ This is **Setup C (OpusPlan Hybrid/Saver)** in `AI_SETUP_LANES.md`. CC's native `opusplan` alias gives you Opus reasoning during Plan Mode (Shift+Tab) and Sonnet execution — both Max-bundled, no API credit drain.
1071
1085
 
1072
- | Layer | OpusPlan tier | Flagship tier |
1073
- |-------|--------------|---------------|
1074
- | Planner | Opus 4.6 max (Plan Mode) | Opus 4.6 max |
1075
- | Driver | Sonnet 4.6 (execute mode) | Opus 4.6 max |
1076
- | Reviewer | GPT-5.5 xhigh | GPT-5.5 xhigh |
1077
- | Effort | max (via `CLAUDE_CODE_EFFORT_LEVEL` env var) | max |
1086
+ | Layer | Setup C (OpusPlan) | Setup A (default) | Setup B (Stability) |
1087
+ |-------|--------------------|--------------------|----------------------|
1088
+ | Planner | Opus 4.8 `xhigh` (Plan Mode) | Sonnet 5 `high`→`xhigh` | Opus 4.6 `max` |
1089
+ | Driver | Sonnet 5 `high` (execute mode) | Sonnet 5 `high`→`xhigh` | Opus 4.6 `max` |
1090
+ | Reviewer | GPT-5.5 xhigh | GPT-5.5 xhigh | GPT-5.5 xhigh |
1078
1091
 
1079
1092
  **How to opt in:**
1080
1093
  ```json
1081
1094
  {
1082
1095
  "model": "opusplan",
1083
1096
  "env": {
1084
- "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-6",
1085
- "CLAUDE_CODE_EFFORT_LEVEL": "max"
1097
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8"
1086
1098
  }
1087
1099
  }
1088
1100
  ```
1089
1101
 
1102
+ Set effort per-session with `/effort` (planner `xhigh`, driver `high`) rather than a shell-rc env var — see "Recommended Effort Level" above for why.
1103
+
1090
1104
  **⚠️ Avoid `sonnet[1m]`** — Sonnet with 1M context draws from usage credits ($3/$15 per Mtok), not your Max subscription (#390). Plain `sonnet` (200K) or `opusplan` stays on Max.
1091
1105
 
1092
- **When to use OpusPlan:** routine SDLC work, simple repos, cost-conscious sessions. Press Shift+Tab before architecture/blast-radius decisions to get Opus reasoning.
1106
+ **When to use OpusPlan (Setup C):** routine SDLC work, simple repos, cost-conscious sessions where you still want an Opus plan-mode pass. Press Shift+Tab before architecture/blast-radius decisions to get Opus reasoning. For most day-to-day work, Setup A (Sonnet 5 + Fable) is the simpler default — see "Choosing Your Model" in [README.md](../README.md).
1093
1107
 
1094
- **When to stay Flagship:** stakes-flagged repos, architecture work, security review, long shepherd sessions.
1108
+ **When to stay on Setup B (Stability):** stakes-flagged repos, architecture work, security review, long shepherd sessions where you want proven Opus 4.6 consistency end-to-end rather than a split planner/driver.
1095
1109
 
1096
1110
  **Prove-It Gate (#233 acceptance criterion):** mixed-mode ships only if pair-tested on 3+ simple repos shows Sonnet-coder + Opus-reviewer produces ≥ same SDLC scores as full-Opus baseline. The first version of the heuristic ships v1.38.0; pair-test results land in CHANGELOG before recommending mixed-mode as the default for any tier.
1097
1111
 
1098
1112
  **Tradeoffs (be honest):**
1099
- - Sonnet 4.6 will drop some fine-grained self-review moves (it's fast, less deliberate). The Opus reviewer catches them but you'll see more "fix in round 2" cycles compared to Opus-coder runs.
1100
- - Mixed-mode disables auto-mode (same as flagship pin). The Sonnet pin is per-session — to switch back, remove the `model` line.
1113
+ - The Sonnet driver will drop some fine-grained self-review moves compared to an Opus-coder run — it's fast, less deliberate. The Opus planner and GPT-5.5 reviewer catch them, but expect more "fix in round 2" cycles.
1114
+ - Mixed-mode disables auto-mode (same as any pinned model). The pin is per-session — to switch back, remove the `model` line.
1101
1115
 
1102
- ### Latest tier — Opus 4.8 (opt-in for bleeding-edge)
1116
+ ### Latest tier — Opus 4.8 (escalation model, #395)
1103
1117
 
1104
- The wizard's flagship recommendation is Opus 4.6 max (see "Choosing Your Model" in [README.md](../README.md) for the full evidence). Some maintainers will want Anthropic's newest Opus instead**Opus 4.8** ships SWE-Bench Pro / Terminal-Bench 2.1 gains, dynamic-workflows, and parallel-subagent-swarm features 4.6 doesn't have.
1118
+ The wizard's default is **Sonnet 5** (Setup A — see "Choosing Your Model" in [README.md](../README.md) for the full evidence). **Opus 4.8** is the escalation model: reach for it when Sonnet 5 stalls on architecture, a stuck bug, or anything needing deeper reasoning not as a daily driver. It ships SWE-Bench Pro / Terminal-Bench 2.1 gains, dynamic-workflows, and parallel-subagent-swarm features 4.6 doesn't have.
1105
1119
 
1106
- **When the Latest tier is the right call:**
1107
- - You want Anthropic's newest benchmark wins (SWE-Bench Pro 69.2% vs 4.7's 64.3%, Terminal-Bench 2.1 74.6% vs 4.7's 66.1%)
1120
+ **When Opus 4.8 is the right call:**
1121
+ - Sonnet 5 is stuck (2+ failed attempts) and you want a fresh, deeper-reasoning pass
1108
1122
  - You use dynamic workflows / parallel subagent swarms — introduced in 4.8, not available in 4.6
1109
- - You're on the launch-week mailing list and want to validate the newest model against your workflow
1123
+ - You want Anthropic's newest benchmark wins (SWE-Bench Pro 69.2% vs 4.7's 64.3%, Terminal-Bench 2.1 74.6% vs 4.7's 66.1%) for a specific hard task
1110
1124
  - You haven't hit 4.7/4.8 token burn / false-green / dropped-constraint regressions in your own work
1111
1125
 
1112
1126
  **Tradeoffs (be honest):**
1113
- - **Documented 40-60× cache token jump** vs 4.7 at HIGH effort ([AI Weekly](https://aiweekly.co/alerts/claude-opus-48-thinking-burns-900k-tokens-per-turn) — up to 900K cache tokens per turn). Burns Max 5-hour limits 2-3× faster than 4.6
1114
- - **Earlier field signal suggested xhigh over max on 4.8** per [Andon Labs Vending-Bench](https://andonlabs.com/blog/opus-4-8-vending-bench), but wizard standard is now `max` on all Claude models (#395)
1127
+ - **Documented 40-60× cache token jump** vs 4.7 at HIGH effort ([AI Weekly](https://aiweekly.co/alerts/claude-opus-48-thinking-burns-900k-tokens-per-turn) — up to 900K cache tokens per turn). Burns Max 5-hour limits 2-3× faster than 4.6 — this is exactly why it's an escalation model, not a daily driver
1115
1128
  - Active GitHub regressions still open: false-greens ([#63861](https://github.com/anthropics/claude-code/issues/63861)), 2-3× token burn ([#64961](https://github.com/anthropics/claude-code/issues/64961)), 46K tokens for simple coding turn ([#64153](https://github.com/anthropics/claude-code/issues/64153)), dropped constraints ([#65932](https://github.com/anthropics/claude-code/issues/65932))
1116
1129
  - [Tech.yahoo review](https://tech.yahoo.com/ai/claude/articles/claude-opus-4-8-review-130106963.html): "Anthropic deliberately made Opus's new tokenizer less efficient" — not a transient bug, structural pricing change
1117
1130
  - Anthropic-supported until ≥ May 28, 2027 (longer runway than 4.6)
1118
1131
 
1119
- **How to opt in (global, sweeps every project):**
1132
+ **How to opt in for a session (escalate, don't pin globally):**
1120
1133
 
1121
- Edit `~/.claude/settings.json`:
1134
+ `/model claude-opus-4-8` at the start of the session, then `/effort xhigh`. Reserve a global pin in `~/.claude/settings.json` for maintainers who've decided Opus 4.8 is their permanent driver, understanding the cost tradeoff above:
1122
1135
  ```json
1123
1136
  {
1124
- "model": "claude-opus-4-8",
1125
- "env": {
1126
- "CLAUDE_CODE_EFFORT_LEVEL": "max"
1127
- }
1137
+ "model": "claude-opus-4-8"
1128
1138
  }
1129
1139
  ```
1130
1140
 
1131
1141
  On Max plans, Opus auto-upgrades to 1M context. No `[1m]` suffix needed.
1132
1142
 
1133
- **Effort tuning for 4.8:** always `max`. Earlier field signal suggested xhigh on 4.8 but the wizard standard is max on all Claude models (#395).
1143
+ **Effort tuning for 4.8:** `xhigh` (see the per-model effort table in "Recommended Effort Level" above — Opus 4.8 is escalation-only, so it doesn't get its own `max` tier the way Opus 4.6 does).
1134
1144
 
1135
- **Escape hatch:** flip the env vars back to `claude-opus-4-6` to return to the wizard's recommended default. Or remove them entirely to fall back to Claude Code auto-mode.
1145
+ **Escape hatch:** remove the `model` line (or run `/model sonnet`) to return to Sonnet 5, the wizard's recommended default.
1136
1146
 
1137
1147
  ### Community Feature-Discovery Scanner (roadmap #207)
1138
1148
 
@@ -2147,7 +2157,7 @@ The light hook outputs text that **instructs Claude** to invoke skills:
2147
2157
 
2148
2158
  ```
2149
2159
  AUTO-INVOKE SKILL (Claude MUST do this FIRST):
2150
- - implement/fix/refactor/feature/bug/build/test/TDD → Invoke: Skill tool, skill="sdlc"
2160
+ - implement/fix/refactor/feature/bug/build/test/TDD/release/publish/deploy → Invoke: Skill tool, skill="sdlc"
2151
2161
  ```
2152
2162
 
2153
2163
  **This is text-based, not programmatic.** Claude reads this instruction and follows it. When Claude sees your message is an implementation task, it invokes the sdlc skill using the Skill tool. This loads the full SDLC guidance into context.
@@ -2180,7 +2190,7 @@ SDLC BASELINE:
2180
2190
  5. 🛑 ALL TESTS MUST PASS BEFORE COMMIT - NO EXCEPTIONS
2181
2191
 
2182
2192
  AUTO-INVOKE SKILL (Claude MUST do this FIRST):
2183
- - implement/fix/refactor/feature/bug/build/test/TDD → Invoke: Skill tool, skill="sdlc"
2193
+ - implement/fix/refactor/feature/bug/build/test/TDD/release/publish/deploy → Invoke: Skill tool, skill="sdlc"
2184
2194
  - DON'T invoke for: questions, explanations, reading/exploring code, simple queries
2185
2195
  - DON'T wait for user to type /sdlc - AUTO-INVOKE based on task type
2186
2196
 
@@ -2203,6 +2213,8 @@ chmod +x .claude/hooks/sdlc-prompt-check.sh
2203
2213
 
2204
2214
  ## Step 5: Create the TDD Hook
2205
2215
 
2216
+ **Illustrative, not exhaustive:** this teaches the PreToolUse/exit-2 blocking mechanic with one hook. The wizard ships **9 production hooks total** — only this one and Step 4's light hook have hand-typed templates in this doc; the other 7 (`codex-gate-check.sh`, `goal-confidence-check.sh`, `instructions-loaded-check.sh`, `model-effort-check.sh`, `precompact-seam-check.sh`, `codex-review-stop-check.sh`, `token-spike-check.sh`) don't, because there's no substitute for the real files. **For the complete, always-in-sync set, run `npx agentic-sdlc-wizard@latest init`** instead of hand-building hooks 3-9 from prose descriptions elsewhere in this doc.
2217
+
2206
2218
  Create `.claude/hooks/tdd-pretool-check.sh`:
2207
2219
 
2208
2220
  ```bash
@@ -2215,22 +2227,35 @@ TOOL_INPUT=$(cat)
2215
2227
 
2216
2228
  # Extract the file path being edited (requires jq)
2217
2229
  FILE_PATH=$(echo "$TOOL_INPUT" | jq -r '.tool_input.file_path // empty')
2230
+ MARKER="$CLAUDE_PROJECT_DIR/.claude/.tdd-test-touched"
2231
+
2232
+ # A test file was touched — mark it and allow.
2233
+ if [[ "$FILE_PATH" =~ (\.test\.|\.spec\.|/__tests__/|/tests?/) ]]; then
2234
+ touch "$MARKER" 2>/dev/null
2235
+ exit 0
2236
+ fi
2218
2237
 
2219
2238
  # CUSTOMIZE: Change this pattern to match YOUR source directory
2220
2239
  # Examples: "/src/", "/app/", "/lib/", "/packages/", "/server/"
2221
- if [[ "$FILE_PATH" == *"/src/"* ]]; then
2222
- # Output additionalContext that Claude will read
2223
- cat << 'EOF'
2224
- {"hookSpecificOutput": {"hookEventName": "PreToolUse", "additionalContext": "TDD CHECK: Are you writing IMPLEMENTATION before a FAILING TEST? If yes, STOP. Write the test first (TDD RED), then implement (TDD GREEN)."}}
2225
- EOF
2240
+ # Match BOTH absolute (*/src/*) and cwd-relative (src/*) forms — a
2241
+ # leading-slash-only pattern silently no-ops on relative file_paths
2242
+ # like "src/app.js" (Codex finding, #436 round 1).
2243
+ if [[ "$FILE_PATH" == *"/src/"* || "$FILE_PATH" == "src/"* ]]; then
2244
+ if [ ! -f "$MARKER" ]; then
2245
+ # exit 2 + stderr = BLOCK. Claude Code only denies a tool call on exit 2
2246
+ # with stderr output — exit 0 always allows regardless of stdout content.
2247
+ echo "TDD RED REQUIRED: no test file touched yet. Write a failing test before implementing in src/." >&2
2248
+ exit 2
2249
+ fi
2226
2250
  fi
2227
2251
 
2228
2252
  # No output = allow the tool to proceed
2229
2253
  ```
2230
2254
 
2231
2255
  **CUSTOMIZE:**
2232
- 1. Replace `"/src/"` with your source directory pattern
2256
+ 1. Replace `"/src/"` / `"src/"` with your source directory pattern (both forms — see comment above)
2233
2257
  2. Ensure `jq` is installed (or adapt to your preferred JSON parser)
2258
+ 3. This minimal version tracks "a test was touched" with one marker file for the whole project, so once unlocked it stays unlocked. The wizard's actual shipped `hooks/tdd-pretool-check.sh` (in this repo) is session-scoped instead (resets each Claude Code session) and avoids `jq` for session-ID parsing — a plain `jq`-based extraction silently disabled this exact gate once when `jq` was missing (#436 round 1). Copy that file directly for the production-hardened version instead of hand-typing this one.
2234
2259
 
2235
2260
  **Make it executable:**
2236
2261
  ```bash
@@ -2248,7 +2273,7 @@ Create `.claude/skills/sdlc/SKILL.md`:
2248
2273
  ````markdown
2249
2274
  ---
2250
2275
  name: sdlc
2251
- description: Full SDLC workflow for implementing features, fixing bugs, refactoring code, and creating new functionality. Use this skill when implementing, fixing, refactoring, adding features, or building new code.
2276
+ description: Full SDLC workflow for implementing features, fixing bugs, refactoring code, testing, releasing, publishing, and deploying. Use this skill when implementing, fixing, refactoring, testing, adding features, building new code, or releasing/publishing/deploying.
2252
2277
  argument-hint: [task description]
2253
2278
  ---
2254
2279
  # SDLC Skill - Full Development Workflow
@@ -2354,13 +2379,15 @@ Before presenting approach, STATE your confidence:
2354
2379
 
2355
2380
  | Level | Meaning | Action | Effort |
2356
2381
  |-------|---------|--------|--------|
2357
- | HIGH (90%+) | Know exactly what to do | Present approach, proceed after approval | `max` (default) |
2358
- | MEDIUM (60-89%) | Solid approach, some uncertainty | Present approach, highlight uncertainties | `max` (default) |
2359
- | LOW (<60%) | Not sure | ASK USER before proceeding | **Run `/effort max` now** — don't wait |
2360
- | FAILED 2x | Something's wrong | STOP. ASK USER immediately | **Run `/effort max` now** — you're burning cycles at lower effort |
2361
- | CONFUSED | Can't diagnose why something is failing | STOP. Describe what you tried, ask for help | **Run `/effort max` now** — stop spinning |
2382
+ | HIGH (90%+) | Know exactly what to do | Present approach, proceed after approval | Model default |
2383
+ | MEDIUM (60-89%) | Solid approach, some uncertainty | Present approach, highlight uncertainties | Model default |
2384
+ | LOW (<60%) | Not sure | ASK USER before proceeding | **Escalate effort now** — don't wait |
2385
+ | FAILED 2x | Something's wrong | STOP. ASK USER immediately | **Escalate effort now** — you're burning cycles at lower effort |
2386
+ | CONFUSED | Can't diagnose why something is failing | STOP. Describe what you tried, ask for help | **Escalate effort now** — stop spinning |
2387
+
2388
+ "Model default" and "escalate" are model-aware, not a blanket `max` — see "Recommended Effort Level" above for the per-model table (Sonnet 5: `high`→`xhigh`; Opus 4.8: `xhigh`; Opus 4.6: `max`; Fable: `high`).
2362
2389
 
2363
- **Dynamic bumping is NOT optional.** "Consider max effort" is the same as "ignore this" in practice. If your confidence drops or tests fail twice, bump effort BEFORE the next attempt — spinning at low effort is an SDLC failure mode.
2390
+ **Dynamic bumping is NOT optional.** "Consider higher effort" is the same as "ignore this" in practice. If your confidence drops or tests fail twice, bump effort BEFORE the next attempt — spinning at low effort is an SDLC failure mode.
2364
2391
 
2365
2392
  ## Self-Review Loop (CRITICAL)
2366
2393
 
@@ -2474,7 +2501,9 @@ When the reviewer finds issues, respond per-finding instead of silently fixing e
2474
2501
 
2475
2502
  ### Convergence
2476
2503
 
2477
- Max 3 recheck rounds (4 total including initial review). If still NOT CERTIFIED after round 4, escalate to the user with a summary of open findings. Don't spin indefinitely.
2504
+ 3 recheck rounds (4 total including initial review) is the default budget for a typical change. If still NOT CERTIFIED after round 4, escalate to the user with a summary of open findings rather than spinning indefinitely.
2505
+
2506
+ **Exception — known-large migrations:** the round cap is a heuristic against spinning on a shrinking tail of nitpicks, not a hard stop. Judge convergence by the *trend* in finding quality, not the round number: if every round is still surfacing a genuinely new, independently-verified, real issue — especially if severity is flat or increasing (later rounds finding live-code bugs, not just prose) — keep going past round 4. Only stop when a round returns CERTIFIED, or consecutive rounds return nothing but nitpicks/false positives. (Source: v1.84.0 release review — a repo-wide model-recommendation migration ran 7 rounds, each finding something real; round 5 found a live `SessionStart` hook actively contradicting the new policy, more consequential than anything rounds 1-3 found. Escalating at round 4 per the default heuristic would have shipped that bug. 2026-07-04.)
2478
2507
 
2479
2508
  ```
2480
2509
  Self-review passes → handoff.json (round 1, PENDING_REVIEW)
@@ -3041,7 +3070,7 @@ If deployment fails or post-deploy verification catches issues:
3041
3070
 
3042
3071
  **SDLC.md:**
3043
3072
  ```markdown
3044
- <!-- SDLC Wizard Version: 1.83.0 -->
3073
+ <!-- SDLC Wizard Version: 1.84.0 -->
3045
3074
  <!-- Setup Date: [DATE] -->
3046
3075
  <!-- 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 -->
3047
3076
  <!-- Git Workflow: [PRs or Solo] -->
@@ -3703,7 +3732,7 @@ These signals are community-observed behavior on paid plans (Max/Team) — not i
3703
3732
  | Signal | What It Means | SDLC Action |
3704
3733
  |--------|---------------|-------------|
3705
3734
  | **Subagent-heavy** | Each subagent runs its own context. The advisor is a separate server-side consultation (full transcript forwarded, different token profile). Explore agents, full Agent delegates, and workflow agents each spawn separate contexts. | Expected in Setup A (Fable advisor fires per-decision). If unexpectedly high: use `subagent_type: "Explore"` for search (lighter), reserve full agents for implementation. |
3706
- | **>150K context** | Sessions staying large between compactions. | **Context-window dependent.** On 1M (Setup A): >150K is expected at 30% compact threshold — the real question is whether the task needed 1M headroom. On 200K (Setup B/C): lower `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` toward 75%. `/compact` between planning and implementation. |
3735
+ | **>150K context** | Sessions staying large between compactions. | **Context-window dependent.** Setup A (Sonnet 5, native 1M): recommended `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=75` fires at ~725K — >150K is expected and fine, the real question is whether the task needed that much headroom. Setup B (Opus 4.6, 200K unless you opt into `opus[1m]`): if you opted into `opus[1m]`, pair it with `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30`; on plain 200K, the default ~95% trigger is fine. `/compact` between planning and implementation regardless of lane. |
3707
3736
  | **8+ hour sessions** | Long-running sessions accumulate stale context. | `/clear` between unrelated tasks. Split multi-feature work into separate sessions. After committing a PR, start fresh. Background `/loop` sessions count toward this — audit which are still needed. |
3708
3737
 
3709
3738
  ### Reduce Consumption
@@ -4529,6 +4558,26 @@ Use the best tool for the job. If Claude Code builds it better, use theirs.
4529
4558
 
4530
4559
  ---
4531
4560
 
4561
+ ## Cowork Support
4562
+
4563
+ **Claude Cowork** is a separate product from Claude Code — a desktop application for knowledge workers, not developers. It shares Claude Code's plugin format, so this wizard ships a Cowork-native subset: [`cowork/`](cowork/README.md).
4564
+
4565
+ **What it provides:** 2 portable skills (`/sdlc-wizard-cowork:sdlc`, `/sdlc-wizard-cowork:feedback`) plus 3 **prompt-based hooks** — the Cowork equivalents of this wizard's bash hooks, since Cowork sessions have no shell access:
4566
+
4567
+ | Cowork Hook | Claude Code Equivalent | Event |
4568
+ |-------------|------------------------|-------|
4569
+ | TDD check | `tdd-pretool-check.sh` | `PreToolUse` (Write/Edit/MultiEdit) |
4570
+ | SDLC baseline | `sdlc-prompt-check.sh` | `UserPromptSubmit` |
4571
+ | Completion check | *(new — no CC equivalent)* | `Stop` |
4572
+
4573
+ **What's NOT ported and why** (CLI-specific, filesystem-dependent, or event-unavailable in Cowork): `instructions-loaded-check.sh`, `model-effort-check.sh`, `precompact-seam-check.sh`, the Setup/Update skills, cross-model review via `codex exec` (use ChatGPT/Codex web manually instead), and the CI shepherd (`gh pr`, `git push` — these happen outside a Cowork session).
4574
+
4575
+ **Install:** as a plugin in Claude Desktop or claude.ai settings, pointing at `https://github.com/BaseInfinity/claude-sdlc-wizard/tree/main/cowork`. See [`cowork/README.md`](cowork/README.md) for full details, or `claude --plugin-dir ./cowork` for local testing.
4576
+
4577
+ **Drift prevention:** the skills in `cowork/skills/` are copies of the canonical `skills/` — `tests/test-cowork-drift.sh` fails CI if they diverge, forcing this package to stay in sync whenever the canonical skills update.
4578
+
4579
+ ---
4580
+
4532
4581
  ## Community Contributions (Give Back!)
4533
4582
 
4534
4583
  **This wizard belongs to the community, not any individual.**