| name | narrative-opposition-web |
| description | Builds a four-corner opposition web for narrative nonfiction and stops the writer from casting whoever lost as the villain. Runs Truby's four-corner worksheet (shared central moral problem, per-corner value clusters, distinct routes of attack, corner-to-corner conflict), the best-possible-opponent audit (same goal, necessity, relentlessness, value conflict, the double, power parity, justification in the opponent's own voice), the Opponent Warrant evidence test that demotes undocumented antagonists to rivals or constraints, and a drive-section collapse check that catches a web that was decorative. Use when planning a piece with competing parties, when an antagonist feels flat or cartoonish, when the protagonist is a system rather than a person, or when user mentions opposition web, four-corner opposition, antagonist, opponent, villain, steelman the other side, character web, who is the bad guy here. |
Narrative Opposition Web
Table of Contents
Related skills: Use dialectical-mapping-steelmanning for deep steelmanning of one opposing position, writing-structure-planner for the sequence the web will be delivered in, deliberation-debate-red-teaming for attacking your own thesis, causal-inference-root-cause when the question is causation rather than opposition. Use systemic-protagonist for the full agency-repair table and the responsibility-laundering check that this skill's system section only summarises, narrative-arc-mapping for the mandatory-seven triage that consumes the warranted opponent.
Attribution caveat, carry it into any output: four-corner opposition, the same-goal rule, and the opponent's justification requirement are John Truby's (The Anatomy of Story). Everything numeric in this skill — three appearances per corner, three-of-three warrant evidence, four-corner maximum — is a derived operational default set for auditability, not a published threshold from Truby or anyone else. State it as a default you chose, never as a rule someone established. The word "satellite" for a corner that only opposes the protagonist is this skill's label, not a term of art.
Core Principles
- Corners are defined relationally, never individually: a corner is not a party you find interesting. It is a distinct answer to one shared question. Build the question first.
- Same goal or no opponent: two parties who want different things can both win and there is no opposition. Name the single scarce thing both are fighting to control, or demote the party.
- Losing is not a warrant: the entity that lost is the default villain and the default villain is almost always wrong. Opposition must be evidenced, not inferred from the outcome.
- A corner that only opposes the protagonist is a satellite: real corners collide with each other too. If C and D never touch, you have a two-part opposition wearing four hats.
- In a system narrative the opponent is usually a constraint: physics, capital cost, regulation, latency, yield, a legal deadline. Filling the slot with a person because the slot exists is the failure, not the fix.
- The empty slot is a finding: "no adversary appears in the record; the binding constraint was X" is a successful output. Report it in the same voice as a filled slot.
- Justification is the test of understanding: if you cannot write the opponent's case so a smart person holding it recognises themselves, you do not yet know what the fight was about.
Workflow
Copy this checklist and track your progress:
Opposition Web Progress:
- [ ] Step 1: State the central moral problem as one question
- [ ] Step 2: Warrant every candidate before it becomes a corner
- [ ] Step 3: Fill the four-corner worksheet and push to corners
- [ ] Step 4: Run the best-possible-opponent audit on corner B
- [ ] Step 5: Run the delete test, the exposure check, and the drive collapse check
Step 1: State the central moral problem as one question
Step 1.1: Write one question that every corner will answer differently. It must be answerable in more than one defensible way. Good: "How much of a scarce good do you let spoil in order to reach the people hardest to reach?" Bad: "Was the ministry negligent?" — that has one defensible answer and will produce a prosecution, not a web.
Step 1.2: Sanity-check it against the material. If every party in the record gave the same answer, there is no web here. Say so and stop; a piece can be an explanation rather than a conflict.
Step 1.3: If the material is value-neutral — a benchmark result, a pricing mechanism, a taxonomy — record "no moral problem available; this is explanatory material" and run only the constraint inventory in resources/opponent-warrant.md.
Step 2: Warrant every candidate before it becomes a corner
Step 2.1: List every candidate opponent. For each, gather three independent evidence types: COMPETITION (both sought the same scarce object at overlapping times), AWARENESS (each knew of the other), DIRECTED ACTION (at least one act by A the record shows was taken because of B).
Step 2.2: Tier each candidate per Opponent Warrant Tiers. Three of three is an opponent, two is a rival, one or zero is environmental pressure. Record the tier and the citation for each evidence type.
Step 2.3: Apply the verb constraints for the tier immediately, in your notes, before any prose exists. Verbs leak; fixing them later is harder than assigning them now.
Step 2.4: If no candidate reaches two of three, do not proceed to a web. Go to the mystery substitute in resources/opponent-warrant.md.
Step 3: Fill the four-corner worksheet and push to corners
Step 3.1: Place the protagonist at A and the highest-warranted opponent at B. Choose C and D by a single rule: a different ROUTE of attack on the protagonist's weakness. Not a different opinion — a different mechanism.
Step 3.2: Fill every field for all four corners using resources/four-corner-worksheet.md. Values are stated as goods, three to five per corner, and every value must be traceable to something that corner said or did with a citation. A value you inferred is an inference; label it one or cut it.
Step 3.3: PUSH CHECK. Compare each pair of corners and name the sharpest difference. Any value shared between two corners means one of them changes or gets cut.
Step 3.4: CONFLICT CHECK. For each pair, state what they fight over and cite it. A corner that conflicts only with A is a satellite. Promote it by finding its real quarrel with C or D, or cut it and run an honest three-corner web.
Step 4: Run the best-possible-opponent audit on corner B
Step 4.1: Work the seven gates in resources/opponent-warrant.md: same goal, necessity, relentlessness, value conflict, the double, power parity, justification. When corner B is a constraint rather than a party, use the system variant given under gates 5, 6 and 7. A constraint has no mirror, no status and no voice, and forcing one on it is the anthropomorphism this skill bans.
Step 4.2: Write the justification paragraph in the opponent's own voice, first person, no hedging, no self-incrimination, no villain tell. Then apply the RECOGNITION TEST: would a competent person who holds this position read it and say "yes, that is why I did it"? If not, rewrite. This paragraph is a mandatory artifact and is delivered alongside the web, not discarded after the check.
Step 4.3: FALSIFICATION PASS. If B's justification is more persuasive than A's, you have assigned the roles backwards. Swap them and re-derive rather than weakening B.
Step 5: Run the delete test, the exposure check, and the drive collapse check
Step 5.1: DELETE TEST. Remove corner D. Does any argument in the piece break? If nothing breaks, D was decoration. Give it a genuine competing value cluster or drop to three corners and say so.
Step 5.2: EXPOSURE CHECK. Flag every corner occupied by a real named living person or an active institution. Do not adjudicate the framing yourself. Surface it: the party, the slot, the adverse inference being made, the evidence behind it, and the fact that a subject who gave an interview consented to an interview and not to a structural role. Hand the decision to a human.
Step 5.3: COLLAPSE CHECK, run on the finished draft and not before. Audit for corners C and D in the DRIVE section specifically — the middle, after the plan and before the resolution. Count appearances per corner in the drive only. Default target: at least three, and at least one in the final third. Corners appearing only in setup mean the web was decorative and the prose collapsed to A-versus-B. See resources/four-corner-worksheet.md for the audit procedure.
Validate using resources/evaluators/rubric_narrative_opposition_web.json. Minimum standard: average score >= 3.5.
Opponent Warrant Tiers
No antagonist without documented opposition. Tier decides the verbs, and the verbs are the claim.
| Evidence present | Tier | Permitted verbs | Forbidden |
|---|
| Competition + awareness + directed action (3/3) | OPPONENT | targeted, countered, retaliated against, undercut, moved to block | — |
| Any two of three | RIVAL | competed with, gained share against, bid against, arrived at the same time | any verb implying the act was aimed at the other party |
| One or none | ENVIRONMENT / CONSTRAINT | coincided with, constrained, bound, was present during, set the ceiling on | every transitive verb of intent |
Worked contrast, drawn from a municipal transit case:
- Bad: "The state highway department moved to strangle the streetcar line." Evidence: the department funded a parallel arterial the same year ridership fell. That is competition and coincidence. No awareness document, no "because."
- Good: "The arterial opened in the same fiscal year ridership fell by a fifth. No document in the department's files mentions the streetcar line; the ceiling on the line's fare box was set by a road it was never told about." Same facts, honest tier, and the sentence is more interesting because the indifference is the point.
Mirror failure to watch: refusing to name a real, documented rivalry because a thin archive is missing one of the three evidence types. Two of three plus an explicit note on what is missing is an honest rival, not a demotion to weather.
When the Protagonist Is a System
A market, a protocol, an institution, a codebase, a supply chain, an ecosystem. The web still works because its primitives are functional, but three things change.
The B slot is usually a constraint, not a party. Physics, capital cost, a regulatory regime, latency, yield, a legal deadline, a 2-to-8-degree cold-chain tolerance. Fill it with a named force plus a documented mechanism. Never with an anthropomorphised abstraction. "The market wanted consolidation" is a causal claim wearing a sentence. Cash it out or delete it. Cashed out: "clearing fees fell below the cost of running an independent desk, and eleven of fourteen desks closed within two years." Full repair table in systemic-protagonist.
Corners get value clusters by delegation. A constraint has no values. Give the corner a named human or institutional carrier who demonstrably held the position, and let the carrier's documented statements be the value cluster. If no carrier exists, the corner is environment and belongs in the constraint inventory, not the web.
Systemic framing must be additive to individual accountability, never a substitute. "The system failed" is often a sentence written to avoid naming a person. For every systemic attribution, ask whether a specific named actor had the authority and the information to do otherwise. If yes, name them. Run this in both directions: the frame that dissolves a decision-maker into a structure is the same error as the frame that dissolves a structure into a villain. Full responsibility-laundering check in systemic-protagonist.
Do not translate archetypes (King, Trickster, Mentor) onto institutions. They are the most psychology-dependent part of the apparatus and produce nonsense here.
Do not let the institutions-as-larger-forces frame become the finding. It is a stance, not a discovery. If every corner's attempt to change the system fails in your account, you have written inevitability with the sign flipped. Include at least one documented partial success, or state explicitly the conditions under which this system has changed before.
Guardrails
Requirements:
- Warrant before web: every corner carries a tier and a citation per evidence type before it is written about. Untiered corners do not enter the draft.
- Justification is a deliverable: corner B's first-person justification paragraph ships with the web and passes the recognition test. No paragraph and no documented carrier, no opponent — route the corner to the constraint inventory instead.
- Values are cited, not inferred: each of the three-to-five values per corner points at something that party said or did. Inferred values are labelled as inferences in the worksheet.
- Empty and absent are first-class outputs: "no opponent in the record," "three corners, not four," "no moral problem available" are complete answers. Report them with the same confidence as a filled web.
- Named living parties are escalated, not resolved: adverse inference about a real person or an active institution is surfaced for human decision. The skill does not adjudicate defamation risk or consent.
- The collapse check runs on the draft: the web is not validated by the worksheet. It is validated by counting C and D in the drive section of finished prose.
Common pitfalls:
- Casting the loser as the opponent, then backfilling stupidity or malice as motive. This is bad craft and bad analysis at once.
- Padding to four corners with generic placeholders — "regulators," "consumers," "the community" — that carry no independent value system. Three real corners beat four with a mannequin.
- Writing the justification paragraph with a villain tell inside it ("we knew the risk and shipped anyway"). Opponents do not narrate their own guilt.
- Manufacturing a same-goal rivalry between parties who were operating in different markets and never contested the same scarce thing.
- Over-correcting into agentless passive prose ("share was observed to shift") to avoid intentional verbs. The goal is to relocate agency onto whoever has it, not to delete agency. If agentless passives went up after your verb pass, the pass failed.
- Letting the double reversal degrade into "both sides had a point." A real synthesis produces a THIRD position neither corner held at the start, stateable in one sentence and defensible on the evidence.
- Treating a constraint as a villain because a villain is easier to narrate. A yield ceiling has no motive and needs none.
Quick Reference
Key resources:
- resources/four-corner-worksheet.md: the full worksheet fields, push and conflict and delete tests, the drive collapse audit procedure, three worked webs (open-source governance, public-health logistics, a scientific replication controversy)
- resources/opponent-warrant.md: warrant evidence test, verb tier table with worked repairs, the seven-gate best-possible-opponent audit, justification paragraph templates with strawman-versus-steelman contrasts, the mystery substitute, the system constraint inventory, the exposure escalation format
- resources/evaluators/rubric_narrative_opposition_web.json: quality scoring
Inputs required:
- The research corpus, with sources that can be cited per claim
- The protagonist and its weakness, already fixed (a route of attack has to attack something specific)
- Whether the protagonist is a person or a system
- The draft, if the collapse check is being run
Outputs produced:
- The central moral problem as one question, or a recorded finding that none exists
- A warrant table: candidate, evidence type present, citation, tier, permitted verbs
- The four-corner worksheet, filled, with push/conflict/delete test results
- Corner B's justification paragraph in first person, recognition-tested
- A constraint inventory when the protagonist is a system
- An exposure list of named living parties in adversarial slots, escalated for human decision
- A collapse-check report: appearances per corner in the drive section