Skip to content

roadmap(#217): loud WARNING below xhigh — max preferred, xhigh floor - #236

Merged
BaseInfinity merged 1 commit into
mainfrom
roadmap-217-loud-warning
Apr 24, 2026
Merged

roadmap(#217): loud WARNING below xhigh — max preferred, xhigh floor#236
BaseInfinity merged 1 commit into
mainfrom
roadmap-217-loud-warning

Conversation

@BaseInfinity

Copy link
Copy Markdown
Owner

Summary

Close the coherence gap between the docs (max preferred, xhigh floor) and the hook (currently soft-nudges anything ≠ xhigh, including max — backwards).

  • effort=max or xhigh → silent (at or above floor)
  • effort=high/medium/low or unset → LOUD WARNING block with SDLC compliance mention, /effort max primary, /effort xhigh floor alternative, opus[1m] model reminder
  • Removed duplicate effort/model check from instructions-loaded-check.sh (single source of truth = model-effort-check.sh)

Why

hooks/model-effort-check.sh was flagging max as "upgrade available", which was the opposite of what SDLC.md / CLAUDE_CODE_SDLC_WIZARD.md already say. On Opus 4.7, high or below actively breaks SDLC compliance (shallow reasoning, skipped TDD, dropped self-review), so the hook should be louder there, not softer on max.

Codex cross-model review

  • Round 1: 7/10 NOT CERTIFIED (dupe nudge in instructions-loaded + stale doc refs)
  • Round 2: 8/10 NOT CERTIFIED (one stale line missed at CHANGELOG.md:120)
  • Round 3: 10/10 CERTIFIED

Test plan

  • 2 new TDD tests (test_model_effort_check_max_is_silent, test_model_effort_check_below_xhigh_loud_warning)
  • 1 new regression test (test_instructions_loaded_no_duplicate_effort_nudge)
  • Updated test_hooks_recommend_opus_1m_alias to assert single-source-of-truth
  • bash tests/test-hooks.sh → 119/119 pass
  • bash tests/test-doc-consistency.sh → 22/22 pass
  • bash tests/test-workflow-triggers.sh → 165/165 pass
  • Output size cap (500 chars) verified at 432 chars
  • Validate CI job green

…floor

Current hook treats any effort ≠ xhigh as 'upgrade available' — including max
(the preferred default), which is backwards. Docs already say 'max preferred,
xhigh floor'. Close the coherence gap.

Behavior (post-change):
- effort=max or xhigh → silent (at or above floor)
- effort=high/medium/low or unset → LOUD WARNING block:
  WARNING marker, SDLC compliance mention, /effort max primary recommendation,
  /effort xhigh floor alternative, opus[1m] model reminder

Also removes a duplicate effort/model check from instructions-loaded-check.sh
that used the same stale xhigh-as-recommended logic and double-printed on
SessionStart. Single source of truth is now model-effort-check.sh.

Tests:
- 2 new TDD tests in test-hooks.sh (max silent, below-xhigh loud)
- 1 new regression test (instructions-loaded doesn't re-declare the nudge)
- Updated test_hooks_recommend_opus_1m_alias to assert single-source-of-truth
- 119/119 hook tests pass, 22/22 doc-consistency tests pass

Doc refs:
- CHANGELOG.md:120+140 and ROADMAP.md:134 annotated as superseded by #217
- Live docs (SDLC.md, CLAUDE_CODE_SDLC_WIZARD.md) already say max preferred

Codex cross-model review:
- Round 1: 7/10 NOT CERTIFIED (dupe nudge + stale doc refs)
- Round 2: 8/10 NOT CERTIFIED (one stale line missed at CHANGELOG.md:120)
- Round 3: 10/10 CERTIFIED
@github-actions

github-actions Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Claude encountered an error —— View job


I'll analyze this and get back to you.

@BaseInfinity
BaseInfinity merged commit 5080161 into main Apr 24, 2026
2 of 3 checks passed
@BaseInfinity
BaseInfinity deleted the roadmap-217-loud-warning branch April 24, 2026 20:50
@BaseInfinity BaseInfinity mentioned this pull request Apr 24, 2026
9 tasks
BaseInfinity added a commit that referenced this pull request Apr 24, 2026
* release: v1.37.0

Bundles two Codex-certified PRs:

- PR #235 (ROADMAP #231 Phase 1): delete monthly-research.yml — 519 lines +
  4 claude-code-action steps removed, zero merged artifacts in 30d, $11-23/mo
  API burn eliminated. Stubbed 17 test_monthly_* assertions (#231 Phase 1
  pattern), marked 5 live-doc sections REMOVED/historical. Codex 3-round: 9/10.

- PR #236 (ROADMAP #217): loud WARNING below xhigh effort — max preferred,
  xhigh floor, single source of truth. Dupe effort check removed from
  instructions-loaded-check.sh. 2 TDD tests + 1 regression test. Codex 3-round: 10/10.

Version parity:
- package.json, SDLC.md metadata + table, CLAUDE_CODE_SDLC_WIZARD.md (2 refs),
  .claude-plugin/plugin.json, .claude-plugin/marketplace.json → 1.37.0
- skills/update/SKILL.md Step 3 example refreshed
- CHANGELOG entry "[1.37.0] - 2026-04-24"

ROADMAP:
- #232: /update-wizard should mimic 'claude update' UX
- #233: mixed-mode coder+reviewer tier (Sonnet coder + Opus reviewer for
  simple repos, inspired by codex-sdlc-wizard)
- #234: GitHub About populated (description, homepage, 8 topics)

Release review (Codex round 1 → 2):
- REL-001 fixed: commit now exists on release branch (was empty)
- REL-002 fixed: '2 claude-code-action blocks' corrected to '4 steps'
- REL-003 fixed: .reviews/handoff.json + untracked .claude/hooks excluded

* release(v1.37.0): fix CHANGELOG line 26 count (2 → 4 claude-code-action steps)

Codex round-2 recheck caught that the 'Removed' section bullet still said
'2 API blocks' — line 11 was fixed, line 26 was not. Align with reality:
pre-delete workflow had 4 uses: anthropics/claude-code-action@v1 steps.
BaseInfinity added a commit that referenced this pull request May 5, 2026
BaseInfinity added a commit that referenced this pull request May 5, 2026
* bloat: BASELINE block fires once per CC session (v1.69.0)

hooks/sdlc-prompt-check.sh emitted a ~250-token static SDLC BASELINE
block on every UserPromptSubmit. After the SDLC skill auto-invokes,
that block is duplicate context — ~12K tokens/session wasted for any
user with >3 prompts.

Now gated on a per-session_id sentinel under
\$SDLC_WIZARD_CACHE_DIR/baseline-shown-<id>, atomic-claimed via subshell
'set -C' (noclobber) so N parallel fires emit exactly once. Pruned at
7d. SETUP-not-complete + EFFORT-bump warnings still fire every prompt.
No-session_id stdin keeps current emit-every-fire behavior (legacy CC
+ direct shell tests).

Codex round 1 caught two P1s, both fixed: (a) concurrency race in
naive 'check then write-after-emit' pattern; (b) session_id extraction
was jq-coupled — now uses grep+sed so the gate works without jq.
Round 2 CERTIFIED 9/10. Regression tests: 50-parallel + restricted-
PATH-no-jq.

Discovered during ROADMAP #236 functional-bloat audit. Audit method:
measure cost x frequency, judge value — not blind delete-and-see.
Other hooks audited (model-effort-check, precompact-seam-check,
token-spike-check) earned their keep — silent at healthy state.

* ci: list test-baseline-fires-once.sh in CONTRIBUTING.md

test-workflow-triggers.sh asserts CONTRIBUTING.md lists every test
script that CI runs. Adding the new test was missed in the v1.69.0
commit.
BaseInfinity added a commit that referenced this pull request May 5, 2026
hooks/tdd-pretool-check.sh emitted a ~50-token JSON nudge ('TDD CHECK:
Are you writing IMPLEMENTATION before a FAILING TEST?') on every
Write/Edit/MultiEdit touching src/**. After the SDLC skill auto-invokes
(which already covers TDD RED/GREEN), the per-Edit nudge is duplicate
context. Typical SDLC session has 10-30 src Edits = ~0.5-1.5K wasted
tokens.

Same atomic-noclobber sentinel pattern proven in v1.69.0 (BASELINE gate),
applied to the TDD CHECK output. New sentinel at \$SDLC_WIZARD_CACHE_DIR/
tdd-shown-<session_id>. Non-src/ files still produce zero output and
crucially DO NOT consume the sentinel slot (Test 6).

Codex round 1 caught one P1 (new test file untracked at review time);
fixed by staging before round 2. Round 2 CERTIFIED 9/10.

ROADMAP #236 phase 2. Combined v1.69.0 + v1.70.0 saves ~13.5K tokens
on a 50-prompt + 20-Edit session.
BaseInfinity added a commit that referenced this pull request May 5, 2026
skills/sdlc/SKILL.md Cross-Model Review section condensed from ~70 lines
to ~20 lines. Saves ~427 tokens per SDLC skill auto-invoke (4995 → 4568
tokens). The skill auto-loads on virtually every productive
implement/fix/refactor task, so this is real per-session cost.

What stayed: decision-making (when to run/skip, prereqs), 4-step protocol
summary (preflight → handoff → reviewer → dialogue), required JSON keys
including the test-asserted '"mission"', '"success"', '"failure"',
'"verification_checklist"', '"pr_number":' (PreCompact self-heal opt-in
#209), convergence rule, ### Release Review Focus subsection with
Version parity, multi-reviewer/non-code-domain one-liner.

What moved to wizard doc canonical: full handoff JSON example, full
codex command example. New subsections added in
CLAUDE_CODE_SDLC_WIZARD.md → Cross-Model Review Loop:
#### Anti-patterns, #### Multiple reviewers, #### Non-code domains.
The SKILL.md pointer now reaches all dropped content.

Codex review: round 1 caught 3 P0 test-self-update.sh failures (4/10);
round 2 caught 1 more P0 in test-hooks.sh asserting '"pr_number":' with
colon, not bare quotes (6/10); round 3 CERTIFIED 10/10.

ROADMAP #236 phase 3. Combined v1.69 + v1.70 + v1.71 saves ~14K
tokens/session for typical workloads.
BaseInfinity added a commit that referenced this pull request May 5, 2026
…floor (#236)

Current hook treats any effort ≠ xhigh as 'upgrade available' — including max
(the preferred default), which is backwards. Docs already say 'max preferred,
xhigh floor'. Close the coherence gap.

Behavior (post-change):
- effort=max or xhigh → silent (at or above floor)
- effort=high/medium/low or unset → LOUD WARNING block:
  WARNING marker, SDLC compliance mention, /effort max primary recommendation,
  /effort xhigh floor alternative, opus[1m] model reminder

Also removes a duplicate effort/model check from instructions-loaded-check.sh
that used the same stale xhigh-as-recommended logic and double-printed on
SessionStart. Single source of truth is now model-effort-check.sh.

Tests:
- 2 new TDD tests in test-hooks.sh (max silent, below-xhigh loud)
- 1 new regression test (instructions-loaded doesn't re-declare the nudge)
- Updated test_hooks_recommend_opus_1m_alias to assert single-source-of-truth
- 119/119 hook tests pass, 22/22 doc-consistency tests pass

Doc refs:
- CHANGELOG.md:120+140 and ROADMAP.md:134 annotated as superseded by #217
- Live docs (SDLC.md, CLAUDE_CODE_SDLC_WIZARD.md) already say max preferred

Codex cross-model review:
- Round 1: 7/10 NOT CERTIFIED (dupe nudge + stale doc refs)
- Round 2: 8/10 NOT CERTIFIED (one stale line missed at CHANGELOG.md:120)
- Round 3: 10/10 CERTIFIED
BaseInfinity added a commit that referenced this pull request May 5, 2026
* release: v1.37.0

Bundles two Codex-certified PRs:

- PR #235 (ROADMAP #231 Phase 1): delete monthly-research.yml — 519 lines +
  4 claude-code-action steps removed, zero merged artifacts in 30d, $11-23/mo
  API burn eliminated. Stubbed 17 test_monthly_* assertions (#231 Phase 1
  pattern), marked 5 live-doc sections REMOVED/historical. Codex 3-round: 9/10.

- PR #236 (ROADMAP #217): loud WARNING below xhigh effort — max preferred,
  xhigh floor, single source of truth. Dupe effort check removed from
  instructions-loaded-check.sh. 2 TDD tests + 1 regression test. Codex 3-round: 10/10.

Version parity:
- package.json, SDLC.md metadata + table, CLAUDE_CODE_SDLC_WIZARD.md (2 refs),
  .claude-plugin/plugin.json, .claude-plugin/marketplace.json → 1.37.0
- skills/update/SKILL.md Step 3 example refreshed
- CHANGELOG entry "[1.37.0] - 2026-04-24"

ROADMAP:
- #232: /update-wizard should mimic 'claude update' UX
- #233: mixed-mode coder+reviewer tier (Sonnet coder + Opus reviewer for
  simple repos, inspired by codex-sdlc-wizard)
- #234: GitHub About populated (description, homepage, 8 topics)

Release review (Codex round 1 → 2):
- REL-001 fixed: commit now exists on release branch (was empty)
- REL-002 fixed: '2 claude-code-action blocks' corrected to '4 steps'
- REL-003 fixed: .reviews/handoff.json + untracked .claude/hooks excluded

* release(v1.37.0): fix CHANGELOG line 26 count (2 → 4 claude-code-action steps)

Codex round-2 recheck caught that the 'Removed' section bullet still said
'2 API blocks' — line 11 was fixed, line 26 was not. Align with reality:
pre-delete workflow had 4 uses: anthropics/claude-code-action@v1 steps.
BaseInfinity added a commit that referenced this pull request May 5, 2026
BaseInfinity added a commit that referenced this pull request May 5, 2026
* bloat: BASELINE block fires once per CC session (v1.69.0)

hooks/sdlc-prompt-check.sh emitted a ~250-token static SDLC BASELINE
block on every UserPromptSubmit. After the SDLC skill auto-invokes,
that block is duplicate context — ~12K tokens/session wasted for any
user with >3 prompts.

Now gated on a per-session_id sentinel under
\$SDLC_WIZARD_CACHE_DIR/baseline-shown-<id>, atomic-claimed via subshell
'set -C' (noclobber) so N parallel fires emit exactly once. Pruned at
7d. SETUP-not-complete + EFFORT-bump warnings still fire every prompt.
No-session_id stdin keeps current emit-every-fire behavior (legacy CC
+ direct shell tests).

Codex round 1 caught two P1s, both fixed: (a) concurrency race in
naive 'check then write-after-emit' pattern; (b) session_id extraction
was jq-coupled — now uses grep+sed so the gate works without jq.
Round 2 CERTIFIED 9/10. Regression tests: 50-parallel + restricted-
PATH-no-jq.

Discovered during ROADMAP #236 functional-bloat audit. Audit method:
measure cost x frequency, judge value — not blind delete-and-see.
Other hooks audited (model-effort-check, precompact-seam-check,
token-spike-check) earned their keep — silent at healthy state.

* ci: list test-baseline-fires-once.sh in CONTRIBUTING.md

test-workflow-triggers.sh asserts CONTRIBUTING.md lists every test
script that CI runs. Adding the new test was missed in the v1.69.0
commit.
BaseInfinity added a commit that referenced this pull request May 5, 2026
hooks/tdd-pretool-check.sh emitted a ~50-token JSON nudge ('TDD CHECK:
Are you writing IMPLEMENTATION before a FAILING TEST?') on every
Write/Edit/MultiEdit touching src/**. After the SDLC skill auto-invokes
(which already covers TDD RED/GREEN), the per-Edit nudge is duplicate
context. Typical SDLC session has 10-30 src Edits = ~0.5-1.5K wasted
tokens.

Same atomic-noclobber sentinel pattern proven in v1.69.0 (BASELINE gate),
applied to the TDD CHECK output. New sentinel at \$SDLC_WIZARD_CACHE_DIR/
tdd-shown-<session_id>. Non-src/ files still produce zero output and
crucially DO NOT consume the sentinel slot (Test 6).

Codex round 1 caught one P1 (new test file untracked at review time);
fixed by staging before round 2. Round 2 CERTIFIED 9/10.

ROADMAP #236 phase 2. Combined v1.69.0 + v1.70.0 saves ~13.5K tokens
on a 50-prompt + 20-Edit session.
BaseInfinity added a commit that referenced this pull request May 5, 2026
skills/sdlc/SKILL.md Cross-Model Review section condensed from ~70 lines
to ~20 lines. Saves ~427 tokens per SDLC skill auto-invoke (4995 → 4568
tokens). The skill auto-loads on virtually every productive
implement/fix/refactor task, so this is real per-session cost.

What stayed: decision-making (when to run/skip, prereqs), 4-step protocol
summary (preflight → handoff → reviewer → dialogue), required JSON keys
including the test-asserted '"mission"', '"success"', '"failure"',
'"verification_checklist"', '"pr_number":' (PreCompact self-heal opt-in
#209), convergence rule, ### Release Review Focus subsection with
Version parity, multi-reviewer/non-code-domain one-liner.

What moved to wizard doc canonical: full handoff JSON example, full
codex command example. New subsections added in
CLAUDE_CODE_SDLC_WIZARD.md → Cross-Model Review Loop:
#### Anti-patterns, #### Multiple reviewers, #### Non-code domains.
The SKILL.md pointer now reaches all dropped content.

Codex review: round 1 caught 3 P0 test-self-update.sh failures (4/10);
round 2 caught 1 more P0 in test-hooks.sh asserting '"pr_number":' with
colon, not bare quotes (6/10); round 3 CERTIFIED 10/10.

ROADMAP #236 phase 3. Combined v1.69 + v1.70 + v1.71 saves ~14K
tokens/session for typical workloads.
BaseInfinity added a commit that referenced this pull request May 5, 2026
85 lines, 0 references anywhere in the repo (no test, workflow, doc, or
other script invokes it). Sat ~3 months on ROADMAP Back Burner with
explicit gate 'Research if users care before shipping' — no demand
signal materialized. Not in package.json files: list, so never shipped
to npm consumers. Pure repo dead weight.

Discovered via #236 method: for each scripts/*.sh, count refs in *.sh,
*.yml, *.json, *.md, *.py. Threshold 0 = orphan. Six scripts inventoried;
one orphan found.

ROADMAP #236 marked phase-partial DONE: 3 token-amplifier fixes
(v1.69.0/1.70.0/1.71.0) + this orphan delete. Categories not exercised
this round (tests redundancy, CLI templates, ROADMAP archive) re-trigger
on maintainer call-out.

Reversible: git history retains the script if demand surfaces.
BaseInfinity added a commit that referenced this pull request May 5, 2026
…h) (#320)

scripts/audit-session-load.sh scanned only root skills/*/SKILL.md.
But cli/init.js:32-35 copies SKILL.md files to .claude/skills/<name>/
SKILL.md at install time, so the audit was silently invisible to bloat
in real consumer projects. Mirrors the existing .claude/hooks/ pattern.

Caught by Codex strategic review on the bloat-sweep continuation
question — it pointed at the asymmetry between hooks (dual-path scanned)
and skills (root-only). Implementation plan went through a second Codex
round for sign-off; ships with all 4 deltas applied:
- inventory comment block updated to mention .claude/skills/
- new test uses existing make_temp + make_file_with_size helpers
- new test wired into the explicit-call runner block
- Python predicate uses path.endswith() not substring match

Will double-count in dogfood (where .claude/skills/ symlinks back to
skills/), same trade-off as the existing hooks scan accepts.

No version bump: scripts/ + tests/ are not in package.json files list,
so this never reaches npm consumers.
BaseInfinity added a commit that referenced this pull request May 6, 2026
The .reviews/ tree is gitignored but several artifacts were committed
before the gitignore line landed. They're handoff/preflight/round-N
review files for now-merged PRs and hold no ongoing reference value.

plans/CATCHUP.md captured the v2.1.15 → v2.1.81 catch-up in March 2026 —
historical context lives in CHANGELOG (v1.8.0 entry at line 1415); the
plan doc is dead weight.

Kept everything that's still load-bearing:
- .reviews/research-95/97/99/206/235.md (cited from ROADMAP rows)
- .reviews/experiment-tracking.md (asserted by tests/test-workflow-triggers.sh:2189)
- plans/AUTO_SELF_UPDATE.md (still annotated with #231 phase notes)

Tests: hooks 156/156, cli 88/88, workflow 176/176, docs 35/35 — all
green post-deletion (no test referenced any deleted file).
BaseInfinity added a commit that referenced this pull request May 6, 2026
Two PRs roll up:

1. PR #330 — `hooks/precompact-seam-check.sh` no longer false-positive
   HOLDs `/compact` on stale `.git/REBASE_HEAD` (left behind after a
   clean rebase). Authoritative signal is `rebase-{merge,apply}/` dir;
   `REBASE_HEAD` is just a ref to the stopped/replayed commit. Hit
   live 2026-05-05; required `rm .git/REBASE_HEAD` workaround. Codex
   round 1 CERTIFIED 9/10 (one P2 comment-accuracy nit fixed).

2. PR #331 — gc(#236): -460 LOC across 15 stale review/plan artifacts
   committed before `.reviews/` made it into `.gitignore`. All for
   now-merged work; load-bearing files (research-*.md, experiment-
   tracking.md, AUTO_SELF_UPDATE.md) preserved.

Version bumps: package.json, plugin.json, marketplace.json, SDLC.md,
CLAUDE_CODE_SDLC_WIZARD.md (×2), skills/update/SKILL.md.

skills/update/SKILL.md trimmed (consolidated 1.69.0–1.71.0 token-bloat
phases into a single line) to keep the file under the 5K-token dogfood
threshold after adding the 1.73.0 entry.

Tests: cli 88/88, hooks 156/156, self-update 76/76, docs 35/35,
audit 10/10. audit-session-load reports 0 trim candidates.
BaseInfinity added a commit that referenced this pull request May 11, 2026
`.reviews/response.json` is per-cycle review scratch documented in
the SDLC skill's cross-model review protocol — the file the next round
writes its FIXED/DISPUTED/ACCEPTED responses to. The committed copy
was leftover from gc-benchmark-workflows-001 (PR #324, merged).

`.reviews/` is gitignored at directory level; this file slipped through
because it was committed before the gitignore was added.

No live consumer: the only test referencing the filename
(tests/test-self-update.sh:400) just asserts the wizard doc describes
the protocol, not that the file exists.

Tests: self-update + doc-consistency green post-deletion.
BaseInfinity added a commit that referenced this pull request May 11, 2026
Two PRs roll up:

1. PR #330 — `hooks/precompact-seam-check.sh` no longer false-positive
   HOLDs `/compact` on stale `.git/REBASE_HEAD` (left behind after a
   clean rebase). Authoritative signal is `rebase-{merge,apply}/` dir;
   `REBASE_HEAD` is just a ref to the stopped/replayed commit. Hit
   live 2026-05-05; required `rm .git/REBASE_HEAD` workaround. Codex
   round 1 CERTIFIED 9/10 (one P2 comment-accuracy nit fixed).

2. PR #331 — gc(#236): -460 LOC across 15 stale review/plan artifacts
   committed before `.reviews/` made it into `.gitignore`. All for
   now-merged work; load-bearing files (research-*.md, experiment-
   tracking.md, AUTO_SELF_UPDATE.md) preserved.

Version bumps: package.json, plugin.json, marketplace.json, SDLC.md,
CLAUDE_CODE_SDLC_WIZARD.md (×2), skills/update/SKILL.md.

skills/update/SKILL.md trimmed (consolidated 1.69.0–1.71.0 token-bloat
phases into a single line) to keep the file under the 5K-token dogfood
threshold after adding the 1.73.0 entry.

Tests: cli 88/88, hooks 156/156, self-update 76/76, docs 35/35,
audit 10/10. audit-session-load reports 0 trim candidates.
BaseInfinity added a commit that referenced this pull request May 11, 2026
`.reviews/response.json` is per-cycle review scratch documented in
the SDLC skill's cross-model review protocol — the file the next round
writes its FIXED/DISPUTED/ACCEPTED responses to. The committed copy
was leftover from gc-benchmark-workflows-001 (PR #324, merged).

`.reviews/` is gitignored at directory level; this file slipped through
because it was committed before the gitignore was added.

No live consumer: the only test referencing the filename
(tests/test-self-update.sh:400) just asserts the wizard doc describes
the protocol, not that the file exists.

Tests: self-update + doc-consistency green post-deletion.
BaseInfinity added a commit that referenced this pull request May 11, 2026
Rows #78, #79, #80, #215, #217 each say in their own cell text:

  Stale duplicate of <canonical row>; <work> shipped. v1.62.0 paperwork close.

The canonical entries live earlier in the file. Keeping the duplicates
just inflates the unprioritized table without adding info — every
field reduces to "see <other row>." Removing them shrinks the
unprioritized table by 5 rows and removes the "wait, is this still
open?" friction when scanning.

doc-consistency tests 35/35 still green (no test asserts row count).
BaseInfinity added a commit that referenced this pull request May 11, 2026
The .reviews/ tree is gitignored but several artifacts were committed
before the gitignore line landed. They're handoff/preflight/round-N
review files for now-merged PRs and hold no ongoing reference value.

plans/CATCHUP.md captured the v2.1.15 → v2.1.81 catch-up in March 2026 —
historical context lives in CHANGELOG (v1.8.0 entry at line 1415); the
plan doc is dead weight.

Kept everything that's still load-bearing:
- .reviews/research-95/97/99/206/235.md (cited from ROADMAP rows)
- .reviews/experiment-tracking.md (asserted by tests/test-workflow-triggers.sh:2189)
- plans/AUTO_SELF_UPDATE.md (still annotated with #231 phase notes)

Tests: hooks 156/156, cli 88/88, workflow 176/176, docs 35/35 — all
green post-deletion (no test referenced any deleted file).
BaseInfinity added a commit that referenced this pull request May 11, 2026
85 lines, 0 references anywhere in the repo (no test, workflow, doc, or
other script invokes it). Sat ~3 months on ROADMAP Back Burner with
explicit gate 'Research if users care before shipping' — no demand
signal materialized. Not in package.json files: list, so never shipped
to npm consumers. Pure repo dead weight.

Discovered via #236 method: for each scripts/*.sh, count refs in *.sh,
*.yml, *.json, *.md, *.py. Threshold 0 = orphan. Six scripts inventoried;
one orphan found.

ROADMAP #236 marked phase-partial DONE: 3 token-amplifier fixes
(v1.69.0/1.70.0/1.71.0) + this orphan delete. Categories not exercised
this round (tests redundancy, CLI templates, ROADMAP archive) re-trigger
on maintainer call-out.

Reversible: git history retains the script if demand surfaces.
BaseInfinity added a commit that referenced this pull request May 11, 2026
scripts/audit-session-load.sh scanned only root skills/*/SKILL.md.
But cli/init.js:32-35 copies SKILL.md files to .claude/skills/<name>/
SKILL.md at install time, so the audit was silently invisible to bloat
in real consumer projects. Mirrors the existing .claude/hooks/ pattern.

Caught by Codex strategic review on the bloat-sweep continuation
question — it pointed at the asymmetry between hooks (dual-path scanned)
and skills (root-only). Implementation plan went through a second Codex
round for sign-off; ships with all 4 deltas applied:
- inventory comment block updated to mention .claude/skills/
- new test uses existing make_temp + make_file_with_size helpers
- new test wired into the explicit-call runner block
- Python predicate uses path.endswith() not substring match

Will double-count in dogfood (where .claude/skills/ symlinks back to
skills/), same trade-off as the existing hooks scan accepts.

No version bump: scripts/ + tests/ are not in package.json files list,
so this never reaches npm consumers.
BaseInfinity added a commit that referenced this pull request May 24, 2026
Adds a tight /goal section to skills/sdlc/SKILL.md covering CC's native
goal-mode primitive (v2.1.139+, requires v2.1.143+ for the subagent-race
fix). Composes with existing wizard hooks rather than replacing them.

Per the corrected research at .reviews/347-goal-mode-research-CORRECTED.md,
the wrapper carries 5 load-bearing elements (each enforced by the new
quality test):

1. Pre-flight checklist — workspace trusted, hooks not disabled at any
   settings layer, CC version floor.
2. Condition-writing guidance treating the /goal arg as an SDLC contract
   (measurable end state + check + constraints + hard turn/time bound).
3. Hook composition note — UserPromptSubmit/SessionStart/PreCompact fire
   normally per turn, so sdlc-prompt-check.sh + precompact-seam-check.sh
   keep gating.
4. Resume caveat — --resume restores the condition but resets counters.
5. Anti-pattern callout — the evaluator can't call tools, so /goal
   doesn't work for 'doneness' that lives off-transcript.

Quality test (tests/test-doc-consistency.sh) greps for each of the 5
elements by keyword; existence-only would let drift quietly remove the
safety guidance.

Section trimmed from ~1782 → ~1100 chars to keep the skill within budget
(was 4995 tokens pre-edit, now 5178 — slightly over the #236 5K trim
threshold but within the 25K combined-skill load budget; new content is
load-bearing and justified). 40/40 doc-consistency tests pass.

No new skill, no new hook, no template. Per Prove-It Gate absorption
principle: extend the existing /sdlc skill rather than building a
/goal-start /goal-handoff /goal-stop trio.
BaseInfinity added a commit that referenced this pull request May 24, 2026
CI's tests/test-audit-session-load.sh enforces the #236 5K-token soft
threshold as a hard fail. Initial /goal section was 700 chars (skill
at 5018 tokens — 18 over). Tightened to 488 chars (skill at 4977
tokens — 23 under) while keeping all 5 quality-test keywords.

What stays (verified by test_sdlc_skill_has_goal_wrapper):
- v2.1.143+ version floor (the only version that matters for safe use)
- 'trusted workspace' pre-flight
- 'disableAllHooks'/'allowManagedHooksOnly' pre-flight
- 'hard turn/time bound' guidance + 'stop after' example
- 'cannot call tools' anti-pattern callout
- '--resume resets counters' caveat

What dropped (informational, not load-bearing):
- v2.1.139 introduction marker (subsumed by v2.1.143+ floor)
- 'survives --resume not /clear' (the counter-reset note covers it)
- 'Wizard hooks fire normally per turn' (implicit composition)
- 'internally a Stop hook' parenthetical (still mentioned briefly)
- Verbose example with multiple AND clauses

The aggressive tightening keeps the safety guidance load-bearing while
respecting the bloat budget the maintainer set in #236. Audit now
returns OK for skills/sdlc/SKILL.md (4977/5000 tokens).
BaseInfinity added a commit that referenced this pull request May 24, 2026
closes #347) (#351)

* docs(cc-features): bump recommended baseline + document /goal, /code-review --comment, /usage, /context all

CC v2.1.139 → v2.1.150 shipped 4 wizard-relevant features that the
broken auto-PR pipeline (gutted in #231 Phase 3d, see #350) failed to
surface:

- Native /goal command (v2.1.139) — set completion condition, evaluator
  pass per turn until met. Survives --resume, not /clear. No disk
  writes. Subagent race fixed in v2.1.143.
- /code-review --comment flag (v2.1.147, renamed from /simplify) —
  posts findings as inline GitHub PR comments. Streamlines our CI
  shepherd flow which currently uses manual gh pr review comments.
- /usage per-category breakdown (v2.1.149) — skills/subagents/plugins/
  MCP cost split. Complements scripts/audit-session-load.sh (#236).
- /context all per-skill per-model token estimates (v2.1.139) — same.

SDLC.md splits the existing Claude Code Baseline row into Minimum
(unchanged, v2.1.111+/v2.1.105+) and Recommended (v2.1.150+) so
consumers know what each version unlocks without breaking back-compat.

CLAUDE_CODE_SDLC_WIZARD.md adds 4 rows to the Complementary Native
Skills table with usage guidance and the same caveats we apply to
/insights (qualitative-only, evaluator-can't-call-tools for /goal).

Full inventory + triage of all 32 CC versions since v2.1.118 lives at
.reviews/cc-feature-inventory-2026-05-24.md (gitignored). HIGH/MEDIUM/
LOW relevance breakdown + recommended adoption sequence for the
follow-up PRs (hook $CLAUDE_EFFORT cleanup, #350 cadence workflow
build, #347 /goal /sdlc skill wrapper).

Zero code changes — pure documentation update so consumers benefit
immediately even before the deeper hook/skill integrations land.

* feat(sdlc): add /goal wrapper to /sdlc skill (closes #347)

Adds a tight /goal section to skills/sdlc/SKILL.md covering CC's native
goal-mode primitive (v2.1.139+, requires v2.1.143+ for the subagent-race
fix). Composes with existing wizard hooks rather than replacing them.

Per the corrected research at .reviews/347-goal-mode-research-CORRECTED.md,
the wrapper carries 5 load-bearing elements (each enforced by the new
quality test):

1. Pre-flight checklist — workspace trusted, hooks not disabled at any
   settings layer, CC version floor.
2. Condition-writing guidance treating the /goal arg as an SDLC contract
   (measurable end state + check + constraints + hard turn/time bound).
3. Hook composition note — UserPromptSubmit/SessionStart/PreCompact fire
   normally per turn, so sdlc-prompt-check.sh + precompact-seam-check.sh
   keep gating.
4. Resume caveat — --resume restores the condition but resets counters.
5. Anti-pattern callout — the evaluator can't call tools, so /goal
   doesn't work for 'doneness' that lives off-transcript.

Quality test (tests/test-doc-consistency.sh) greps for each of the 5
elements by keyword; existence-only would let drift quietly remove the
safety guidance.

Section trimmed from ~1782 → ~1100 chars to keep the skill within budget
(was 4995 tokens pre-edit, now 5178 — slightly over the #236 5K trim
threshold but within the 25K combined-skill load budget; new content is
load-bearing and justified). 40/40 doc-consistency tests pass.

No new skill, no new hook, no template. Per Prove-It Gate absorption
principle: extend the existing /sdlc skill rather than building a
/goal-start /goal-handoff /goal-stop trio.

* fix(sdlc): tighten /goal section to stay under #236 5K-token cap

CI's tests/test-audit-session-load.sh enforces the #236 5K-token soft
threshold as a hard fail. Initial /goal section was 700 chars (skill
at 5018 tokens — 18 over). Tightened to 488 chars (skill at 4977
tokens — 23 under) while keeping all 5 quality-test keywords.

What stays (verified by test_sdlc_skill_has_goal_wrapper):
- v2.1.143+ version floor (the only version that matters for safe use)
- 'trusted workspace' pre-flight
- 'disableAllHooks'/'allowManagedHooksOnly' pre-flight
- 'hard turn/time bound' guidance + 'stop after' example
- 'cannot call tools' anti-pattern callout
- '--resume resets counters' caveat

What dropped (informational, not load-bearing):
- v2.1.139 introduction marker (subsumed by v2.1.143+ floor)
- 'survives --resume not /clear' (the counter-reset note covers it)
- 'Wizard hooks fire normally per turn' (implicit composition)
- 'internally a Stop hook' parenthetical (still mentioned briefly)
- Verbose example with multiple AND clauses

The aggressive tightening keeps the safety guidance load-bearing while
respecting the bloat budget the maintainer set in #236. Audit now
returns OK for skills/sdlc/SKILL.md (4977/5000 tokens).
BaseInfinity added a commit that referenced this pull request May 24, 2026
…entries to stay under #236 5K cap

CI caught stale 'Latest: 1.75.1' example in skills/update/SKILL.md
which is grep-tested. Added new [1.76.0] entry summarizing this release.
Tightened the [1.74.0] and [1.73.0] entries to compensate so the skill
stays under the #236 5K-token bloat threshold (now 4989/5000).
BaseInfinity added a commit that referenced this pull request May 24, 2026
…MAP cleanup (#352)

* release: v1.76.0 — native /goal wrapper + CC v2.1.150 feature adoption + ROADMAP cleanup

Versioned cut of 5 commits since v1.75.1. Headline: native /goal wrapper
in /sdlc skill closes #347; full CC v2.1.119 → v2.1.150 feature inventory
done with HIGH-relevance docs adopted; ROADMAP cleaned with new
demand-signal-first entry gate (4 excise, 4 kill); #347 corrected from
wrong 'no native primitive' research; #350 added to capture the cadence
gap that let /goal slip 5 weeks.

Full notes in CHANGELOG.md [1.76.0].

Trusted Publishing (OIDC) is the release channel — release.yml fires on
tag push, npm publish runs as the workflow identity, no token to rotate.

* release: v1.76.0 — also bump SDLC.md version metadata in wizard doc template

CI caught a missed version-bump in the SDLC.md example template inside
CLAUDE_CODE_SDLC_WIZARD.md (line 2984). tests/test-hooks.sh's
test_sdlc_version_matches_wizard greps both files for the meta-comment
and asserts they agree; the v1.76.0 cut updated SDLC.md itself but
not the wizard doc's embedded template.

Self-review lesson: when version-bumping, grep for ALL SDLC Wizard
Version meta-comments across the repo, not just the canonical SDLC.md.

* release: v1.76.0 — bump update skill changelog example + tighten old entries to stay under #236 5K cap

CI caught stale 'Latest: 1.75.1' example in skills/update/SKILL.md
which is grep-tested. Added new [1.76.0] entry summarizing this release.
Tightened the [1.74.0] and [1.73.0] entries to compensate so the skill
stays under the #236 5K-token bloat threshold (now 4989/5000).
BaseInfinity added a commit that referenced this pull request May 25, 2026
…DLC binding (PR-D)

Native /goal is now table-stakes across CC (v2.1.139+), Codex CLI, and
likely others. Without SDLC discipline baked into the goal CONDITION
itself, the Haiku evaluator rubber-stamps 'did the agent flail for 20
turns' instead of 'is the goal met correctly.'

Two new load-bearing gates in skills/sdlc/SKILL.md ## Long-Running
Goals section:

1. **Confidence gate — NEVER invoke below HIGH 95%.** Mirrors existing
   Confidence Check (plan first if below). Below 95% the evaluator
   has no anchor for 'is this correct'; only for 'did the agent stop.'

2. **DLC binding — condition MUST name the active DLC** (/sdlc for
   code, /gdlc for games, /ldlc for legal, etc.). Anchors the
   evaluator on 'doing it right,' not just 'doing it.' Example:
   /goal 'tests pass + clean tree following /sdlc, stop after 20 turns'.

Quality test extended (tests/test-doc-consistency.sh::test_sdlc_skill_has_goal_wrapper):
adds keyword greps for '95% confidence' / 'HIGH 95%' / 'confidence
gate' AND 'DLC binding' / 'name the DLC' / 'condition MUST name'.

Cross-cutting compensating trims to stay under #236 5K-token cap
(skill at 4989/5000):
- /goal section condensed example wording ('tests pass + clean tree'
  vs 'npm test=0 AND git clean')
- Cross-Model Review's Multi-reviewer paragraph collapsed into one line

40/40 doc-consistency green, 10/10 audit green.
BaseInfinity added a commit that referenced this pull request May 25, 2026
…DLC binding (PR-D) (#355)

Native /goal is now table-stakes across CC (v2.1.139+), Codex CLI, and
likely others. Without SDLC discipline baked into the goal CONDITION
itself, the Haiku evaluator rubber-stamps 'did the agent flail for 20
turns' instead of 'is the goal met correctly.'

Two new load-bearing gates in skills/sdlc/SKILL.md ## Long-Running
Goals section:

1. **Confidence gate — NEVER invoke below HIGH 95%.** Mirrors existing
   Confidence Check (plan first if below). Below 95% the evaluator
   has no anchor for 'is this correct'; only for 'did the agent stop.'

2. **DLC binding — condition MUST name the active DLC** (/sdlc for
   code, /gdlc for games, /ldlc for legal, etc.). Anchors the
   evaluator on 'doing it right,' not just 'doing it.' Example:
   /goal 'tests pass + clean tree following /sdlc, stop after 20 turns'.

Quality test extended (tests/test-doc-consistency.sh::test_sdlc_skill_has_goal_wrapper):
adds keyword greps for '95% confidence' / 'HIGH 95%' / 'confidence
gate' AND 'DLC binding' / 'name the DLC' / 'condition MUST name'.

Cross-cutting compensating trims to stay under #236 5K-token cap
(skill at 4989/5000):
- /goal section condensed example wording ('tests pass + clean tree'
  vs 'npm test=0 AND git clean')
- Cross-Model Review's Multi-reviewer paragraph collapsed into one line

40/40 doc-consistency green, 10/10 audit green.
BaseInfinity added a commit that referenced this pull request Jun 1, 2026
PR #355 (v1.77.0) added skill-text guidance that `/goal` must state HIGH 95%
confidence and bind to a DLC (`/sdlc`, `/gdlc`, `/ldlc`) before firing. The
guidance worked at the meta level but had no runtime enforcement — exactly
the failure mode the discipline gate documented (text-only guidance doesn't
survive the failure mode it's trying to prevent).

This adds `hooks/goal-confidence-check.sh` as a UserPromptSubmit hook that:

1. Matches `/goal <condition>` prompts (silent on `/goal` status + `/goal clear`).
2. Reads `transcript_path` from hook input (verified available on UserPromptSubmit
   per Anthropic hook docs at code.claude.com/docs/en/hooks), walks the JSONL
   to find the last assistant text message, and scans for HIGH-95% confidence
   patterns (`HIGH (95%`, `Confidence: HIGH`, `HIGH 95%`, etc.).
3. Greps the goal condition for a DLC binding (`/[a-z]+dlc`).
4. Emits LOUD warnings on either gap — non-blocking soft nudge (exit 0),
   same pattern as `model-effort-check.sh`.

Registered in both channels: `cli/templates/settings.json` (npm/CLI) and
`hooks/hooks.json` (plugin via ${CLAUDE_PLUGIN_ROOT}). Dedupes via
`_find-sdlc-root.sh` helper so dual installs don't double-fire.

Bundled paperwork:

- `ROADMAP.md` adds the missing `## Research Parking Lot` section that the
  Demand-Signal-First entry gate references but was never created. Includes
  the maintenance rule (prune expired rows during quarterly triage).
- `skills/sdlc/SKILL.md` adds a one-line enforcement cross-reference in the
  Long-Running Goals section. Trimmed adjacent prose to stay under the 5K
  token cap (#236).

#359 triage (companion close):

Of the 10 API changelog entries since 2026-04-16: 8 are clearly no-op for
the wizard (MCP tunnels, SEC web search data, cache diagnostics, fast mode,
AWS hosting, multiagent sessions, rate limits API, managed-agent memory —
all orthogonal to SDLC enforcement). 2 are deprecations — verified zero
usage in this repo: `context-1m-2025-08-07` (Sonnet 4.5/4 1M beta retired
2026-04-30; we use the separate `opus[1m]` alias) and `claude-3-haiku-
20240307` (Haiku 3 retired 2026-04-20; we never used it). #359 will be
closed with the triage comment after merge.

Verified locally: test-hooks 160/160 (4 new #360 tests + 156 existing),
test-audit-session-load 10/10, test-cli 91/91, test-plugin all green,
test-doc-consistency 41/41, test-self-update 153/153, test-setup-path 83/83.
BaseInfinity added a commit that referenced this pull request Jul 7, 2026
…440)

Fable-led audit + Prove-It (TDD mutation-tested) pass across the three
categories ROADMAP #236 flagged as not yet exercised:

(b) hook noise: fixed codex-review-stop-check.sh delivering its Stop-hook
nudge via stderr (invisible on exit 0 per CC hook-delivery semantics);
fixed tdd-pretool-check.sh's hardcoded /src/ pattern missing this repo's
own hooks/cli/.github/workflows source dirs via a new SDLC_TDD_SRC_PATTERN
env override (keeps the CLI-distributed template generic); deleted
goal-confidence-check.sh entirely (no cited incident, unproven value);
trimmed precompact-seam-check.sh 256->101 lines (removed the untested
.reviews/handoff.json self-heal branch); silenced model-effort-check.sh's
unset-effort nagging; removed sdlc-prompt-check.sh's unfired #195
effort-bump detector; added 24h-cached CC-version checking to
instructions-loaded-check.sh.

(c) test redundancy: consolidated overlapping assertions across 10 test
files; deleted tests/test-degradation-detection.sh outright (428 lines,
fully superseded, 5 tests relocated into test-doc-consistency.sh); found
and fixed a latent bug as a byproduct — test_ci_max_turns_sufficient in
test-workflow-triggers.sh was defined twice, and the original (shadowed)
definition was vacuous, always passing regardless of ci.yml content.

(f) ROADMAP archive cut: split ROADMAP.md (326 lines / 182 rows) into a
trimmed active table plus new ROADMAP_ARCHIVE.md holding 85 fully-resolved
rows and 5 fully-archived release-history sections; added 3 row-completeness
regression tests to test-doc-consistency.sh (mutation-verified) proving no
row was silently dropped or duplicated.

Cross-model reviewed (Codex xhigh, review_id 236-bloat-hunt-bcf-2026-07-06):
round 1 found a real gate bypass in codex-gate-check.sh (a quoted flag value
containing a space, e.g. git -c user.name="A B" commit, broke the
git/commit structural match) — fixed and mutation-verified; round 2
CERTIFIED 10/10. All 58 test files pass.
BaseInfinity added a commit that referenced this pull request Jul 26, 2026
Maintainer asked why context was at 93% and whether quality degrades. It
does, and this session's last 15% is the evidence: a '41/41 passing' where
10 tests ran after the exit block, a newline hole introduced while fixing a
substring hole, a 10-minute spin from a forgotten sandbox flag, and #479 —
where the correct diagnosis sat in a committed ROADMAP row hours before the
wrong fix shipped.

Distinct from #476 (what to load) and #220/#236 (file sizes). This is
session hygiene: how a driver notices its own degradation. Scope says do
NOT ship a threshold number without a source, and favors symptom-based
self-checks over a percentage — plus a note that a documented rule alone
failed to change behavior twice tonight.
BaseInfinity added a commit that referenced this pull request Jul 27, 2026
… ladder (#472)

* release: v1.88.0 — Opus 5 default driver, autocompact fix, escalation ladder

Ships 8 consumer-path commits stranded since v1.87.0 (2026-07-14).

**Opus 5 becomes Setup A** at `xhigh`, requires Claude Code v2.1.219+.
Sonnet 5 moves to Setup B (`medium`) for simple/one-off work. Flagged as a
trial — strong on paper, unproven by field data.

**Autocompact fix, consumer-visible:** skills/setup/SKILL.md was writing
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE: "30" into consumer .claude/settings.json
for Setup A. That figure came from the retired opus[1m] opt-in and was
never re-derived. Per raw env-vars docs the variable only lowers the
trigger where compaction is PROACTIVE, and a local Opus session is the
docs' own counter-example. Setup A now writes no override. Corrected in 6
wizard-doc sites plus the writer, worded as a documentation gap rather
than a runtime claim. Setup B's 75 is unchanged and still correct.

**Escalation ladder:** both SKILL.md copies and the wizard doc said
"ASK USER" for LOW/FAILED-2x/CONFUSED, skipping model escalation entirely.
Now Fable → Codex xhigh → human, with the human reserved for priority,
risk, scope, spend, and irreversible calls. Confidence is not
authorization. 10 more direct-to-human routes removed including the CI
flow diagram and the generated CLAUDE.md template. The shipped runtime
hook was emitting the OLD ladder on every consumer session — fixed and
regression-tested.

Also: SDLC.md gains a 9-lesson post-mortem, and ROADMAP #468-479.

Version bumped across all 9 tracked locations per SDLC.md's own
version-bump checklist (the narrow greps have documented blind spots).
Full suite: 61 files, 0 failing.

* docs(roadmap): #480 — session-degradation hygiene is undocumented

Maintainer asked why context was at 93% and whether quality degrades. It
does, and this session's last 15% is the evidence: a '41/41 passing' where
10 tests ran after the exit block, a newline hole introduced while fixing a
substring hole, a 10-minute spin from a forgotten sandbox flag, and #479 —
where the correct diagnosis sat in a committed ROADMAP row hours before the
wrong fix shipped.

Distinct from #476 (what to load) and #220/#236 (file sizes). This is
session hygiene: how a driver notices its own degradation. Scope says do
NOT ship a threshold number without a source, and favors symptom-based
self-checks over a percentage — plus a note that a documented rule alone
failed to change behavior twice tonight.
BaseInfinity added a commit that referenced this pull request Aug 12, 2026
Maintainer asked why context was at 93% and whether quality degrades. It
does, and this session's last 15% is the evidence: a '41/41 passing' where
10 tests ran after the exit block, a newline hole introduced while fixing a
substring hole, a 10-minute spin from a forgotten sandbox flag, and #479 —
where the correct diagnosis sat in a committed ROADMAP row hours before the
wrong fix shipped.

Distinct from #476 (what to load) and #220/#236 (file sizes). This is
session hygiene: how a driver notices its own degradation. Scope says do
NOT ship a threshold number without a source, and favors symptom-based
self-checks over a percentage — plus a note that a documented rule alone
failed to change behavior twice tonight.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant