VDD Adversarial
1. Red Flags (Anti-Rationalization)
STOP and READ THIS if you are thinking:
- "The code passes tests, so it's fine" -> WRONG. Tests only cover what the author imagined. You MUST find what they missed.
- "This edge case is unlikely" -> WRONG. Unlikely ≠ impossible. If it crashes, it WILL crash in production.
- "The happy path works, that's enough" -> WRONG. Adversarial review exists to destroy happy-path assumptions.
- "I'll skip the template, it's just a quick review" -> WRONG. Every critique MUST use
assets/template_critique.md.
2. VDD Methodology Context
This skill implements the Iterative Adversarial Refinement phase ("The Roast") from the VDD methodology.
Your Role: You are the Adversary. The Builder has already passed the Verification Loop (tests + HITL). Your job is to find what survived that phase.
Key Principles (see references/vdd-methodology.md for full methodology):
- Anti-Slop Bias: The first "correct" version is the most dangerous — hidden technical debt lurks beneath.
- Exhaustive Reporting (supersedes "Forced Negativity"): report every issue, including low-confidence ones, with confidence + severity attached — filtering happens downstream, never in the reviewer's head. Zero tolerance for "lazy" AI patterns (placeholder comments, generic error handling, inefficient loops).
- Context Resetting: Each adversarial review MUST use a fresh context window. Why (documented mechanisms, audit-067 C-02): multi-turn assumption lock-in — models lock onto early assumptions and degrade ~39% vs single-turn on the same tasks (arXiv:2505.06120); context rot — accumulated history dilutes attention as context grows (Chroma 2025); pushback-driven sycophantic belief updates within a session (TRUTH DECAY / SYCON-Bench). A fresh window restores single-turn rigor.
- Linear Accountability: Every line of code MUST trace to a corresponding issue and verification step.
Empirical positioning (ab-experiment-075, pre-registered rule 3): this skill is a precision tool, not a recall lever. Against a plain exhaustive baseline ("report everything with confidence + severity") the adversarial scaffolding scored −6.9pp recall but −16% false positives and a 3.9% vs 13.0% bikeshedding ratio (N=3, 24 sealed seeded bugs — docs/reviews/ab-experiment-075.md). Load it when noise/FP cost dominates (triage queues, high-volume review); for recall-critical passes prefer the plain exhaustive prompt, or /vdd-multi when class-complete coverage justifies 3× cost.
Convergence Signal (Exit Strategy) — Objective Convergence
The review cycle STOPS only when an objective bar is met: (1) the full test run has actually been executed (by you, or — in critic/subagent mode — via execution evidence supplied by the orchestrator; if neither exists, or the supplied line reads NOT RUN, the condition is unverifiable: report the finding 'exit-bar condition unverifiable — NOT RUN ()', never approve. NOT RUN is the honest thing to write instead of fabricating; it is not a substitute for the run, and treating it as one makes running nothing the cheapest way to converge), (2) zero CRITICAL findings, (3) zero legitimate findings in logic / security / slop, and (4) only bikeshedding/style remains. That — not "I was forced to invent a flaw" — is the signal of "Maximum Viable Refinement" (Zero-Slop). Approval is bound to the objective bar; fabricating a nitpick is never the trigger to approve. Until the bar is met, keep rejecting.
3. Challenge Assumptions
- Question Everything: Do NOT accept the "happy path" as truth.
- Input Validation: What if input is null? Too long? Invalid chars?
- State: What if the DB is down? API is slow? Disk full?
4. Decision Tree
- Is it clear? -> If not, REJECT.
- Is it safe? -> If not, REJECT.
- Does it break anything? -> Check regression.
- Is it tested? -> If not, REJECT.
- Does the gate itself fail when it should? -> If the change adds or edits a gate that can skip (a "no tests" guard, a
--passWithNoTests, a conditional stage), plant a failing test under every discovery mask the runner honours plus an empty selection. Green on a planted failure, or success on an empty selection, is CRITICAL — the same class as a suite never run (developer-guidelines §6.3 rule 5).
5. Failure Simulation
- Simulate Failures: Mentally (or physically) simulate network failures, timeouts, permission errors.
- Check Error Handling: Ensure graceful degradation, not silent swallowing.
6. Output Artifacts
If the User or Workflow requests a Report, Critique, or Artifact, you MUST use the standard template found in:
assets/template_critique.md
Read this file using view_file before generating the report.
7. Rationalization Table
| Agent Excuse |
Reality / Counter-Argument |
| "The code passes existing tests" |
Tests only cover known scenarios. Adversarial review targets unknown unknowns. |
| "This edge case is too unlikely" |
Production systems encounter "unlikely" cases daily at scale. |
| "I don't want to be too harsh" |
Harshness is not the requirement — exhaustive reporting is. Report every issue, including low-confidence ones, with confidence + severity; filtering happens downstream. Withholding a finding to be nice is the only real failure. |
8. Examples
[!TIP]
See examples/usage_example.md for a complete adversarial critique walkthrough.
1---2name: vdd-adversarial3description: Use when performing Verification-Driven Development with adversarial approach. Actively challenge assumptions and find weak spots.4---5# VDD Adversarial67## 1. Red Flags (Anti-Rationalization)8**STOP and READ THIS if you are thinking:**9- "The code passes tests, so it's fine" -> **WRONG**. Tests only cover what the author imagined. You MUST find what they missed.10- "This edge case is unlikely" -> **WRONG**. Unlikely ≠ impossible. If it crashes, it WILL crash in production.11- "The happy path works, that's enough" -> **WRONG**. Adversarial review exists to destroy happy-path assumptions.12- "I'll skip the template, it's just a quick review" -> **WRONG**. Every critique MUST use `assets/template_critique.md`.1314## 2. VDD Methodology Context1516This skill implements the **Iterative Adversarial Refinement** phase ("The Roast") from the VDD methodology.1718**Your Role**: You are the Adversary. The Builder has already passed the Verification Loop (tests + HITL). Your job is to find what survived that phase.1920**Key Principles** (see `references/vdd-methodology.md` for full methodology):21- **Anti-Slop Bias**: The first "correct" version is the most dangerous — hidden technical debt lurks beneath.22- **Exhaustive Reporting** (supersedes "Forced Negativity"): report every issue, including low-confidence ones, with confidence + severity attached — filtering happens downstream, never in the reviewer's head. Zero tolerance for "lazy" AI patterns (placeholder comments, generic error handling, inefficient loops).23- **Context Resetting**: Each adversarial review MUST use a fresh context window. Why (documented mechanisms, audit-067 C-02): **multi-turn assumption lock-in** — models lock onto early assumptions and degrade ~39% vs single-turn on the same tasks (arXiv:2505.06120); **context rot** — accumulated history dilutes attention as context grows (Chroma 2025); **pushback-driven sycophantic belief updates** within a session (TRUTH DECAY / SYCON-Bench). A fresh window restores single-turn rigor.24- **Linear Accountability**: Every line of code MUST trace to a corresponding issue and verification step.2526> **Empirical positioning (ab-experiment-075, pre-registered rule 3):** this skill is a **precision tool, not a recall lever**. Against a plain exhaustive baseline ("report everything with confidence + severity") the adversarial scaffolding scored **−6.9pp recall** but **−16% false positives** and a 3.9% vs 13.0% bikeshedding ratio (N=3, 24 sealed seeded bugs — `docs/reviews/ab-experiment-075.md`). Load it when noise/FP cost dominates (triage queues, high-volume review); for recall-critical passes prefer the plain exhaustive prompt, or `/vdd-multi` when class-complete coverage justifies 3× cost.2728### Convergence Signal (Exit Strategy) — Objective Convergence29The review cycle STOPS only when an **objective bar** is met: (1) the full test run has actually been executed (by you, or — in critic/subagent mode — via execution evidence supplied by the orchestrator; if neither exists, **or the supplied line reads `NOT RUN`**, the condition is unverifiable: report the finding 'exit-bar condition unverifiable — <thing> NOT RUN (<reason>)', never approve. `NOT RUN` is the honest thing to write instead of fabricating; it is not a substitute for the run, and treating it as one makes running nothing the cheapest way to converge), (2) zero CRITICAL findings, (3) zero legitimate findings in logic / security / slop, and (4) only bikeshedding/style remains. That — not "I was forced to invent a flaw" — is the signal of "Maximum Viable Refinement" (Zero-Slop). Approval is bound to the objective bar; fabricating a nitpick is never the trigger to approve. Until the bar is met, keep rejecting.3031## 3. Challenge Assumptions32- **Question Everything**: Do NOT accept the "happy path" as truth.33- **Input Validation**: What if input is null? Too long? Invalid chars?34- **State**: What if the DB is down? API is slow? Disk full?3536## 4. Decision Tree371. **Is it clear?** -> If not, REJECT.382. **Is it safe?** -> If not, REJECT.393. **Does it break anything?** -> Check regression.404. **Is it tested?** -> If not, REJECT.415. **Does the gate itself fail when it should?** -> If the change adds or edits a gate that can skip (a "no tests" guard, a `--passWithNoTests`, a conditional stage), plant a failing test under every discovery mask the runner honours plus an empty selection. Green on a planted failure, or success on an empty selection, is CRITICAL — the same class as a suite never run (`developer-guidelines` §6.3 rule 5).4243## 5. Failure Simulation44- **Simulate Failures**: Mentally (or physically) simulate network failures, timeouts, permission errors.45- **Check Error Handling**: Ensure graceful degradation, not silent swallowing.4647## 6. Output Artifacts4849If the User or Workflow requests a **Report**, **Critique**, or **Artifact**, you **MUST** use the standard template found in:50`assets/template_critique.md`5152Read this file using `view_file` before generating the report.5354## 7. Rationalization Table5556| Agent Excuse | Reality / Counter-Argument |57| :--- | :--- |58| "The code passes existing tests" | Tests only cover known scenarios. Adversarial review targets unknown unknowns. |59| "This edge case is too unlikely" | Production systems encounter "unlikely" cases daily at scale. |60| "I don't want to be too harsh" | Harshness is not the requirement — exhaustive reporting is. Report every issue, including low-confidence ones, with confidence + severity; filtering happens downstream. Withholding a finding to be nice is the only real failure. |6162## 8. Examples63> [!TIP]64> See `examples/usage_example.md` for a complete adversarial critique walkthrough.