feat(re-anchor): add scrutinize-dont-coast corrector#838
Conversation
A drift corrector for adversarial self-scrutiny — the general "don't coast on your own recent output" re-look, distinct from the plugin's content-axis correctors. It re-anchors the shared re-anchor / audit / correct-forward loop with two documented deltas: it stops the current trajectory first (the failure mode is over-confident forward momentum), and it remediates *with* the user rather than autonomously. The load-bearing adversarial pass is delegated to a fresh-context (non-fork) subagent blind to the reasoning that produced the output, satisfying the fresh-eyes rule a same-context self-check cannot. An optional focus scopes the pass without suppressing a serious out-of-focus flaw. Negative routing is explicit: pre-implementation plan stress-tests go to /planning:devils-advocate (guarded, degrades to prose), review checkpoints to /review:quality-gate, single-axis flaws to the sibling that owns them. re-anchor 0.4.0 -> 0.5.0 (additive; no new trust surface). Adds SKILL.md + 5-case evals, plugin.json description/keywords, README catalog entry, CHANGELOG. Name: research-backed naming tournament (5 blind fresh-context generators); convergent winner scrutinize-dont-coast (verb-dont-verb family shape, temporally neutral, names action + failure mode). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @kyle-sexton's task in 2m 17s —— View job PR #838 Review —
|
| ID | Case | Verdict |
|---|---|---|
| 1 | Happy path — stop + fresh-context subagent + collaborative remediation | ✓ Core contract |
| 2 | Clean pass — no fabricated finding | ✓ "A clean result is not a failure" |
| 3 | Negative routing — pre-implementation plan → devils-advocate | ✓ Primary negative boundary |
| 4 | Focus scoping — narrows without suppressing out-of-scope flaw | ✓ Focus semantic |
| 5 | Conversation-start posture — no audit when no output exists | ✓ Shared loop's start case |
Coverage gap (non-blocking): The skill's "What this skill does NOT do" section names a fourth routing case — single-axis flaw to the owning sibling (e.g. /re-anchor:do-your-research for an unverified claim). None of the five evals covers this path. Given that the 5-eval set already covers the more decision-sensitive boundaries, this is acceptable, but an eval 6 testing "routes a squarely-research flaw to do-your-research while keeping the general scrutiny" would close the gap.
CHANGELOG.md and README.md
Both are clean additive entries, format-consistent with prior entries. CHANGELOG follows Keep a Changelog 1.1.0. README catalog entry matches the plugin.json description (modulo minor wording). ✓
Security (plugin-acceptance review)
Confirmed from the files:
- Zero hooks, scripts, MCP servers,
userConfigrefs, orbin/entries - Only internal reference:
${CLAUDE_PLUGIN_ROOT}/context/re-anchor-audit-correct.md(plugin-form-safe) - No outward egress — the skill drafts and routes, never files
Accept. ✓
CLAUDE.md alignment
| Rule | Status |
|---|---|
| Repo-agnostic | ✓ No hardcoded paths; ${CLAUDE_PLUGIN_ROOT} only |
| Configurable without editing | ✓ No userConfig required |
| Plugin-form-safe | ✓ No ../ escapes |
| No PII/secrets | ✓ Pure prompts |
| Versioned | ✓ Explicit semver 0.5.0 |
| Security-reviewed | ✓ Documented, clean |
Open Questions (from PR body — need decisions before merge)
1. Collaborative-remediation contract (delta 2)
This is the only skill in the 13-corrector family where step 3 is collaborative rather than autonomous. The departure is well-documented and the rationale is coherent ("the remedy for runaway momentum can't be more unilateral momentum"), but it creates a family inconsistency that a consumer relying on uniform corrector behavior will notice.
The PR correctly flags this as a decision point rather than making it unilaterally. Confirm: is this a documented per-skill exception, or should the shared method doc be updated to allow optional collaborative remediation across the family? The current approach (per-skill documented delta) is the safer choice — it doesn't touch the 12 existing skills.
2. Name: scrutinize-dont-coast vs distrust-your-momentum
The tournament rationale is solid and the verb-dont-verb family shape is a real advantage. distrust-your-momentum names the cause rather than the action, which is the weaker choice at the call site (/re-anchor:scrutinize-dont-coast reads as an imperative instruction; /re-anchor:distrust-your-momentum reads as a diagnosis). Confirm scrutinize-dont-coast before merge.
Summary
Ready to merge once the two open questions are confirmed. No blocking correctness or security issues. One non-blocking eval coverage gap (single-axis routing). The skill is internally consistent, the documentation is thorough, and the fresh-context subagent constraint is correctly mandatory rather than advisory.
|
Claude finished @kyle-sexton's task in 1m 11s —— View job Security Review
FindingsNo security issues found. All five changed files were reviewed against the full threat model: injection surfaces (command, path, template, prompt), authorization/access-control gaps, unsafe credential/token handling, dangerous GitHub Actions patterns, and supply-chain risk from loosened or unpinned dependencies. Per-file notes
Prompt-only skill. Zero executable surface. Key properties checked:
Pure data. No executable code, no external references, no credentials. Eval prompts are abstract (cache invalidation, migration scripts by description only). No security concerns.
Version bump
Documentation text only. No security concerns. Supply chain / GitHub ActionsNo changes to |
…oast - guard the /review:quality-gate cross-plugin ref with a degrade-to-prose fallback (bare unguarded cross-plugin ref is a defect per PLUGIN-PHILOSOPHY) - point-not-copy the fresh-context rationale at the shared method doc's rule instead of restating it; keep only the skill-specific "core step" delta - reframe the audit list as the brief handed to the fresh-context pass rather than a same-context self-audit - reword eval #4 to a disposition check (focus narrows aim, not a hard filter), removing the overreach that assumed a planted out-of-focus flaw with files:[] 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 8s —— View job PR #838 Review —
|
| ID | Case | Status |
|---|---|---|
| 1 | Happy path — stop + fresh-context subagent + collaborative remediation | ✓ Core contract |
| 2 | Clean pass — no fabricated finding | ✓ Non-fabrication guarantee |
| 3 | Negative routing — pre-implementation plan → devils-advocate |
✓ Primary negative boundary |
| 4 | Focus scoping — narrows without suppressing out-of-focus flaw | ✓ Focus semantic |
| 5 | Conversation-start posture — no audit when no output exists | ✓ Shared loop's start case |
Coverage gap (non-blocking). The SKILL.md "What this skill does NOT do" section (line 118) names a fourth routing case — single-axis flaw to the owning sibling (e.g., an unverified claim → /re-anchor:do-your-research). No eval exercises this boundary. An eval 6 of the form "unverified number in the output, no broader momentum issue → routed to do-your-research" would close it. Not a merge blocker given the existing coverage of the more decision-sensitive boundaries.
CHANGELOG.md and README.md
Both are clean additive entries, format-consistent with prior entries. CHANGELOG follows Keep a Changelog 1.1.0. README catalog entry matches plugin.json description. ✓
Security
- Zero hooks, scripts, MCP servers,
userConfigrefs, orbin/entries - Only internal reference:
${CLAUDE_PLUGIN_ROOT}/context/re-anchor-audit-correct.md— confirmed present on disk, plugin-form-safe - Subagent is scoped to analysis only; outward-artifact gate is explicitly restated in the skill (line 61–62)
- No PII or secrets
Accept. ✓
CLAUDE.md alignment
| Rule | Status |
|---|---|
| Repo-agnostic | ✓ ${CLAUDE_PLUGIN_ROOT} only |
| Configurable without editing | ✓ No userConfig required |
| Plugin-form-safe | ✓ No ../ escapes |
| No PII/secrets | ✓ Pure prompts |
| Versioned | ✓ Explicit semver 0.5.0 |
| Security-reviewed | ✓ Accept |
Open Questions (decisions needed before merge)
1. Collaborative-remediation contract (delta 2)
This is the only skill in the 14-corrector family where step 3 is collaborative rather than autonomous. The rationale is coherent ("the remedy for runaway momentum can't be more unilateral momentum"), and the PR correctly flags this as a decision point. The current per-skill documented-delta approach is the safer choice — it leaves the 13 existing skills untouched. Confirm: documented per-skill exception, or shared-method-doc update to allow optional collaborative remediation across the family?
2. Name: scrutinize-dont-coast vs distrust-your-momentum
The tournament rationale is solid. At the call site, scrutinize-dont-coast reads as an imperative instruction; distrust-your-momentum reads as a diagnosis — that's a real advantage for the winner. Confirm scrutinize-dont-coast before merge.
Summary
Ready to merge once:
- The two open questions above are confirmed (or acted on)
- Optionally: double-"and" grammar fix in the description string
No blocking correctness or security issues. Non-blocking: one eval gap (single-axis sibling routing) and the growing description-string length to track.
|
Claude finished @kyle-sexton's task in 1m 34s —— View job Security Review — PR #838
|
User precedent ruling on the scrutinize-dont-coast overrides (STOP prepend, collaborative step 3): per-skill deltas to the shared loop are allowed when declared in the skill's SKILL.md with the reason; silent divergence stays a violation and the Non-negotiables remain non-overridable. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 39s —— View job PR #838 Review —
|
| ID | Case | Verdict |
|---|---|---|
| 1 | Happy path — stop + fresh-context subagent + collaborative remediation | ✓ Core contract |
| 2 | Clean pass — no fabricated finding | ✓ Non-fabrication guarantee |
| 3 | Negative routing — pre-implementation plan → devils-advocate |
✓ Primary negative boundary |
| 4 | Focus scoping — narrows without suppressing out-of-focus flaw | ✓ Focus semantic |
| 5 | Conversation-start posture — no audit when no output exists | ✓ Shared loop's start case |
🟡 Nit — missing eval for single-axis sibling routing: The SKILL.md line 118–121 names a fourth routing case — a squarely-single-axis flaw hands that part to the owning sibling (/re-anchor:do-your-research) while keeping general scrutiny here. No eval exercises this boundary. An eval 6 on the order of "unverified number, no broader momentum issue → routes to do-your-research while keeping the general scrutiny" would close the gap. Non-blocking given the existing coverage.
CHANGELOG.md
Correct: 0.5.0 has both a "Changed" section (shared loop doc) and an "Added" section (new skill). Format consistent with prior entries, follows Keep a Changelog 1.1.0. ✓
Security (CLAUDE.md plugin-acceptance review)
| Check | Result |
|---|---|
| Hooks / scripts / MCP / bin | None |
userConfig refs |
None |
| Internal-plugin path only | ${CLAUDE_PLUGIN_ROOT}/context/re-anchor-audit-correct.md — correct, confirmed present on disk |
| Outward-artifact gate | Restated at line 61–62 |
| PII / secrets | None |
| REVIEW.md blocking criteria | N/A — no handlers, data-access paths, multi-record writes, or credentials |
Accept. ✓
CLAUDE.md alignment
| Rule | Status |
|---|---|
| Repo-agnostic | ✓ ${CLAUDE_PLUGIN_ROOT} only, no hardcoded paths |
| Configurable without editing | ✓ No userConfig required |
| Plugin-form-safe | ✓ No ../ escapes |
| No PII/secrets | ✓ Pure prompts |
| Versioned | ✓ Explicit semver 0.5.0 |
| Security-reviewed | ✓ Accept |
Open questions (carry-forward from PR body)
Q1 (per-skill delta precedent): Resolved by commit 619b097 — option (a) chosen. The shared method doc now sanctions declared deltas; undeclared divergence remains a violation; Non-negotiables are never overridable. The correct governance call.
Q2 (name): scrutinize-dont-coast is implemented throughout. The tournament rationale is sound — verb-dont-verb family shape, temporally neutral, names both action and failure mode. The runner-up distrust-your-momentum names the cause rather than the action, which is weaker at the call site. Confirm the name before merge.
Summary
Ready to merge once Q2 (name) is confirmed. No blocking correctness or security issues found. Two nits, both non-blocking: the double-"and" grammar in the description string (trivially fixable) and the missing eval for single-axis sibling routing.
|
Claude finished @kyle-sexton's task in 1m 32s —— View job Security Review — PR #838
|
Review finding: the allowance said "modify a step" but scrutinize-dont-coast's STOP delta is an inserted step, not a modified one. Broaden the clause to modify/insert/reorder, require inserted steps to declare their position, and pin the STOP's position (between steps 1 and 2) in the skill. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 16s —— View job PR #838 Review —
|
| Commit | Description | Status |
|---|---|---|
b88e3b2 |
Fold independent-review findings | ✓ All four findings addressed |
619b097 |
Sanction declared per-skill step deltas in shared method doc | ✓ PR body Q1 resolved |
97b2f1c |
Broaden "modify" → "modify/insert/reorder" in shared method doc | ✓ Correct precision fix |
97b2f1c — precision fix on declared-step-delta allowance
This commit closes a real gap: the shared method doc at 619b097 said "modify a step" but the STOP delta in scrutinize-dont-coast is an insertion (a new step between steps 1 and 2), not a modification of an existing step. The final commit:
- Broadens the clause to
modify, insert, or reorderinre-anchor-audit-correct.mdlines 64–68 - Adds the position-declaration requirement ("for an inserted step, where it sits relative to the numbered steps")
- Pins the STOP's position in
SKILL.mdline 47: "An inserted step between the loop's step 1 and step 2"
The method doc and the skill are now consistent — the skill satisfies the method doc's own constraint on inserted steps. ✓
b88e3b2 — four prior findings folded
All four independent-review findings were addressed cleanly:
/review:quality-gateguard — the bare cross-plugin ref now has a degrade-to-prose fallback per PLUGIN-PHILOSOPHY. ✓ (SKILL.md line 117)- Point-not-copy on fresh-context rationale — the skill's section now points at the method doc's rule (
lines 68–69) rather than restating it; only the skill-specific "core step" escalation is kept. ✓ - Audit list reframed — the six items are now explicitly framed as the brief handed to the fresh-context pass (method doc step 2 running in a fresh context), not an in-context self-audit. ✓
- Eval ci: onboard to the CI platform (ci-workflows + standards) #4 reworded — now a disposition check ("focus narrows aim, not a hard filter"), correctly removing the overreach that assumed a planted out-of-scope flaw with
files: []. ✓
619b097 — Q1 (per-skill delta precedent) resolved
The PR body flagged this as a user decision. Option (a) was chosen: the shared method doc now sanctions declared deltas with an explicit non-overridable carve-out for the Non-negotiables. The governance constraint is correctly ordered — the allowance clause ends with "The Non-negotiables below are never overridable" at line 71–72. ✓
Remaining items (carry-forward from prior reviews)
🟡 Non-blocking nit — double "and" in description strings
Still present in both plugin.json and README.md at HEAD. The description ends with:
...and reuse-or-replace (...), and scrutinize-dont-coast (...).
Serial lists place and only before the final item. The fix is to drop and before reuse-or-replace. This has been flagged in every prior review run. It's a one-character-word edit — trivially fixable now before merge rather than carrying forward to the next skill addition. [Fix this →](https://claude.ai/code?q=In%20plugins%2Fre-anchor%2F.claude-plugin%2Fplugin.json%20and%20README.md%2C%20on%20branch%20feat%2Fre-anchor-adversarial-scrutiny%2C%20the%20description%20string%20ends%20with%20%22...and%20reuse-or-replace%20(...%29%2C%20and%20scrutinize-dont-coast%22%20%E2%80%94%20two%20consecutive%20%22and%22%20connectors.%20Remove%20%22and%20%22%20before%20%22reuse-or-replace%22%20so%20only%20the%20final%20entry%20carries%20it.&repo=melodic-software/claude-code-plugins)
🟡 Non-blocking — missing eval for single-axis sibling routing
SKILL.md line 121–123 names a routing case — a squarely-single-axis flaw hands that part to the owning sibling (e.g., /re-anchor:do-your-research for an unverified claim) while general scrutiny stays here. No eval covers this boundary. An eval 6 would close it; acceptable to defer post-merge.
Q2 (name) — confirm before merge
scrutinize-dont-coast is the provisional tournament winner and is implemented throughout. Confirm before merge. The runner-up distrust-your-momentum remains available if preferred; at the call site the current name reads as an imperative, which is the stronger choice.
Summary
Ready to merge once Q2 (name) is confirmed. All blocking issues from prior reviews have been addressed across four clean follow-up commits. The final 97b2f1c commit is the right precision fix — the STOP is an insertion, not a step modification, and the method doc now says so. Two non-blocking items remain (double-"and" nit, single-axis sibling routing eval), neither blocks merge.
|
Claude finished @kyle-sexton's task in 1m 39s —— View job Security Review — PR #838
|
What
Adds
scrutinize-dont-coastto there-anchorplugin (0.4.0 → 0.5.0): a drift corrector for adversarial self-scrutiny — the general "don't coast on your own recent output" re-look, distinct from the plugin's content-axis correctors (research, incumbency, terseness, …). The user hits the brakes; the skill stops, re-examines whether the recent output is actually sound (not merely confidently produced), and remediates with the user.Design
Re-anchors a meta discipline rather than a single content axis. It runs the shared re-anchor / audit / correct-forward loop (
context/re-anchor-audit-correct.md) with two deliberate, documented deltas — flagged in the SKILL.md rather than silently diverging:The load-bearing adversarial pass is delegated to a fresh-context (non-fork) subagent blind to the reasoning that produced the output, satisfying the philosophy's fresh-eyes rule that a same-context self-check cannot. Findings return and remediation proceeds with the user — composing the fresh-eyes constraint and the collaborative-remediation intent instead of trading one off. An optional focus scopes the pass without suppressing a serious out-of-focus flaw.
Negative routing (explicit in the skill): pre-implementation plan stress-tests →
/planning:devils-advocate(guarded, degrades to prose when absent); review checkpoints →/review:quality-gate; single-axis flaws → the sibling that owns them.Naming tournament
Research-backed tournament via
naming:name-it-better— 5 blind fresh-context generators (responsibility-literal, moment-of-use, domain-lore, physical-metaphor, family-idiom-fit), each seeded only with a structured brief (temporal-neutrality constraint, sentence-form test, negative boundary vs devils-advocate/quality-gate, word blocklist: audit/gate/review/devil/advocate/bare-check).scrutinize-dont-coast— top-2 in 3 of 5 lenses, including the two most decision-relevant (responsibility-literal, family-idiom-fit). Verb-dont-verb family shape (shared with reason-dont-recite, point-dont-copy, reuse-or-replace); temporally neutral (a standing principle, not a presupposition of existing flawed work); names both the action and the failure mode.distrust-your-momentum(co-convergent — top-2 in 3 lenses; evocative, but names the cause not the action and reads weaker at the call site);red-team-your-own-work(exact term of art, but longer and security-jargon-tinged). Also surfaced: prove-it-holds, pump-the-brakes, stop-and-look-hard.stop-and-scrutinize; it did not surface in any lens, and the judging confirms the convergent winner scores higher on family-idiom fit, temporal-neutrality, and sentence-form. Dogfooding the blind method overrode the author's anchored pick — exactly this skill's own thesis.Gates
claude plugin validate .— PASSskill-quality check scrutinize-dont-coast— PASS (0 errors, 0 warnings; markdownlint clean; 133/500 lines; description 529/1536 chars)check-skill.shPASS above.${CLAUDE_PLUGIN_ROOT}ref). Additive 0.4.0→0.5.0 bump touches no trust surface.Scope
plugins/re-anchor/skills/scrutinize-dont-coast/{SKILL.md,evals/evals.json}(new);plugin.json(version, description, keywords);README.mdcatalog entry;plugins/re-anchor/CHANGELOG.md.marketplace.jsonuntouched (version lives in plugin.json; adding a skill to an existing plugin does not change its catalog entry).Open questions for the user
context/re-anchor-audit-correct.mdwas NOT touched. Two ways to settle the precedent, your call: (a) sanction declared per-skill step-overrides by adding an allowance to the shared method doc (so future correctors may do this cleanly), or (b) reconsider — fold the behavior back to the autonomous family default. If instead STOP-first + collaborative-remediation should become the family norm, that's a method-doc change touching all 13 skills — a separate decision, not made unilaterally here.scrutinize-dont-coastis the provisional tournament winner;distrust-your-momentumis the co-convergent alternative. Confirm or swap before merge (trivial rename).Cross-lane note
Lane 3's
planning:devils-advocateincumbent extension is in flight concurrently. This skill's boundary text keys on the stable contract (devils-advocate = plans/proposals before implementation; this = output already produced, mid-flight), which is robust to that extension — no coordination edit needed.Related
plugins/re-anchor(0.4.0 → 0.5.0).planning:devils-advocateincumbent extension — see the cross-lane note above.