원클릭으로
adversarial-spec-review
Use when reviewing a spec or task graph for completeness before implementation
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when reviewing a spec or task graph for completeness before implementation
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging in, or automating browser actions
Use when decomposing a spec, design, or feature description into a task dependency graph with self-evaluating acceptance criteria
Use when doing creative product, feature, component, functionality, or behavior design work
Use when infrastructure or features are built but before declaring done -- verifies work is wired into the system and actively used
Use when task completion or context usage requires a handoff readiness check
| name | adversarial-spec-review |
| description | Use when reviewing a spec or task graph for completeness before implementation |
| user-invocable | true |
Stress-test a spec or task decomposition by actively trying to construct failure scenarios. The goal is to find a scenario where every task passes individually but the feature still doesn't work.
"Imagine every task passes its QG, every review approves, every merge succeeds. The feature still doesn't work. Why?"
If you can answer that question, the spec has a gap. Fix it before execution begins.
This is Gate 1 (design) and Gate 2 (coverage) of the Ralph Loop pipeline.
Self-check for every finding before writing it down:
"If this gap existed and all tasks passed, would the feature be visibly broken or untestable?" If no → not a finding. Drop it.
In scope (structural failures):
Out of scope (handled elsewhere):
When in doubt, mark it minor in negative_space and do not let it affect the verdict.
Do NOT use for:
Run in order. Each check builds on the previous.
Before reading the spec in detail, attempt to write the epic's machine-verifiable acceptance test from the spec's goal alone.
Cmd: <exact command to verify the feature works>
Assert: <exact expected output or exit code>
Rules:
main (not a branch — the feature isn't done until it's on main)If you can't write the test, the spec is underspecified. This is a CRITICAL finding. Stop and fix the spec before continuing.
If the spec already has an acceptance test, verify it's adequate:
For every new component the spec describes, trace the ACTUAL call chain from the system's entry point to where the new code must execute.
Procedure:
Read: field?You must read actual source files, not descriptions. The spec may say "worker calls BuildEpicDecompositionPrompt" but if you read worker.go:buildAssignPrompt, you'll see it never checks IsEpicDecomposition. That's the wiring gap.
For each new component, produce:
Entry: cmd/oro/main.go → runWork()
Chain: runWork → executeWork → spawnAndWait → worker.AssemblePrompt
Gap: AssemblePrompt calls buildAssignPrompt, which never checks IsEpicDecomposition
Task: [missing — no task wires the prompt into the call site]
If you can't trace the full chain for any component, that's a finding.
For every acceptance criterion in the spec, map it to:
| # | Criterion | Task | Test | Status |
|---|------------------------|----------|-----------------------------|---------|
| 1 | Epics route to decomp | oro-abc | TestDispatcherRoutesEpics | covered |
| 2 | Worker uses decomp prompt | ??? | ??? | GAP |
| 3 | Children created | oro-def | TestChildBeadsCreated | covered |
Rules:
For each component or behavior the spec describes, ask:
For each gap found, determine: is this a missing task, a missing acceptance criterion on an existing task, or an acceptable risk that should be documented?
Your job is to break it. Actively construct scenarios where all individual tasks pass but the feature doesn't work.
Common failure patterns to hunt for:
| Pattern | Example | How to detect |
|---|---|---|
| Unwired component | Function exists but never called | Check 2 catches this |
| Format mismatch | Producer outputs JSON, consumer expects protobuf | Check task boundaries |
| Test-only code | Marked //testonly or behind build tag | Grep for build constraints |
| Branch-only code | Code committed to branch, never merged to main | Check acceptance runs on main |
| Config gap | Code works but config/flag/env not set | Check initialization path |
| Import cycle | New package can't import required dependency | Check Go import graph |
| Order dependency | Works if A runs before B, fails if B runs first | Check for implicit ordering |
| Partial migration | New path works, old path still active, conflict | Check for dual code paths |
For each scenario you construct:
Scenario: Worker builds epic decomposition prompt but buildAssignPrompt ignores IsEpicDecomposition
Tasks pass: Yes — prompt.go has tests, worker.go has tests, both green
Feature works: No — prompt is never used in production
Root cause: No task covers the wiring between prompt.go and worker.go
Fix: Add wiring task with Read: worker.go:buildAssignPrompt, prompt.go:BuildEpicDecompositionPrompt
List every existing file/function in the codebase that this feature MUST touch to work. Not files the spec mentions — files the CODE requires.
Procedure:
Read: field?Read: — is the file affected by this feature?This catches the files nobody thought about — the router that needs a new route, the config that needs a new flag, the init function that needs to register a new handler.
verdict: PASS | FAIL
spec: "<spec path or epic ID>"
reviewer_note: "<one sentence summary>"
acceptance_test:
cmd: "<command>"
assert: "<expected>"
adequate: true | false
issues: ["<if not adequate, why>"]
traceability:
covered: N
gaps: N
matrix: |
| # | Criterion | Task | Test | Status |
...
wiring_gaps:
- entry: "<entry point>"
chain: "<call chain>"
gap: "<where it breaks>"
fix: "<what task is needed>"
negative_space:
- area: "<what's unspecified>"
severity: critical | important | minor
fix: "<missing task or criterion>"
red_team_scenarios:
- scenario: "<description>"
beads_pass: true
feature_works: false
root_cause: "<why>"
fix: "<what to add>"
integration_points:
covered: ["<file:function>"]
uncovered:
- file: "<path>"
reason: "<why it matters>"
fix: "<what task should cover it>"
If FAIL:
beadcraft create mode)If PASS:
oro task update <epic> --acceptance "Cmd: ... | Assert: ..."This review should be run by a fresh-context agent when possible — the person who wrote the spec is the worst reviewer of the spec. When spawning:
Task: adversarial-spec-review
Prompt: "Read <spec path>. Read the actual source files for affected packages.
Run all 6 checks from the adversarial-spec-review skill.
Return the full output in the specified YAML format."
The agent reads the spec, reads the code, produces the review. Fresh eyes, no assumptions carried from the design conversation.