Skip to content

[feature] /goal should enforce HIGH-95% confidence gate (not just document it) #360

@BaseInfinity

Description

@BaseInfinity

Feedback Type

Feature request — strengthen existing guidance to actual enforcement

Description

PR #355 (v1.77.0) added skill-text guidance to skills/sdlc/SKILL.md:

Confidence gate — NEVER invoke below HIGH 95%; below that the evaluator rubber-stamps flailing as progress.
DLC binding — condition MUST name the DLC (/sdlc, /gdlc, /ldlc, etc.) so the evaluator anchors on "doing it right."

This is documentation, not enforcement. Nothing prevents (or even warns) when a user types /goal <condition> without first reaching HIGH 95% confidence — exactly the failure mode the guidance is meant to prevent (Haiku evaluator rubber-stamping flailing).

This mirrors the plan-mode auto-approval gate pattern already in /sdlc (skip plan approval ONLY when confidence ≥ 95% AND task is single-file/trivial). We have that gate for plans. We should have an analogous gate for /goal.

The gap

Layer /effort low /goal low-confidence
Skill-text guidance ✅ (PR #355)
Hook warning hooks/model-effort-check.sh (LOUD warning when below xhigh) ❌ none
Programmatic block ❌ (intentional — soft nudge)

model-effort-check.sh is the proven pattern: SessionStart hook reads settings, emits a LOUD warning when effort < recommended. /goal deserves the same treatment as a per-invocation guard.

Proposed scope

  1. New hook hooks/goal-confidence-check.shUserPromptSubmit matcher on prompts starting with /goal (excluding /goal status and /goal clear).
  2. Detection signal: scan the prior assistant turn in transcript for an explicit confidence statement (HIGH (95%, HIGH 95%, Confidence: HIGH, etc. — same patterns the SDLC scoring rubric already greps for).
  3. If prior turn has HIGH 95%+ confidence stated → silent, exit 0.
  4. If prior turn does NOT → emit LOUD warning block:
    /goal invoked without HIGH-95% confidence statement in prior turn.
    The Haiku evaluator can rubber-stamp flailing as progress.
    Recommendation: cancel with /goal clear, do research first, restate
    confidence as HIGH (≥95%), then re-issue /goal.
    See: skills/sdlc/SKILL.md (Long-Running Goals section)
    
    Non-blocking (exit 0) — same soft-warn pattern as model-effort-check.sh.
  5. DLC-binding co-check: also warn when the /goal condition string does not name a DLC (/sdlc, /gdlc, /ldlc). Both checks in one hook.
  6. Tests (quality, not existence): fixture transcripts where prior turn DID/DID NOT state HIGH 95%; fixture conditions WITH/WITHOUT DLC binding; assert warnings fire/don't fire correctly. Mirror the test structure in tests/test-hooks.sh for model-effort-check.

Alternatives considered

  • Statusline nudge — too easy to ignore.
  • Native CC primitive request — feature-request to Anthropic to bake confidence-gating into /goal itself. Could be filed in parallel but doesn't help wizard users until shipped.
  • Skill-only (status quo) — what we have. Doesn't survive the failure mode it's trying to prevent (LLM ignores documentation under pressure).

Enforcement layer is the missing piece.

Prerequisites / blast radius

  • CC version: requires UserPromptSubmit hook event (already required by sdlc-prompt-check.sh, so no version bump).
  • No id-token / network / package.json changes.
  • Plugin manifest needs the new hook registered.
  • CLI distributes the hook file (8th → 9th distributed hook).

Why now

/goal is new enough (CC v2.1.139, ~mid-May 2026) that wizard users are forming habits NOW. The earlier the gate ships, the less ingrained the "/goal everything" reflex becomes.

Context


Submitted via `/feedback` skill

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions