/skill:spec-review-adversarial — Adversarial Review of Specifications
Purpose: Stress-test business analysis work products (requirements, user stories, acceptance criteria, process flows) by applying adversarial reviewer lenses. Finds gaps, contradictions, and ambiguities BEFORE they become code defects. This skill reviews BA deliverables, not code -- use /skill:domain-review for code.
When to Use
- A BA has produced requirements, user stories, or acceptance criteria for review
- You want to validate a PRD or feature specification before implementation begins
- A work item's acceptance criteria need a quality check
- You are about to start a sprint and want to catch ambiguity early
When NOT to Use
- You need to review code -- use /skill:domain-review
- You need to review a code review -- use /skill:review-gauntlet
- The deliverable is purely technical (architecture doc, API spec) -- use /skill:domain-review or a technical review
Usage
/skill:spec-review-adversarial <file-or-text>
/skill:spec-review-adversarial docs/requirements/auth-flow.md
/skill:spec-review-adversarial --ado 12345
/skill:spec-review-adversarial --linear BF-42
/skill:spec-review-adversarial --phase discovery
/skill:spec-review-adversarial docs/prds/order-capture/PRD.md --ontology docs/prds/order-capture/ONTOLOGY.md
Arguments
<file-or-text> -- path to the BA deliverable or inline text to review
--ado <item-id> -- fetch the work item from ADO and review its description + acceptance criteria
--linear <issue-id> -- fetch the issue from Linear and review its description + acceptance criteria
--phase <phase> -- override automatic phase detection (discovery, analysis, specification, validation)
--ontology <path> -- path to the ONTOLOGY.md the Semantic lens checks against. Defaults to the deliverable's sibling ONTOLOGY.md (docs/prds/<slug>/ONTOLOGY.md when the deliverable lives in that folder). A legacy bare .md deliverable has no sibling, so the default resolves to nothing and the Semantic lens runs in inference mode.
Step 1: Load the Deliverable
Obtain the BA work product:
- If a file path is provided, Read the file
- If
--ado or --linear is provided, use /skill:work-item to fetch it
- If inline text is provided, use that directly
Identify the deliverable type:
- Requirements document -- contains "shall", "must", "requirement", numbered items
- User stories -- contains "As a ... I want ... so that"
- Acceptance criteria -- contains "Given/When/Then" or checkbox lists
- Process flow -- contains sequential steps, decision points, swim lanes
- PRD -- contains sections like Overview, Goals, User Personas, Features
Step 2: Detect Phase
Determine the BA phase to select appropriate lenses. Auto-detect from deliverable type, or use --phase override:
| Phase |
Typical Deliverables |
Lenses |
| Discovery |
Problem statement, stakeholder needs, market context |
Skeptic, Devil's Advocate |
| Analysis |
Requirements, process flows, gap analysis |
Skeptic, Coherence, Semantic, Devil's Advocate |
| Specification |
User stories, acceptance criteria, detailed requirements |
Skeptic, Coherence, Semantic |
| Validation |
Test plans mapped to requirements, traceability matrix |
Coherence, Devil's Advocate |
Step 3: Apply Reviewer Lenses
Skeptic Lens
The Skeptic questions every assumption and asks "how do you know?"
Checks for:
- Unsupported claims. "Users prefer X" -- based on what evidence?
- Vague quantifiers. "Fast", "easy", "most users", "seamless" -- define the threshold
- Missing metrics. Success criteria without measurable targets
- Assumed context. References to systems, processes, or terms not defined in the document. Vocabulary gaps belong to the Semantic Lens -- raise them there as
[ONTOLOGY-<N>], not here
- Happy path bias. Only describes what happens when everything works. What about errors, edge cases, timeouts, partial failures?
- Missing personas. Who is "the user"? Are there different user types with different needs?
Finding format:
[SKEPTIC-<N>] <severity> | Section: <reference>
Claim: "<quoted text>"
Challenge: <what is wrong or missing>
Evidence needed: <what would resolve this>
Coherence Lens
The Coherence reviewer checks internal consistency and completeness.
Checks for:
- Contradictions. Section A says X, Section B says not-X
- Gaps in flow. Step 3 produces output Y, but Step 4 expects input Z
- Undefined terms. A term is used but never defined, or defined differently in different places. When the Semantic Lens is active it owns term resolution and homonyms -- raise those as
[ONTOLOGY-<N>], not here
- Orphaned requirements. A requirement is stated but no acceptance criteria cover it
- Orphaned acceptance criteria. AC exists but traces to no requirement
- Missing states. A status field has values A, B, C but the flow only describes transitions for A and B
- Boundary ambiguity. "Up to 10 items" -- is 10 included? What happens at 11?
- Implicit ordering. Steps described without specifying whether they are sequential, parallel, or unordered
- Missing required sections. When the deliverable is a PRD or AERS, check it against the Required Sections list in
_internal/aers-readiness. Report each absent or stub section as a Coherence finding naming the section. Do not restate that skill's scoring -- cite it and report the gap. Domain Ontology is the one section whose absence is a Semantic finding rather than a Coherence one, because it is scored by the ontology check
Finding format:
[COHERENCE-<N>] <severity> | Sections: <ref-A> vs <ref-B>
Conflict: <what contradicts or is incomplete>
Impact: <what goes wrong if this is not resolved>
Suggestion: <how to fix>
Semantic Lens
The Semantic reviewer checks that each term in the deliverable denotes exactly one thing, and that what the deliverable asserts about those things is identified, constrained, total, classified, and dated.
Resolve the mode first. Before running any check:
- Use
--ontology <path> if given.
- Otherwise use the deliverable's sibling
ONTOLOGY.md -- docs/prds/<slug>/ONTOLOGY.md when the deliverable lives in that folder. A legacy bare .md deliverable has no sibling.
- If neither resolves to a readable file, run in inference mode.
In ontology mode every check below is a lookup against the ontology: term resolution, constraint presence, and lifecycle totality are decided by whether a row exists and what it says. In inference mode the same checks run against vocabulary inferred from the deliverable itself; the reviewer cannot distinguish "term missing from the ontology" from "no ontology exists", so inference-mode findings are capped at Medium and the report must state that the lens ran in inference mode. If the ontology resolves to a file that does not parse as the ONTOLOGY.md format, report that as a Blocker and stop the lens -- do not fall back to inference and do not guess at the intended rows.
The categories, the ONTOLOGY.md format, and the item-state vocabulary (settled / deferred / unknown) are defined in _internal/ontology-readiness. Read them there. This lens emits findings; it does not compute the Ontology: verdict or any score -- that belongs to the rubric and its callers.
Checks -- one per high-risk semantic ambiguity category in _internal/ontology-readiness § Automated ontology check, in that order:
| Category |
Look at |
Fires when |
| entity with no reference scheme |
Each entity the deliverable defines or changes |
Ontology mode: the entity's row has no reference scheme, or its reference scheme is deferred/unknown. Inference mode: the deliverable names the entity and never says what makes two mentions the same one |
| term used in a functional requirement but absent from the ontology |
Every distinct noun and verb phrase in Functional Requirements |
Ontology mode: the term matches no entity, fact type, or state name. Inference mode: the term is used in a requirement and defined nowhere in the deliverable |
| non-total state machine |
Each state or status field, and its transitions |
A listed state has no defined exit transition and is not marked terminal |
fact type with no constraint and no explicit [unconstrained] marker |
The Constraints cell of each fact type; in inference mode, each asserted relationship |
The cell is blank or absent. [unconstrained] does not fire it, and neither does generic-but-present text such as "standard validation" -- that is a stub for the rubric to charge, not an ambiguity finding here |
| alethic/deontic conflation on a load-bearing rule |
Each "shall" / "must" / "must not" the implementation has to enforce |
The rule carries no classification as alethic (cannot be otherwise -> schema constraint) or deontic (must not be otherwise -> validation rule or alert), and the two would compile to different code. If the classification does not change the code, the rule is not load-bearing -- do not report it |
| unstated temporality on a fact that visibly changes over time |
Facts the deliverable itself shows changing: price, status, assignment, address, role |
Neither the ontology nor the deliverable states whether the fact holds at an instant or over an interval, nor whether historisation is in scope this release |
| surviving homonym |
Terms used in more than one section |
Two usages resolve to different entities or different reference schemes and no split is recorded. The mirror case -- two terms, one meaning -- is reported under this category as a synonym |
Finding format:
[ONTOLOGY-<N>] <severity> | Category: <one of the seven above> | Section: <reference>
Term: "<the term, fact type, or rule as written>"
Ambiguity: <the competing readings, or the declaration that is missing>
Resolves to: <the ontology row or declaration that would close it>
Mode: <ontology: <path> | inference (no ontology found)>
Severity: in ontology mode, an unresolved entity with no reference scheme, surviving homonym, alethic/deontic conflation, or unstated temporality is a Blocker -- these four are the mandatory core, and each is a data migration once code exists. The other three are High or below unless the ambiguity would demonstrably produce wrong code. In inference mode nothing exceeds Medium.
Devil's Advocate Lens
The Devil's Advocate argues the opposite position and stress-tests decisions.
Checks for:
- Alternative approaches. "We chose X" -- why not Y? What was the trade-off analysis?
- Worst-case scenarios. What if this feature is used maliciously? At 100x expected scale? By a confused user?
- Stakeholder conflicts. Does this serve all stakeholders, or does it optimize for one at the expense of another?
- Future fragility. This design works now, but what known upcoming changes would break it?
- Reversibility. If this decision is wrong, how hard is it to undo?
- Second-order effects. If we do X, what does that imply for Y and Z?
Finding format:
[DEVIL-<N>] <severity> | Section: <reference>
Position: "<the decision or claim being challenged>"
Counter: <the opposing argument>
Risk if ignored: <what could go wrong>
Step 4: Severity Classification
Each finding is classified:
| Severity |
Meaning |
| Blocker |
Cannot proceed to implementation. Ambiguity or contradiction will cause incorrect code. |
| High |
Significant gap that will likely cause rework or defects if not addressed. |
| Medium |
Unclear area that could lead to misinterpretation. Should be clarified. |
| Low |
Minor improvement. Nice to have but not blocking. |
Step 5: Lead Judgment (Filter False Positives)
Before filtering, engage extended thinking to reason privately:
- Which findings would concretely cause wrong code to be written if left unresolved?
- Which Blockers can be safely downgraded without any implementation risk?
- Did the lenses miss anything by focusing on individual sections rather than the whole artifact?
- Do the Medium findings form a pattern that collectively deserves a High?
- Is the current Blocker count calibrated to genuine implementation risk, or to adversarial thoroughness?
Use that reasoning to guide the filter pass.
After thinking, apply lead judgment to filter results:
- Remove pedantic findings. If a finding is technically correct but practically irrelevant (e.g., "you said 'fast' but in context the SLA is clearly defined elsewhere"), discard it.
- Merge duplicates. If two lenses flag the same issue, keep the one with the better explanation. When one of them is the Semantic lens and the issue is a vocabulary defect, keep the
[ONTOLOGY-<N>] finding.
- Downgrade over-severity. If a finding is marked Blocker but the impact is actually limited, downgrade it.
- Preserve genuine issues. Do not filter findings just because they are uncomfortable. The point is to find real problems.
Mark filtered findings with a note: [Filtered: <reason>]
Step 6: Verdict
Calculate the verdict from unfiltered findings:
| Verdict |
Criteria |
| PASS |
0 Blockers, 0 High. Deliverable is ready for implementation. |
| CONTESTED |
0 Blockers, >=1 High. Deliverable needs targeted revisions. |
| REJECT |
>=1 Blocker. Deliverable has fundamental issues that must be resolved before implementation. |
Step 7: Report
BA Adversarial Review: <deliverable title or file>
Phase: <Discovery | Analysis | Specification | Validation>
Lenses: <list of lenses applied>
Ontology: <path to the ONTOLOGY.md checked against | none -- Semantic lens ran in inference mode>
Verdict: <PASS | CONTESTED | REJECT>
Findings: <total> (<N> Blocker, <N> High, <N> Medium, <N> Low)
Filtered: <N> findings removed by lead judgment
---
<findings grouped by lens, ordered by severity>
---
Summary
<2-3 sentence overall assessment>
Recommended Actions
1. <most critical action>
2. <next action>
...
Tracking: <ADO/Linear reference if provided>
Key Rules
- BA deliverables, not code. This skill reviews requirements, stories, and criteria. For code, use /skill:domain-review.
- Specific, evidence-based findings. Every finding must cite a specific section, quote the relevant text, and explain the issue concretely. "This could be clearer" is not a finding.
- Lead judgment is mandatory. Raw adversarial output is noisy. The filtering step separates signal from pedantry.
- "I would have written it differently" is NOT a finding. Style preferences are not defects. Only flag issues that would cause implementation problems.
- Respect the phase. Discovery deliverables are intentionally less precise than specifications. Apply phase-appropriate standards.
- Severity must be justified. A Blocker must explain what specific implementation harm results. If you cannot articulate the harm, it is not a Blocker.
Contract
- Inputs: a BA deliverable as a file path, inline text, or
--ado <id> / --linear <id> (delegates to /skill:work-item); optional --phase <phase>; optional --ontology <path>, defaulting to the deliverable's sibling docs/prds/<slug>/ONTOLOGY.md. Reads _internal/ontology-readiness for the semantic ambiguity categories and the ONTOLOGY.md format, and _internal/aers-readiness for the Required Sections list when the deliverable is a PRD or AERS.
- Preconditions: the deliverable is readable text; tracker auth if
--ado/--linear. No ontology is required -- its absence selects inference mode, it does not block the review.
- Outputs: a report per Step 7 carrying the phase, the lenses applied, the ontology path or
none, a verdict of PASS / CONTESTED / REJECT, and findings in the [SKEPTIC-<N>], [COHERENCE-<N>], [ONTOLOGY-<N>], and [DEVIL-<N>] formats, each with a severity and a cited section.
- Postconditions: the deliverable is not modified; findings are advisory. Filtered findings are shown with
[Filtered: <reason>] rather than deleted. The verdict follows Step 6 from the unfiltered findings only.
- Failure modes: deliverable unreadable → halt and report the file-access error, do not review from the filename. Ontology absent (no
--ontology, no sibling ONTOLOGY.md) → the Semantic lens runs in inference mode, caps its findings at Medium, and the report states it. Ontology present but unparseable → report it as a Blocker and say the Semantic lens could not run; do not fall back to inference and do not guess at the intended rows. No ontology verdict or score is computed here -- that is _internal/ontology-readiness' job.
1---2name: spec-review-adversarial-23description: Adversarially review PRDs, requirements, user stories, or acceptance criteria using 1–4 lens reviewers (Skeptic, Coherence, Semantic, Devil's Advocate). The Semantic lens checks the deliverable against its sibling ONTOLOGY.md. Returns PASS/CONTESTED/REJECT.4---567# /skill:spec-review-adversarial — Adversarial Review of Specifications89**Purpose:** Stress-test business analysis work products (requirements, user stories, acceptance criteria, process flows) by applying adversarial reviewer lenses. Finds gaps, contradictions, and ambiguities BEFORE they become code defects. This skill reviews BA deliverables, not code -- use /skill:domain-review for code.1011## When to Use1213- A BA has produced requirements, user stories, or acceptance criteria for review14- You want to validate a PRD or feature specification before implementation begins15- A work item's acceptance criteria need a quality check16- You are about to start a sprint and want to catch ambiguity early1718## When NOT to Use1920- You need to review code -- use /skill:domain-review21- You need to review a code review -- use /skill:review-gauntlet22- The deliverable is purely technical (architecture doc, API spec) -- use /skill:domain-review or a technical review2324## Usage2526```27/skill:spec-review-adversarial <file-or-text>28/skill:spec-review-adversarial docs/requirements/auth-flow.md29/skill:spec-review-adversarial --ado 1234530/skill:spec-review-adversarial --linear BF-4231/skill:spec-review-adversarial --phase discovery32/skill:spec-review-adversarial docs/prds/order-capture/PRD.md --ontology docs/prds/order-capture/ONTOLOGY.md33```3435## Arguments3637- `<file-or-text>` -- path to the BA deliverable or inline text to review38- `--ado <item-id>` -- fetch the work item from ADO and review its description + acceptance criteria39- `--linear <issue-id>` -- fetch the issue from Linear and review its description + acceptance criteria40- `--phase <phase>` -- override automatic phase detection (discovery, analysis, specification, validation)41- `--ontology <path>` -- path to the `ONTOLOGY.md` the Semantic lens checks against. Defaults to the deliverable's sibling `ONTOLOGY.md` (`docs/prds/<slug>/ONTOLOGY.md` when the deliverable lives in that folder). A legacy bare `.md` deliverable has no sibling, so the default resolves to nothing and the Semantic lens runs in inference mode.4243## Step 1: Load the Deliverable4445Obtain the BA work product:46471. If a file path is provided, Read the file482. If `--ado` or `--linear` is provided, use /skill:work-item to fetch it493. If inline text is provided, use that directly5051Identify the deliverable type:52- **Requirements document** -- contains "shall", "must", "requirement", numbered items53- **User stories** -- contains "As a ... I want ... so that"54- **Acceptance criteria** -- contains "Given/When/Then" or checkbox lists55- **Process flow** -- contains sequential steps, decision points, swim lanes56- **PRD** -- contains sections like Overview, Goals, User Personas, Features5758## Step 2: Detect Phase5960Determine the BA phase to select appropriate lenses. Auto-detect from deliverable type, or use `--phase` override:6162| Phase | Typical Deliverables | Lenses |63|-------|---------------------|--------|64| **Discovery** | Problem statement, stakeholder needs, market context | Skeptic, Devil's Advocate |65| **Analysis** | Requirements, process flows, gap analysis | Skeptic, Coherence, Semantic, Devil's Advocate |66| **Specification** | User stories, acceptance criteria, detailed requirements | Skeptic, Coherence, Semantic |67| **Validation** | Test plans mapped to requirements, traceability matrix | Coherence, Devil's Advocate |6869## Step 3: Apply Reviewer Lenses7071### Skeptic Lens7273The Skeptic questions every assumption and asks "how do you know?"7475Checks for:76- **Unsupported claims.** "Users prefer X" -- based on what evidence?77- **Vague quantifiers.** "Fast", "easy", "most users", "seamless" -- define the threshold78- **Missing metrics.** Success criteria without measurable targets79- **Assumed context.** References to systems, processes, or terms not defined in the document. Vocabulary gaps belong to the **Semantic Lens** -- raise them there as `[ONTOLOGY-<N>]`, not here80- **Happy path bias.** Only describes what happens when everything works. What about errors, edge cases, timeouts, partial failures?81- **Missing personas.** Who is "the user"? Are there different user types with different needs?8283Finding format:84```85[SKEPTIC-<N>] <severity> | Section: <reference>86 Claim: "<quoted text>"87 Challenge: <what is wrong or missing>88 Evidence needed: <what would resolve this>89```9091### Coherence Lens9293The Coherence reviewer checks internal consistency and completeness.9495Checks for:96- **Contradictions.** Section A says X, Section B says not-X97- **Gaps in flow.** Step 3 produces output Y, but Step 4 expects input Z98- **Undefined terms.** A term is used but never defined, or defined differently in different places. When the Semantic Lens is active it owns term resolution and homonyms -- raise those as `[ONTOLOGY-<N>]`, not here99- **Orphaned requirements.** A requirement is stated but no acceptance criteria cover it100- **Orphaned acceptance criteria.** AC exists but traces to no requirement101- **Missing states.** A status field has values A, B, C but the flow only describes transitions for A and B102- **Boundary ambiguity.** "Up to 10 items" -- is 10 included? What happens at 11?103- **Implicit ordering.** Steps described without specifying whether they are sequential, parallel, or unordered104- **Missing required sections.** When the deliverable is a **PRD or AERS**, check it against the Required Sections list in `_internal/aers-readiness`. Report each absent or stub section as a Coherence finding naming the section. Do not restate that skill's scoring -- cite it and report the gap. `Domain Ontology` is the one section whose absence is a Semantic finding rather than a Coherence one, because it is scored by the ontology check105106Finding format:107```108[COHERENCE-<N>] <severity> | Sections: <ref-A> vs <ref-B>109 Conflict: <what contradicts or is incomplete>110 Impact: <what goes wrong if this is not resolved>111 Suggestion: <how to fix>112```113114### Semantic Lens115116The Semantic reviewer checks that each term in the deliverable denotes exactly one thing, and that what the deliverable asserts about those things is identified, constrained, total, classified, and dated.117118**Resolve the mode first.** Before running any check:1191201. Use `--ontology <path>` if given.1212. Otherwise use the deliverable's sibling `ONTOLOGY.md` -- `docs/prds/<slug>/ONTOLOGY.md` when the deliverable lives in that folder. A legacy bare `.md` deliverable has no sibling.1223. If neither resolves to a readable file, run in **inference mode**.123124In **ontology mode** every check below is a lookup against the ontology: term resolution, constraint presence, and lifecycle totality are decided by whether a row exists and what it says. In **inference mode** the same checks run against vocabulary inferred from the deliverable itself; the reviewer cannot distinguish "term missing from the ontology" from "no ontology exists", so inference-mode findings are capped at **Medium** and the report must state that the lens ran in inference mode. If the ontology resolves to a file that does not parse as the `ONTOLOGY.md` format, report that as a Blocker and stop the lens -- do not fall back to inference and do not guess at the intended rows.125126The categories, the `ONTOLOGY.md` format, and the item-state vocabulary (`settled` / `deferred` / `unknown`) are defined in `_internal/ontology-readiness`. Read them there. This lens emits findings; it does not compute the `Ontology:` verdict or any score -- that belongs to the rubric and its callers.127128Checks -- one per high-risk semantic ambiguity category in `_internal/ontology-readiness` § *Automated ontology check*, in that order:129130| Category | Look at | Fires when |131|---|---|---|132| **entity with no reference scheme** | Each entity the deliverable defines or changes | Ontology mode: the entity's row has no reference scheme, or its reference scheme is `deferred`/`unknown`. Inference mode: the deliverable names the entity and never says what makes two mentions the same one |133| **term used in a functional requirement but absent from the ontology** | Every distinct noun and verb phrase in Functional Requirements | Ontology mode: the term matches no entity, fact type, or state name. Inference mode: the term is used in a requirement and defined nowhere in the deliverable |134| **non-total state machine** | Each state or status field, and its transitions | A listed state has no defined exit transition and is not marked terminal |135| **fact type with no constraint and no explicit `[unconstrained]` marker** | The Constraints cell of each fact type; in inference mode, each asserted relationship | The cell is blank or absent. `[unconstrained]` does not fire it, and neither does generic-but-present text such as "standard validation" -- that is a stub for the rubric to charge, not an ambiguity finding here |136| **alethic/deontic conflation on a load-bearing rule** | Each "shall" / "must" / "must not" the implementation has to enforce | The rule carries no classification as alethic (cannot be otherwise -> schema constraint) or deontic (must not be otherwise -> validation rule or alert), and the two would compile to different code. If the classification does not change the code, the rule is not load-bearing -- do not report it |137| **unstated temporality on a fact that visibly changes over time** | Facts the deliverable itself shows changing: price, status, assignment, address, role | Neither the ontology nor the deliverable states whether the fact holds at an instant or over an interval, nor whether historisation is in scope this release |138| **surviving homonym** | Terms used in more than one section | Two usages resolve to different entities or different reference schemes and no split is recorded. The mirror case -- two terms, one meaning -- is reported under this category as a synonym |139140Finding format:141```142[ONTOLOGY-<N>] <severity> | Category: <one of the seven above> | Section: <reference>143 Term: "<the term, fact type, or rule as written>"144 Ambiguity: <the competing readings, or the declaration that is missing>145 Resolves to: <the ontology row or declaration that would close it>146 Mode: <ontology: <path> | inference (no ontology found)>147```148149Severity: in ontology mode, an unresolved **entity with no reference scheme**, **surviving homonym**, **alethic/deontic conflation**, or **unstated temporality** is a Blocker -- these four are the mandatory core, and each is a data migration once code exists. The other three are High or below unless the ambiguity would demonstrably produce wrong code. In inference mode nothing exceeds Medium.150151### Devil's Advocate Lens152153The Devil's Advocate argues the opposite position and stress-tests decisions.154155Checks for:156- **Alternative approaches.** "We chose X" -- why not Y? What was the trade-off analysis?157- **Worst-case scenarios.** What if this feature is used maliciously? At 100x expected scale? By a confused user?158- **Stakeholder conflicts.** Does this serve all stakeholders, or does it optimize for one at the expense of another?159- **Future fragility.** This design works now, but what known upcoming changes would break it?160- **Reversibility.** If this decision is wrong, how hard is it to undo?161- **Second-order effects.** If we do X, what does that imply for Y and Z?162163Finding format:164```165[DEVIL-<N>] <severity> | Section: <reference>166 Position: "<the decision or claim being challenged>"167 Counter: <the opposing argument>168 Risk if ignored: <what could go wrong>169```170171## Step 4: Severity Classification172173Each finding is classified:174175| Severity | Meaning |176|----------|---------|177| **Blocker** | Cannot proceed to implementation. Ambiguity or contradiction will cause incorrect code. |178| **High** | Significant gap that will likely cause rework or defects if not addressed. |179| **Medium** | Unclear area that could lead to misinterpretation. Should be clarified. |180| **Low** | Minor improvement. Nice to have but not blocking. |181182## Step 5: Lead Judgment (Filter False Positives)183184Before filtering, engage extended thinking to reason privately:185- Which findings would concretely cause wrong code to be written if left unresolved?186- Which Blockers can be safely downgraded without any implementation risk?187- Did the lenses miss anything by focusing on individual sections rather than the whole artifact?188- Do the Medium findings form a pattern that collectively deserves a High?189- Is the current Blocker count calibrated to genuine implementation risk, or to adversarial thoroughness?190191Use that reasoning to guide the filter pass.192193After thinking, apply lead judgment to filter results:1941951. **Remove pedantic findings.** If a finding is technically correct but practically irrelevant (e.g., "you said 'fast' but in context the SLA is clearly defined elsewhere"), discard it.1962. **Merge duplicates.** If two lenses flag the same issue, keep the one with the better explanation. When one of them is the Semantic lens and the issue is a vocabulary defect, keep the `[ONTOLOGY-<N>]` finding.1973. **Downgrade over-severity.** If a finding is marked Blocker but the impact is actually limited, downgrade it.1984. **Preserve genuine issues.** Do not filter findings just because they are uncomfortable. The point is to find real problems.199200Mark filtered findings with a note: `[Filtered: <reason>]`201202## Step 6: Verdict203204Calculate the verdict from unfiltered findings:205206| Verdict | Criteria |207|---------|----------|208| **PASS** | 0 Blockers, 0 High. Deliverable is ready for implementation. |209| **CONTESTED** | 0 Blockers, >=1 High. Deliverable needs targeted revisions. |210| **REJECT** | >=1 Blocker. Deliverable has fundamental issues that must be resolved before implementation. |211212## Step 7: Report213214```215BA Adversarial Review: <deliverable title or file>216217 Phase: <Discovery | Analysis | Specification | Validation>218 Lenses: <list of lenses applied>219 Ontology: <path to the ONTOLOGY.md checked against | none -- Semantic lens ran in inference mode>220 Verdict: <PASS | CONTESTED | REJECT>221222Findings: <total> (<N> Blocker, <N> High, <N> Medium, <N> Low)223Filtered: <N> findings removed by lead judgment224225---226227<findings grouped by lens, ordered by severity>228229---230231Summary232 <2-3 sentence overall assessment>233234Recommended Actions235 1. <most critical action>236 2. <next action>237 ...238239Tracking: <ADO/Linear reference if provided>240```241242## Key Rules2432441. **BA deliverables, not code.** This skill reviews requirements, stories, and criteria. For code, use /skill:domain-review.2452. **Specific, evidence-based findings.** Every finding must cite a specific section, quote the relevant text, and explain the issue concretely. "This could be clearer" is not a finding.2463. **Lead judgment is mandatory.** Raw adversarial output is noisy. The filtering step separates signal from pedantry.2474. **"I would have written it differently" is NOT a finding.** Style preferences are not defects. Only flag issues that would cause implementation problems.2485. **Respect the phase.** Discovery deliverables are intentionally less precise than specifications. Apply phase-appropriate standards.2496. **Severity must be justified.** A Blocker must explain what specific implementation harm results. If you cannot articulate the harm, it is not a Blocker.250251## Contract252253- **Inputs:** a BA deliverable as a file path, inline text, or `--ado <id>` / `--linear <id>` (delegates to `/skill:work-item`); optional `--phase <phase>`; optional `--ontology <path>`, defaulting to the deliverable's sibling `docs/prds/<slug>/ONTOLOGY.md`. Reads `_internal/ontology-readiness` for the semantic ambiguity categories and the `ONTOLOGY.md` format, and `_internal/aers-readiness` for the Required Sections list when the deliverable is a PRD or AERS.254- **Preconditions:** the deliverable is readable text; tracker auth if `--ado`/`--linear`. No ontology is required -- its absence selects inference mode, it does not block the review.255- **Outputs:** a report per Step 7 carrying the phase, the lenses applied, the ontology path or `none`, a verdict of `PASS` / `CONTESTED` / `REJECT`, and findings in the `[SKEPTIC-<N>]`, `[COHERENCE-<N>]`, `[ONTOLOGY-<N>]`, and `[DEVIL-<N>]` formats, each with a severity and a cited section.256- **Postconditions:** the deliverable is not modified; findings are advisory. Filtered findings are shown with `[Filtered: <reason>]` rather than deleted. The verdict follows Step 6 from the unfiltered findings only.257- **Failure modes:** deliverable unreadable → halt and report the file-access error, do not review from the filename. Ontology absent (no `--ontology`, no sibling `ONTOLOGY.md`) → the Semantic lens runs in inference mode, caps its findings at Medium, and the report states it. Ontology present but unparseable → report it as a Blocker and say the Semantic lens could not run; do not fall back to inference and do not guess at the intended rows. No ontology verdict or score is computed here -- that is `_internal/ontology-readiness`' job.