agentleFS
bordenetbordenet/superpowers-plus/skills/engineering/progressive-harsh-review/skill.md

progressive-harsh-review

Skill8 starsChanged 6 months agoMITView on GitHub

Adversarial review for plans, specs, and other non-code deliverables. One persona for reversible work, three for irreversible (ADRs, contracts, migrations). Route code to code-review-battery and skill files to llm-skill-review.

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use before presenting non-code work or on a hostile-review request.

    line 63
  2. Distinctive:

    Persona count: all three for irreversible artifacts (ADRs, API/contract specs, migrations, security policy, author-marked).

    line 67
  3. Very specific:

    Verdict: Use the table. A repository floor raises the PASS bar only.

    line 85
  4. Distinctive:

    Only PASS clears the gate.

    line 109

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
skill.md

Reference index

NeedReference section
Repository sets a score floorProject-min override
Final report needs a templateScoring output format
Review behavior looks weakAnti-Patterns
A neighboring workflow is neededCompanion skills

Progressive Harsh Review

Mechanical routing: Run tools/review.sh route <path> [<path> ...] first. Obey its result; stop on error or an unclassified artifact.

Wrong skill? Code -> code-review-battery; skills/tooling -> llm-skill-review; design comparison -> debate.

Announce at start: "I'm using the progressive-harsh-review skill to red-team this work."

When to use

Use before presenting non-code work or on a hostile-review request. Exclude code, skills, brainstorming, and design-option selection.

Persona dimension table

Persona count: all three for irreversible artifacts (ADRs, API/contract specs, migrations, security policy, author-marked); otherwise SeniorArchCritic alone; unsure -> three. Each persona reads independently. Send only its row, the common dimension questions, and artifact/repository access.

PersonaStart pointCSVBOR
JuniorDevNitpickerLine-by-line prose352515205
SeniorArchCriticPromises vs. evidence2515251520
OpsRealistFailures and state changes2510102530

Dimensions: Correctness (holds?), Simplicity (needless complexity?), Verifiability (checkable?), Blind Spots (omissions?), Operational Risk (adverse failures?). Each row totals 100.

For user-visible functionality, missing named metrics and trace/span strategy caps OpsRealist's Operational Risk at 4; cite the omission.

Review process

  1. Fresh-reader check. Flag local paths, undefined identifiers, process commentary, and inaccessible references. Remove this author noise before shipping; do not lower scores for it alone.
  2. Independent review. Author != Reviewer. Dispatch the personas chosen above from artifact paths with only their row, five questions, and repository access. Persona reviewers must not invoke PHR, debate, code-review-battery, or other reviewers; each returns one scorecard. Remediate only after aggregation.
  3. Score. Score each dimension 1-10 with the persona's weights; with three, take the equal-weight average of the weighted scores.
  4. Apply veto. Correctness or Operational Risk <=4 is a hard veto only with a specific defect. Unrecoverable failures must affect Operational Risk, not Blind Spots alone.
  5. Verdict. Use the table. A repository floor raises the PASS bar only; load Project-min override.
  6. Remediate. Fix and verify every material finding. After round one, continue the same reviewer on the delta (a fresh one needs the full prior findings). REJECT requires root-cause analysis and full re-review.
  7. Check correlation. Any flag below or unsupported clean sweep requires a new persona starting point.
  8. Converge. Require the active floor, no veto/flag, and no new material issues. Escalate after 3 rounds without convergence; never auto-ship.

Verdicts

Weighted meanVerdictAction
>=8PASSShip after all gates clear
7 to <8PASS_WITH_FIXESFix and rescore changed areas
<7REJECTRoot-cause, remediate, full re-review
Any with vetoREJECTClear the cited defect, full re-review

PASS_WITH_FIXES never clears the gate. Limit the entire remediation cycle to 3 review rounds.

Correlated-failure checks

  • CORRELATED EVIDENCE: shared evidence; one persona restarts from its lens.
  • ECHO REASONING: materially identical reasoning; require an independent restatement.
  • Clean sweep: each persona shows evidence from its distinct start point or re-examines.

Sentinel after PASS

Only PASS clears the gate. Run PHR AFTER git commit once the floor is met with no veto or correlation flag:

tools/run-phr.sh --verdict PASS --min-score "<weighted-mean>"

Clearance holds only while the reviewed docs are byte-identical (tools/lib/sentinel-scope.sh).

Reference loading

Load only the needed section: Project-min override, Anti-Patterns, or Scoring output format (see the routing table above for exact heading names -- the loader below requires an exact match). When an installed copy is found (any of .claude/.codex/.agents), loading requires the separately-provisioned ~/.codex/superpowers-plus checkout -- an install missing that shared dependency gets a loud section-loader missing failure, not silent wrong content.

<!-- kernel-split-reference-loader:start -->
_ks_ref=""
_ks_loader=""
for _candidate in \
  "$HOME/.claude/skills/sp-phr/reference.md" \
  "$HOME/.codex/skills/sp-phr/reference.md" \
  "$HOME/.agents/skills/sp-phr/reference.md"
do
  if [ -r "$_candidate" ]; then _ks_ref="$_candidate"; break; fi
done
if [ -n "$_ks_ref" ]; then
  _ks_loader="$HOME/.codex/superpowers-plus/tools/section-loader.sh"
else
  _project_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
  _source_dir="$_project_root/skills/engineering/progressive-harsh-review"
  if [ -n "$_project_root" ] && [ -r "$_source_dir/skill.md" ] && \
     [ -r "$_source_dir/reference.md" ] && \
     [ -r "$_project_root/tools/section-loader.sh" ]; then
    _ks_ref="$_source_dir/reference.md"
    _ks_loader="$_project_root/tools/section-loader.sh"
  fi
fi
[ -r "$_ks_ref" ] || { printf 'reference missing\n' >&2; exit 1; }
[ -r "$_ks_loader" ] || { printf 'section-loader missing\n' >&2; exit 1; }
# Replace <section heading> below with one of the exact strings from
# the Reference index table above before running.
_section='<section heading>'
bash "$_ks_loader" "$_ks_ref" "$_section" \
  || { printf 'section not found: %s\n' "$_section" >&2; exit 1; }
<!-- kernel-split-reference-loader:end -->

Failure Modes

FailureFix
Self-reviewed in same thinking passUse sub-agent (preferred) — in-process role switch with no context isolation is significantly less reliable; if used, explicitly discard the author's reasoning and start fresh from the artifact text
All personas gave same feedbackEach persona must name ≥1 plausible failure mode unique to their lens, or cite a specific property of the change explaining why none exists (generic dismissal = rubber-stamp) — identical findings means the lenses aren't distinct
Score inflated to avoid re-workFindings with concrete issues MUST score ≤7 on that dimension
Only reviewed happy pathOpsRealist must consider failure, rollback, 3am scenarios, and OE telemetry for new behavior
Round N mean lower than Round N-1Remediation introduced new issues — flag REGRESSION, root-cause before Round N+1
No output summary before presentingAlways emit PHR SUMMARY block (rounds, mean, verdict, project-min, vetoes)
Unrecoverable finding scored only on Blind SpotsMust ALSO score Operational Risk to be veto-eligible — Blind Spots alone bypasses the veto gate
Skipped sentinel write after PASSPre-push Gate 5 refuses the push with "PHR sentinel missing." Run tools/run-phr.sh --verdict PASS --min-score <N> and retry.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.