agentic-sdlc-wizard 1.72.0 → 1.74.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.
@@ -13,7 +13,7 @@
13
13
  "name": "sdlc-wizard",
14
14
  "source": ".",
15
15
  "description": "SDLC enforcement for AI agents — TDD, planning, self-review, CI shepherd",
16
- "version": "1.72.0",
16
+ "version": "1.74.0",
17
17
  "author": {
18
18
  "name": "Stefan Ayala"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdlc-wizard",
3
- "version": "1.72.0",
3
+ "version": "1.74.0",
4
4
  "description": "SDLC enforcement for AI agents — TDD, planning, self-review, CI shepherd",
5
5
  "author": {
6
6
  "name": "Stefan Ayala",
package/CHANGELOG.md CHANGED
@@ -4,6 +4,81 @@ 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.74.0] - 2026-05-17
8
+
9
+ ### Salvaged from closed v1.43.0-quick-wins branch (PR #340)
10
+
11
+ Long-running session built v1.43.0 quick-wins off `c1c6f31` (~May 12), unaware main had shipped through `v1.73.0`. PR #340 closed without merging; this release ships the items that are still genuinely missing on current main, with Codex+Claude joint triage (`.reviews/v143-salvage-triage.md`).
12
+
13
+ ### Added
14
+
15
+ - **#338 SDLC-skill source-and-precedence preamble.** `skills/sdlc/SKILL.md` now opens with an explicit "Skill source & precedence" section: repo-local `.claude/skills/sdlc/SKILL.md` (symlinked to wizard's `skills/sdlc/SKILL.md`) wins over global `~/.claude/skills/sdlc/SKILL.md`, with a `head -5` verification one-liner. Resolves user-reported confusion when both copies exist with the same name. Regression test `test_sdlc_skill_has_precedence_preamble` in `tests/test-doc-consistency.sh`.
16
+ - **#235(a) `/insights` complementary-tool guidance.** Setup skill Step 12 closing checklist + `CLAUDE_CODE_SDLC_WIZARD.md` "Complementary native skills" table now both cite `/insights` (native CC v2.1.101+) with an explicit qualitative-only caveat: it surfaces `underlying_goal` / `outcome` / `friction_counts` / `user_satisfaction_counts` / `brief_summary` from local session history, but does NOT expose `cache_read_input_tokens` / cache-hit ratio / per-turn breakdown / model-version tracking — so it is **not a substitute** for token-spike detection (ROADMAP #220 / `hooks/token-spike-check.sh`) which reads raw session JSONL. Two regression tests guard the doc-presence + caveat.
17
+ - **#235(b) `/insights` allowlist.** Appended `/insights` to `tests/e2e/known-slash-commands.txt` so the community feature-discovery scanner (#207) stops flagging it as a "new" candidate on every weekly run. `tests/test-community-scanner.sh::test_filters_insights_as_known` asserts the scanner now filters `/insights` from candidate output.
18
+
19
+ ### Fixed
20
+
21
+ - **Codex stdin-hang doc fix.** All multi-line `codex exec` invocations in `README.md`, `CLAUDE_CODE_SDLC_WIZARD.md`, `skills/sdlc/SKILL.md` (and the new `scripts/codex-review-with-progress.sh` wrapper) now append `< /dev/null`. Without the redirect, codex from a non-interactive parent (background, hooks, CI, Claude Code Bash tool) blocks on stdin reads even when the prompt is passed as an argument — the process sits at S/0% CPU indefinitely with a 0-byte `-o` output file (file only written on completion, so a hang gives zero visibility). Validated on `codex-cli 0.130.0` / macOS 14, 2026-05-15, after two 30+ minute silent hangs. Repro: `codex exec -s read-only 'Reply A.' &` hangs forever; `codex exec -s read-only 'Reply A.' < /dev/null` returns in 8s. Two new tests: `test_codex_exec_blocks_redirect_stdin` in `tests/test-doc-consistency.sh` (asserts every multi-line block in user-facing docs has the redirect) and `test_wrapper_redirects_child_stdin_to_dev_null` in `tests/test-codex-progress-wrapper.sh` (asserts the wrapper redirects child stdin so heartbeats actually fire instead of hanging).
22
+ - **`tests/test-hooks.sh` env-isolation.** `test_instructions_hook_cwd_walkup` now scopes both `HOME=$tmpdir` and `SDLC_WIZARD_CACHE_DIR=$tmpdir/cache`. Without isolation, the user's `~/.cache/sdlc-wizard/latest-version` (e.g. a stale `1.73.0`) poisoned the staleness check and triggered the "30 releases behind" loud nudge against a fresh-version fixture, breaking the test's negative grep. Hit live during the v1.43 session; happens any time the cached latest doesn't match the SDLC.md version under test.
23
+
24
+ ### Test counts (all green)
25
+
26
+ - `tests/test-doc-consistency.sh` — 39/0 (4 new tests: setup-insights, wizard-insights, sdlc-preamble, codex-stdin)
27
+ - `tests/test-community-scanner.sh` — 15/0 (1 new: filters-insights-as-known)
28
+ - `tests/test-codex-progress-wrapper.sh` — 12/0 (1 new: wrapper-redirects-child-stdin)
29
+ - `tests/test-hooks.sh` — 156/0 (env-isolation fix)
30
+
31
+ ### Dropped from v1.43 branch (not salvaged — already-shipped or no-longer-applicable)
32
+
33
+ - #226 weekly-update.yml Tier 2 wording fix — code deleted in #231 Phase 3d (v1.54.0)
34
+ - #227 weekly-update.yml `cusum --add` → `--add-json` — same refactor removed the CUSUM steps
35
+ - #219 setup-skill CC 2.1.117 model-pin note — already verified on main (CHANGELOG.md:331); doc nuance dropped per Codex's "weak MAYBE → DROP"
36
+ - #337 `--yolo` audit — verification-only, no code to ship
37
+ - #339 5-entry API triage — triage-only, no code to ship
38
+
39
+ ### Process
40
+
41
+ Two-step Codex cross-model review: (1) initial triage of branch vs main (`.reviews/v143-salvage-triage.md`) returned CERTIFIED 7/10 with corrected target-line numbers for every salvaged item, (2) closed PR #340 cleanly with explanation comment, rebuilt against current main with Codex's targets.
42
+
43
+ ## [1.73.0] - 2026-05-06
44
+
45
+ ### Fix: PreCompact hook no longer false-positives on stale `.git/REBASE_HEAD`
46
+
47
+ `hooks/precompact-seam-check.sh` was treating any presence of `.git/REBASE_HEAD` as "rebase in progress" and blocking manual `/compact`. But `REBASE_HEAD` is just a rebase-related ref (the stopped/replayed commit) that git can leave behind after a clean rebase finishes — the authoritative "rebase in progress" signal is the `rebase-merge/` or `rebase-apply/` directory (which is what `git status` keys on too). Hit live in this repo 2026-05-05 — yesterday's clean rebase left `REBASE_HEAD` behind, the user's manual `/compact` was blocked, and clearing it required `rm .git/REBASE_HEAD` by hand.
48
+
49
+ The OR-chain at line 227 now drops the `REBASE_HEAD` predicate; only the `rebase-{merge,apply}/` dir checks remain. Two new tests cover the fix:
50
+
51
+ - `test_precompact_silent_on_stale_rebase_head_alone` — positive: `rc=0` + empty stderr when only `REBASE_HEAD` exists
52
+ - `test_precompact_blocks_on_rebase_head_with_rebase_merge_dir` — negative control: still blocks on real in-flight rebase (REBASE_HEAD + rebase-merge dir together)
53
+
54
+ 156/156 hook tests green. Codex round 1 CERTIFIED 9/10 (one P2 comment-accuracy nit caught — fixed: `REBASE_HEAD` is the stopped/replayed commit, not the original branch tip, which is `ORIG_HEAD`).
55
+
56
+ PR #330.
57
+
58
+ ### GC: -460 LOC of stale review/plan artifacts (#236 bloat hunt)
59
+
60
+ `.reviews/` is gitignored, but 14 handoff/preflight/round-N review files for now-merged PRs were committed before that gitignore line landed. They held no ongoing reference value. `plans/CATCHUP.md` captured the v2.1.15 → v2.1.81 catch-up (March 2026) — historical context lives in CHANGELOG (v1.8.0 entry); the plan doc was dead weight.
61
+
62
+ Deleted (15 files):
63
+
64
+ - `.reviews/baseline-fires-once-001/{round-1,round-2}-review.md`
65
+ - `.reviews/skill-cross-model-trim-001/{round-1,round-2,round-3}-review.md`
66
+ - `.reviews/tdd-pretool-fires-once-001/{round-1,round-2}-review.md`
67
+ - `.reviews/preflight-{allowed-tools-permissions,baseline-fires-once,model-pin-opt-in,precompact-seam,skill-cross-model-trim,staleness-nudge,tdd-pretool-fires-once}-001.md`
68
+ - `plans/CATCHUP.md`
69
+
70
+ Kept (still load-bearing):
71
+
72
+ - `.reviews/research-95/97/99/206/235.md` (cited from ROADMAP rows)
73
+ - `.reviews/experiment-tracking.md` (asserted by `tests/test-workflow-triggers.sh:2189`)
74
+ - `plans/AUTO_SELF_UPDATE.md` (still annotated with #231 phase notes)
75
+
76
+ Hooks 156/156, cli 88/88, workflow 176/176, docs 35/35 — all green post-deletion.
77
+
78
+ PR #331.
79
+
80
+ ---
81
+
7
82
  ## [1.72.0] - 2026-05-05
8
83
 
9
84
  ### Closes #323: `init --force` no longer silently overwrites CUSTOMIZED files
@@ -2360,8 +2360,12 @@ PLANNING → DOCS → TDD RED → TDD GREEN → Tests Pass → Self-Review
2360
2360
  review the listed files. Output each finding with: an ID (1, 2, ...), \
2361
2361
  severity (P0/P1/P2), description, and a 'certify condition' stating \
2362
2362
  what specific change would resolve it. \
2363
- End with CERTIFIED or NOT CERTIFIED."
2363
+ End with CERTIFIED or NOT CERTIFIED." \
2364
+ < /dev/null
2364
2365
  ```
2366
+
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
+
2365
2369
  3. If CERTIFIED → proceed to CI. If NOT CERTIFIED → go to Round 2.
2366
2370
 
2367
2371
  ### Round 2+: Dialogue Loop
@@ -2402,7 +2406,8 @@ When the reviewer finds issues, respond per-finding instead of silently fixing e
2402
2406
  ACCEPTED → verify it was applied. \
2403
2407
  Do NOT raise new findings unless P0 (critical/security). \
2404
2408
  New observations go in 'Notes for next review' (non-blocking). \
2405
- End with CERTIFIED or NOT CERTIFIED."
2409
+ End with CERTIFIED or NOT CERTIFIED." \
2410
+ < /dev/null
2406
2411
  ```
2407
2412
 
2408
2413
  4. If CERTIFIED → done. If NOT CERTIFIED (rejected disputes or failed fixes) → fix rejected items and repeat.
@@ -2976,7 +2981,7 @@ If deployment fails or post-deploy verification catches issues:
2976
2981
 
2977
2982
  **SDLC.md:**
2978
2983
  ```markdown
2979
- <!-- SDLC Wizard Version: 1.72.0 -->
2984
+ <!-- SDLC Wizard Version: 1.74.0 -->
2980
2985
  <!-- Setup Date: [DATE] -->
2981
2986
  <!-- 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 -->
2982
2987
  <!-- Git Workflow: [PRs or Solo] -->
@@ -3791,9 +3796,12 @@ codex exec \
3791
3796
  review the listed files. Output each finding with: an ID (1, 2, ...), \
3792
3797
  severity (P0/P1/P2), description, and a 'certify condition' stating \
3793
3798
  what specific change would resolve it. \
3794
- End with CERTIFIED or NOT CERTIFIED."
3799
+ End with CERTIFIED or NOT CERTIFIED." \
3800
+ < /dev/null
3795
3801
  ```
3796
3802
 
3803
+ > **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
+
3797
3805
  4. If CERTIFIED → done. If NOT CERTIFIED → enter the dialogue loop.
3798
3806
 
3799
3807
  **The Dialogue Loop (Round 2+):**
@@ -3849,7 +3857,8 @@ codex exec \
3849
3857
  ACCEPTED → verify it was applied. \
3850
3858
  Do NOT raise new findings unless P0 (critical/security). \
3851
3859
  New observations go in 'Notes for next review' (non-blocking). \
3852
- End with CERTIFIED or NOT CERTIFIED."
3860
+ End with CERTIFIED or NOT CERTIFIED." \
3861
+ < /dev/null
3853
3862
  ```
3854
3863
 
3855
3864
  **The key constraint:** Rechecks are scoped to previous findings only. The reviewer cannot block certification with new P2 observations discovered during recheck. This prevents scope creep and ensures convergence.
@@ -4070,7 +4079,7 @@ Walk through updates? (y/n)
4070
4079
  Store wizard state in `SDLC.md` as metadata comments (invisible to readers, parseable by Claude):
4071
4080
 
4072
4081
  ```markdown
4073
- <!-- SDLC Wizard Version: 1.72.0 -->
4082
+ <!-- SDLC Wizard Version: 1.74.0 -->
4074
4083
  <!-- Setup Date: 2026-01-24 -->
4075
4084
  <!-- Completed Steps: step-0.1, step-0.2, step-1, step-2, step-3, step-4, step-5, step-6, step-7, step-8, step-9 -->
4076
4085
  <!-- Git Workflow: PRs -->
@@ -4423,9 +4432,12 @@ The gap this closes: the advisor tool (API beta, `advisor-tool-2026-03-01`) ship
4423
4432
  |--------------|--------------|-------------|
4424
4433
  | `/less-permission-prompts` | Scans transcripts for common read-only Bash/MCP calls and proposes a prioritized allowlist | After a few sessions — reduces permission friction without auto mode |
4425
4434
  | `/permissions` | Pre-allow specific commands and check them into `.claude/settings.json` | Anytime you want an auditable team allowlist |
4435
+ | `/insights` | Local analyzer of your CC session history. Generates HTML report at `~/.claude/usage-data/report.html` + per-session facet JSON at `~/.claude/usage-data/facets/<session>.json`. Surfaces `underlying_goal`, `outcome`, `friction_counts`, `user_satisfaction_counts`, `brief_summary`, recurring friction patterns, suggested CLAUDE.md additions | Monthly — **qualitative-only**; see caveat below |
4426
4436
 
4427
4437
  These are shipped by Claude Code itself. The wizard doesn't reimplement them — it points you at them so you benefit from the native version's ongoing maintenance.
4428
4438
 
4439
+ **`/insights` caveat (do not over-claim):** the output is behavioral/qualitative only — friction counts, goal categories, satisfaction. It does NOT expose `cache_read_input_tokens`, cache-hit ratio, per-turn token breakdown, or model-version tracking. It is **not a substitute** for token-spike detection (ROADMAP #220 / `hooks/token-spike-check.sh`), which reads raw session JSONL (`~/.claude/projects/<proj>/<session>.jsonl`, `usage.cache_read_input_tokens` per turn). Use `/insights` for behavioral friction; use `#220`-class instrumentation for token/cache anomalies. They are complementary, not interchangeable. (Original research: ROADMAP #206, full writeup `.reviews/research-206-insights.md`.)
4440
+
4429
4441
  ### When Claude Code Improves
4430
4442
 
4431
4443
  Claude Code is actively improving. When they add built-in features:
package/README.md CHANGED
@@ -4,7 +4,7 @@ A **self-evolving Software Development Life Cycle (SDLC) enforcement system for
4
4
 
5
5
  **Built on 15+ years of software engineering and founding engineering experience** — battle-tested patterns from real production systems, baked into an AI agent that follows tried-and-true software quality practices so you don't have to enforce them manually.
6
6
 
7
- > **Built for Claude Code.** Using OpenAI's Codex CLI instead? Check out [`codex-sdlc-wizard`](https://github.com/BaseInfinity/codex-sdlc-wizard) same SDLC enforcement, ported. ([Full ecosystem](#xdlc-ecosystem-sibling-projects).)
7
+ > **Built for Claude Code.** Using OpenAI's Codex CLI instead? Check out [`codex-sdlc-wizard`](https://github.com/BaseInfinity/codex-sdlc-wizard). Need privacy-first / any-backend (local Ollama, Azure OpenAI, hosted OSS)? See [`opencode-sdlc-wizard`](https://github.com/BaseInfinity/opencode-sdlc-wizard). ([Full ecosystem](#xdlc-ecosystem-sibling-projects).)
8
8
 
9
9
  ## Install
10
10
 
@@ -129,9 +129,12 @@ That's it. Codex picks up your OpenAI account's best available model automatical
129
129
  ```bash
130
130
  codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access \
131
131
  -o .reviews/latest-review.md \
132
- "Read .reviews/handoff.json and review per the checklist. Output findings + CERTIFIED or NOT CERTIFIED."
132
+ "Read .reviews/handoff.json and review per the checklist. Output findings + CERTIFIED or NOT CERTIFIED." \
133
+ < /dev/null
133
134
  ```
134
135
 
136
+ **Always append `< /dev/null`** when running `codex exec` from a non-interactive parent (background, hooks, CI, Claude Code Bash tool). Without it, codex blocks on stdin reads even when the prompt is 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.
137
+
135
138
  `xhigh` reasoning is **non-negotiable** — lower settings miss subtle bugs. See [CLAUDE_CODE_SDLC_WIZARD.md](CLAUDE_CODE_SDLC_WIZARD.md#cross-model-review-loop-optional) for the full protocol (handoff format, round-2 dialogue loop, preflight docs). Real-world: this catches P0/P1 issues in 2-3 out of 10 reviews that Claude's self-review rated as clean.
136
139
 
137
140
  ## How It Works
@@ -267,9 +270,10 @@ This wizard is one of three published siblings. Same enforcement philosophy, dif
267
270
  |---------|----------------|--------------|
268
271
  | [`agentic-sdlc-wizard`](https://www.npmjs.com/package/agentic-sdlc-wizard) ([repo](https://github.com/BaseInfinity/claude-sdlc-wizard)) | Claude Code / SDLC | This repo. Plan → TDD → self-review for code, with hooks + skills + CI scoring |
269
272
  | [`codex-sdlc-wizard`](https://www.npmjs.com/package/codex-sdlc-wizard) ([repo](https://github.com/BaseInfinity/codex-sdlc-wizard)) | OpenAI Codex / SDLC | Same SDLC enforcement, ported to Codex CLI (writes `.codex/` + `AGENTS.md`) |
273
+ | [`opencode-sdlc-wizard`](https://www.npmjs.com/package/opencode-sdlc-wizard) ([repo](https://github.com/BaseInfinity/opencode-sdlc-wizard)) | OpenCode / privacy-first | Same SDLC enforcement against ANY backend OpenCode supports — local Ollama, Azure OpenAI, Together, Groq, OpenRouter. Writes `.opencode/` + `AGENTS.md`. |
270
274
  | [`claude-gdlc-wizard`](https://www.npmjs.com/package/claude-gdlc-wizard) ([repo](https://github.com/BaseInfinity/claude-gdlc-wizard)) | Claude Code / GDLC | Game Development Life Cycle — persona-driven playtest cycles, triangulated findings, ratchet-only-tightens |
271
275
 
272
- All three are part of the broader [XDLC ecosystem](https://github.com/BaseInfinity/xdlc) — generalized lifecycle enforcement across agents and domains.
276
+ All four are part of the broader [XDLC ecosystem](https://github.com/BaseInfinity/xdlc) — generalized lifecycle enforcement across agents and domains.
273
277
 
274
278
  ## Community
275
279
 
@@ -218,7 +218,14 @@ esac
218
218
  # Unknown value (e.g. typo "bogus") → also falls through to real check
219
219
  # rather than silently bypassing safety. The safer-than-the-typo path.
220
220
  if [ "$DRY_RUN_GIT_HANDLED" -eq 0 ] && [ -d "$GITDIR" ]; then
221
- if [ -e "$GITDIR/REBASE_HEAD" ] || [ -d "$GITDIR/rebase-merge" ] || [ -d "$GITDIR/rebase-apply" ]; then
221
+ # Only the rebase-{merge,apply}/ dir is authoritative for "rebase in progress."
222
+ # .git/REBASE_HEAD is a rebase-related ref (the stopped/replayed commit) that
223
+ # is not authoritative on its own — it can persist as a stale marker after a
224
+ # rebase finishes cleanly: git removes the dir but leaves REBASE_HEAD around
225
+ # for diff/log lookups. Including it in the OR-chain caused false-positive
226
+ # HOLDs that blocked manual /compact for users whose previous rebase had
227
+ # completed (hit live 2026-05-05). `git status` keys on the dirs too.
228
+ if [ -d "$GITDIR/rebase-merge" ] || [ -d "$GITDIR/rebase-apply" ]; then
222
229
  HOLD_REASONS="${HOLD_REASONS} - Git rebase in progress. Compacting mid-rebase loses the operation's context.
223
230
  Resolve: finish or abort the rebase before /compact."$'\n'
224
231
  fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-sdlc-wizard",
3
- "version": "1.72.0",
3
+ "version": "1.74.0",
4
4
  "description": "SDLC enforcement for Claude Code — hooks, skills, and wizard setup in one command",
5
5
  "bin": {
6
6
  "sdlc-wizard": "cli/bin/sdlc-wizard.js"
@@ -6,6 +6,12 @@ effort: high
6
6
  ---
7
7
  # SDLC Skill - Full Development Workflow
8
8
 
9
+ ## Skill source & precedence
10
+
11
+ This skill is loaded from **`.claude/skills/sdlc/SKILL.md`** in the active repo (symlinked to `skills/sdlc/SKILL.md` in the wizard's source tree). Claude Code prefers repo-local skills over global (`~/.claude/skills/sdlc/SKILL.md`) when both exist with the same name — the repo-local copy is the project's authoritative workflow contract. Use global skills only for cross-repo personal tooling (e.g. `feedback`, `revise-claude-md`); use repo-local for implementation, tests, release, and verification in this repo.
12
+
13
+ If unsure which copy is active, compare `head -5 .claude/skills/sdlc/SKILL.md` against `head -5 ~/.claude/skills/sdlc/SKILL.md`. The repo-local copy wins. Don't mix guidance from both — pick the source for this repo and stay there.
14
+
9
15
  ## Task
10
16
  $ARGUMENTS
11
17
 
@@ -126,7 +132,7 @@ PROTOCOL is universal across domains; only `review_instructions` and `verificati
126
132
 
127
133
  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.
128
134
  2. **Mission-first handoff** (`.reviews/handoff.json`) — required JSON keys: `"review_id"`, `"status": "PENDING_REVIEW"`, `"round": 1`, `"mission"` / `"success"` / `"failure"` (2-3 sentences each — without them you get "looks good"), `"files_changed"`, `"verification_checklist"` — the **verification checklist** is specific items with file:line refs (NOT a generic "review this"), `"review_instructions"`, `"preflight_path"`. Optional `"pr_number":` opts into the PreCompact self-heal (#209): if PR is MERGED, `/compact` treats handoff as implicit CERTIFIED.
129
- 3. **Run reviewer:** `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access -o .reviews/latest-review.md "<prompt>"`. Always `xhigh`. CC sandbox blocks Codex's Rust binary (`SCDynamicStore`) — use `dangerouslyDisableSandbox: true` on Bash; Codex has its own sandbox. xhigh runs take 1-5 min; for a heartbeat use `scripts/codex-review-with-progress.sh`.
135
+ 3. **Run reviewer:** `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access -o .reviews/latest-review.md "<prompt>" < /dev/null`. Always `xhigh`. **Always append `< /dev/null`** — codex blocks on stdin reads from non-interactive parents (background, hooks, CI, CC Bash tool); without the redirect it hangs at S/0% CPU indefinitely. CC sandbox blocks Codex's Rust binary (`SCDynamicStore`) — use `dangerouslyDisableSandbox: true` on Bash; Codex has its own sandbox. xhigh runs take 1-5 min; for a heartbeat use `scripts/codex-review-with-progress.sh` (already redirects child stdin).
130
136
  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."
131
137
 
132
138
  **Convergence:** 2 rounds sweet spot, 3 max (research: 14 repos + 7 papers). After 3 still NOT CERTIFIED → escalate.
@@ -161,7 +167,7 @@ Mandatory steps:
161
167
  1. Push to remote
162
168
  2. `gh pr checks --watch`
163
169
  3. **Read CI logs whether pass or fail** (`gh run view <RUN_ID> --log`, not just `--log-failed`). Passing CI hides warnings, skipped steps, degraded scores
164
- 4. **Cross-model audit the CI logs** — pipe to a tmp file, run `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access` with *"Audit for silent failures, skipped tests, degraded metrics, warnings-that-should-be-errors."* Tier 1 + Tier 2 separately
170
+ 4. **Cross-model audit the CI logs** — pipe to a tmp file, run `codex exec -c 'model_reasoning_effort="xhigh"' -s danger-full-access "<audit prompt>" < /dev/null` (always append `< /dev/null` — stdin-hang fix) with *"Audit for silent failures, skipped tests, degraded metrics, warnings-that-should-be-errors."* Tier 1 + Tier 2 separately
165
171
  5. CI fails → diagnose, fix, push (max 2 attempts)
166
172
  6. CI passes → `gh api repos/OWNER/REPO/pulls/PR/comments` for review feedback
167
173
  7. Implement valid suggestions (bugs, perf, missing error handling, dedup, coverage). Skip opinions/style. Max 3 iterations
@@ -309,8 +309,9 @@ Tell the user:
309
309
  > - After a few sessions, run `/less-permission-prompts` — a native Claude Code skill
310
310
  > that scans your transcripts for common read-only Bash/MCP calls and proposes a
311
311
  > prioritized allowlist. Reduces permission friction without enabling auto mode.
312
+ > - Run `/insights` (native CC, v2.1.101+) **monthly** to surface friction patterns from your session history — `underlying_goal`, `outcome`, `friction_counts`, `user_satisfaction_counts`. Output is **qualitative-only**; it does NOT replace token-spike detection (ROADMAP #220 / `hooks/token-spike-check.sh`) which needs raw session JSONL (`~/.claude/projects/<proj>/<session>.jsonl`, `usage.cache_read_input_tokens` per turn).
312
313
  >
313
- > Both are complementary to the SDLC wizard — they add tooling and quality-of-life, not process enforcement.
314
+ > All three are complementary to the SDLC wizard — they add tooling and quality-of-life, not process enforcement.
314
315
 
315
316
  ## Rules
316
317
 
@@ -93,17 +93,17 @@ 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.72.0
96
+ Latest: 1.74.0
97
97
 
98
98
  What changed:
99
+ - [1.74.0] Salvage from closed v1.43 PR. Ships #338 SDLC-skill source-and-precedence preamble; #235(a)(b) `/insights` guidance + allowlist (qualitative-only — NOT a substitute for #220 token-spike); codex stdin-hang fix (`< /dev/null` on all multi-line `codex exec` blocks + wrapper, codex-cli 0.130.0); `test-hooks.sh` env-isolation.
100
+ - [1.73.0] precompact stale REBASE_HEAD fix + bloat sweep — `hooks/precompact-seam-check.sh` no longer false-positive HOLDs `/compact` when a finished rebase left REBASE_HEAD behind without `rebase-{merge,apply}/` dirs (hit live 2026-05-05). 15 tracked review/plan artifacts deleted (-460 LOC).
99
101
  - [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.
100
- - [1.71.0] token-bloat phase 3`skills/sdlc/SKILL.md` Cross-Model Review trimmed (~70 ~20 lines, -427 tokens). Full protocol + examples moved to canonical `CLAUDE_CODE_SDLC_WIZARD.md` "Cross-Model Review Loop" section.
101
- - [1.70.0] token-bloat fix phase 2 — `hooks/tdd-pretool-check.sh` TDD CHECK JSON nudge fires once per CC `session_id` instead of every src/ edit. Saves ~0.5-1.5K tokens/session.
102
- - [1.69.0] token-bloat fix phase 1 — `hooks/sdlc-prompt-check.sh` BASELINE block fires once per CC `session_id`. Saves ~12K tokens/session.
102
+ - [1.71.0–1.69.0] token-bloat sweep #236three phases: BASELINE block fires once per `session_id` (-12K/session), TDD CHECK fires once per `session_id` (-0.5-1.5K/session), `skills/sdlc/SKILL.md` Cross-Model Review trimmed (full protocol moved to canonical wizard doc).
103
103
  - [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`.
104
104
  - [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.
105
- - [1.63.0] cache-cost observability closeout (#204 absorbed by #220) — `tests/test-token-spike.sh` gains explicit cache-miss regression test + negative-control test. SDLC skill + wizard doc gain "Cache-Cost Surprises" sections covering 10-20× silent cost blowups (mid-session CLAUDE.md edits, idle pruning, upstream cache bugs) and detection via `hooks/token-spike-check.sh`'s `costly_tokens` metric.
106
- - [1.62.0] roadmap hygiene + #211 backfill — closes paperwork-stale rows (#207, #211 historical, #215, #217, #78, #79, #80, #219). Backfilled 5 corrupted `score-history.jsonl` rows from `max_score:10` → `max_score:11` (UI scenarios with design_system criterion). Codex strategic review confirmed scope.
105
+ - [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).
106
+ - [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.
107
107
  - [1.61.0] calibration scenarios for #96 Phase 3 PR 2 — `tests/e2e/scenarios/calibration-careful-read.md` (parsePrice with 5 edge-case formats) tests whether self-review catches missed requirements. Score delta between SDLC and naive agents on this scenario is a calibration signal for `lift-proof.sh`
108
108
  - [1.60.0] wizard-installation lift-proof harness (#96 Phase 3 PR 1) — `tests/e2e/lift-proof.sh` runs same scenario on bare vs wizard-installed fixture, emits score delta. Closes the "does the wizard work?" question. Honestly zero-API (sim + eval on Max)
109
109
  - [1.59.0] evaluator on Max via `claude --print` (#228) — `EVAL_USE_CLI=1` swaps `evaluate.sh`'s per-criterion judge transport from `curl` → API to `claude --print --output-format json`. local-shepherd.sh sets it by default, so the local path is honestly zero-API