# Arc Validation Gate

> **Quality gate for 60-episode arc structure before promotion.** Applied after structure section (6.1-6.5) is complete, before promotion to scripting.

---

## Purpose

This gate ensures the 60-episode arc has sufficient dramatic intensity, action density, and cliffhanger quality to sustain audience engagement across a full series. It catches structural weakness before episodes are generated.

**When to run:** After completing Section 7 (Structure) in STATUS.md, before promotion.

---

## Tier 1: Hard Gates

Must pass ALL gates. Any failure blocks promotion.

### 1.1 Cliffhanger Intensity

**Overall Minimum: 9.0/10**
**Per-Sequence Minimum: 8.5/10**

Score each episode's cliffhanger on a 1-10 scale:

| Score | Definition |
|-------|------------|
| 10 | Visceral, unexpected, maximum stakes — impossible to stop watching |
| 9 | Extremely intense — physical or emotional stakes at peak |
| 8 | High tension — clear threat or revelation |
| 7 | Moderate tension — curiosity but not urgency |
| 6 | Mild tension — could wait to continue |
| ≤5 | Weak — no urgency to continue |

**Three Types of 9/10 Cliffhangers:**

| Type | Definition | Example |
|------|------------|---------|
| **Mid-Action** | Cut during the crisis, outcome unknown | Knife swinging toward face — cut |
| **Consequence** | Irreversible thing happened, cut before fallout | Knife connects, blood spray — cut before we see the damage |
| **Revelation** | Bomb drops, cut before reaction | "You were never prisoners — you were livestock." — cut |

**Gate Logic:**
- Calculate overall average cliffhanger intensity
- Calculate per-sequence average (8 sequences)
- **FAIL** if overall average < 9.0
- **FAIL** if ANY sequence average < 8.5

### 1.2 Action Density

**Minimum: 20 action sequences across 60 episodes**

Action sequences include:
- Combat (physical confrontation)
- Chase (pursuit under threat)
- Escape (fleeing danger)
- Heist/Infiltration (stealth under pressure)
- Survival (environmental threat)
- Confrontation (physical standoff, even if words exchange)

**Distribution requirement:** No sequence (of 8) can have fewer than 1 action episode.

**Gate Logic:**
- Count total action beats marked in arc
- **FAIL** if fewer than 20
- **FAIL** if any sequence has zero action

### 1.3 Emotional Beat Schedule

**Required beats at scheduled episodes:**

| Episode | Beat | Requirement |
|---------|------|-------------|
| 10 | FIRST_CRACK | First vulnerability shown, relationship shifts from transaction |
| 15 | THRESHOLD | Point of no return — protagonist crosses threshold |
| 20 | DEEPENING | Investment despite themselves |
| 26 | VULNERABILITY | First expressed care (verbalized, even awkwardly) |
| 30 | MIDPOINT | World/self fundamentally different |
| 32-33 | FRACTURE | Identity crisis — core belief challenged |
| 36 | BETRAYAL_DOUBT | Trust tested or masks down |
| 42 | COST | Loyalty test — choose relationship over goal |
| 45 | ALL_IS_LOST | Lowest point, relationship threatened |
| 50 | RECONCILIATION | Connection survives crisis |
| 59-60 | RESOLUTION | Primary ache resolved (catharsis) |

> **Canonical beat names:** See `/CONSTANTS.md` → Emotional Beat Schedule

**Gate Logic:**
- Verify each beat is present in arc at designated episode (±2 episodes)
- **FAIL** if any beat is missing

### 1.4 Cliffhanger Type Distribution

**No more than 3 consecutive same-type cliffhangers**

Types: Mid-Action, Consequence, Revelation, Aftermath

**Gate Logic:**
- Scan arc for consecutive same-type runs
- **FAIL** if any run exceeds 3

### 1.5 Plant/Payoff Threads

**Minimum Requirements:**
- At least 6 major threads defined
- At least 1 Object thread (physical item that recurs)
- At least 1 Phrase thread (dialogue that transforms)
- At least 1 Image thread (visual motif that echoes)
- At least 1 Echo moment (scene that mirrors earlier scene with transformed meaning)
- Every plant must have a payoff defined
- No orphan plants (setups without payoffs)
- No unearned payoffs (resolutions without setups)

**Gate Logic:**
- Verify `plant_payoff_plan.md` exists
- Count thread types
- Verify plant → payoff mapping complete
- **FAIL** if fewer than 6 threads
- **FAIL** if any thread type missing (Object, Phrase, Image)
- **FAIL** if no echo moment defined
- **FAIL** if orphan plants or unearned payoffs exist

---

## Tier 2: Scored Gates

Rate each 1-10. Require minimum average of 7.0.

### 2.1 Tension Escalation (1-10)

*Does tension build across sequences?*
- 10: Relentless escalation with strategic release valves
- 7: Generally builds with occasional plateaus
- 4: Flat or inconsistent tension curve
- 1: No discernible escalation pattern

### 2.2 Reversal Quality (1-10)

*How surprising and earned are major reversals?*
- 10: Reversals shock yet feel inevitable in retrospect
- 7: Reversals surprise but logic is clear
- 4: Reversals feel forced or predictable
- 1: No real reversals, events feel linear

### 2.3 Stakes Escalation (1-10)

*Do stakes genuinely increase?*
- 10: From personal to existential, each act raises the bet
- 7: Clear increase from act to act
- 4: Stakes remain relatively constant
- 1: Stakes feel artificial or decrease

### 2.4 Variety Score (1-10)

*How varied are episode types, locations, situations?*
- 10: No two episodes feel similar, constant freshness
- 7: Good variety with occasional repetition
- 4: Noticeable repetition in structure or setting
- 1: Monotonous, same beat repeated

### 2.5 Pacing Balance (1-10)

*Is there rhythm between intensity and breath?*
- 10: Perfect alternation — audience can recover but never relax
- 7: Generally good rhythm with some pacing issues
- 4: Either relentless exhaustion or too many slow patches
- 1: No pacing awareness

**Gate Logic:**
- Calculate average of 5 scores
- **FAIL** if average < 7.0
- **FLAG** any individual score < 6

---

## Tier 3: Flags

Flagged for attention but don't block promotion.

| Flag | Trigger |
|------|---------|
| Dialogue-heavy cliffhanger cluster | More than 2 consecutive aftermath cliffhangers |
| Action desert | Any 10-episode stretch with fewer than 2 action beats |
| Emotional beat bunching | More than 2 emotional beats in a 5-episode span |
| Repetitive locations | Same location in more than 5 consecutive episodes |
| Missing foreshadowing | Major reveal without plant in prior 10 episodes |

---

## Execution Workflow

### Step 1: Score Each Episode's Cliffhanger

For each of 60 episodes:
1. Rate cliffhanger intensity 1-10
2. Classify type (Mid-Action / Consequence / Revelation / Aftermath)

### Step 2: Calculate Tier 1 Metrics

- Overall cliffhanger average
- Per-sequence cliffhanger averages (8 sequences)
- Total action count
- Action distribution by sequence
- Emotional beat presence check
- Consecutive same-type run check

### Step 3: Run Tier 2 Scoring

Score each of the 5 criteria 1-10 with rationale.

### Step 4: Check Flags

Scan for flag conditions.

### Step 5: Generate Report

---

## Output Format

```
═══════════════════════════════════════════════════════════════
ARC VALIDATION GATE: [PROJECT]
═══════════════════════════════════════════════════════════════

TIER 1: HARD GATES
──────────────────────────────────────────────────────────────

CLIFFHANGER INTENSITY
  Overall Average:     [X.X]/10 {✓ ≥9.0 or ✗ <9.0}

  Per-Sequence (see SCRIPTING_REQUIREMENTS.md §7.2):
    SEQ 1 (Ep 1-8):    [X.X]/10 {✓ or ✗}  Status Quo & Catalyst
    SEQ 2 (Ep 9-15):   [X.X]/10 {✓ or ✗}  The Predicament
    SEQ 3 (Ep 16-23):  [X.X]/10 {✓ or ✗}  Fun & Games
    SEQ 4 (Ep 24-30):  [X.X]/10 {✓ or ✗}  Midpoint
    SEQ 5 (Ep 31-38):  [X.X]/10 {✓ or ✗}  Bad Guys Close In
    SEQ 6 (Ep 39-45):  [X.X]/10 {✓ or ✗}  All Is Lost
    SEQ 7 (Ep 46-53):  [X.X]/10 {✓ or ✗}  The Rally
    SEQ 8 (Ep 54-60):  [X.X]/10 {✓ or ✗}  Final Battle

ACTION DENSITY
  Total Action Beats:  [N]/20 minimum {✓ or ✗}
  Distribution:        {✓ All sequences have ≥1 or ✗ Sequence X has 0}

EMOTIONAL BEATS (see CONSTANTS.md → Emotional Beat Schedule)
  [✓/✗] Ep 10: FIRST_CRACK
  [✓/✗] Ep 15: THRESHOLD
  [✓/✗] Ep 20: DEEPENING
  [✓/✗] Ep 26: VULNERABILITY
  [✓/✗] Ep 30: MIDPOINT
  [✓/✗] Ep 32-33: FRACTURE
  [✓/✗] Ep 36: BETRAYAL_DOUBT
  [✓/✗] Ep 42: COST
  [✓/✗] Ep 45: ALL_IS_LOST
  [✓/✗] Ep 50: RECONCILIATION
  [✓/✗] Ep 59-60: RESOLUTION

CLIFFHANGER DISTRIBUTION
  Max consecutive same-type: [N] {✓ ≤3 or ✗ >3}

PLANT/PAYOFF THREADS
  Total threads:        [N] {✓ ≥6 or ✗ <6}
  Object threads:       [N] {✓ ≥1 or ✗ 0}
  Phrase threads:       [N] {✓ ≥1 or ✗ 0}
  Image threads:        [N] {✓ ≥1 or ✗ 0}
  Echo moments:         [N] {✓ ≥1 or ✗ 0}
  Orphan plants:        [N] {✓ 0 or ✗ >0}
  Unearned payoffs:     [N] {✓ 0 or ✗ >0}

TIER 1 RESULT: {PASS or FAIL}

──────────────────────────────────────────────────────────────
TIER 2: SCORED GATES (minimum avg: 7.0)
──────────────────────────────────────────────────────────────

Tension Escalation:    [X]/10 [brief note]
Reversal Quality:      [X]/10 [brief note]
Stakes Escalation:     [X]/10 [brief note]
Variety Score:         [X]/10 [brief note]
Pacing Balance:        [X]/10 [brief note]

AVERAGE: [X.X]/10 {✓ ≥7.0 or ✗ <7.0}

TIER 2 RESULT: {PASS or FAIL}

──────────────────────────────────────────────────────────────
TIER 3: FLAGS
──────────────────────────────────────────────────────────────

[⚠ Flag 1 — description]
[⚠ Flag 2 — description]
[or: No flags triggered]

═══════════════════════════════════════════════════════════════
FINAL RESULT: {✅ READY FOR PROMOTION / ❌ NOT READY}
═══════════════════════════════════════════════════════════════

[If NOT READY:]
FIX REQUIRED:
  1. [Specific fix needed]
  2. [Specific fix needed]

[If READY:]
Proceed to: /validate [project]
Then: Promote [project] to production
```

---

## Integration Points

### In Development Workflow

```
/develop [project]
  → Complete Sections 1-6 (Character-First through World)
  → Complete Section 7 (Structure)
  → RUN BEHAVIORAL DNA GATE        ← python3 .claude/hooks/validate_behavioral_dna.py
  → RUN ARC VALIDATION GATE        ← python3 /tools/validate_arc.py ./[project]
  → RUN PAIRWISE SCORING           ← python3 /tools/validate_arc.py ./[project] --pairwise
  → /validate [project]
  → Promote [project] to scripting
```

### In STATUS.md

Add after Section 7 (Structure):

```markdown
## VALIDATION GATES

### Behavioral DNA Gate
- [ ] `python3 .claude/hooks/validate_behavioral_dna.py` passes

### Arc Validation Gate
- [ ] `python3 /tools/validate_arc.py ./[project]` passes (Tier 1)
- [ ] `python3 /tools/validate_arc.py ./[project] --pairwise` scored (Tier 2)
- [ ] Cliffhanger intensity ≥9.0 overall, ≥8.5 per sequence
- [ ] Action density ≥20 beats, all sequences covered
- [ ] All 11 emotional beats scheduled
- [ ] No more than 3 consecutive same-type cliffhangers
- [ ] Tier 2 average ≥7.0
```

### In Promotion Workflow

Arc Validation Gate must pass before `/validate` will accept the project.

---

## Failure Guidance

### Cliffhanger Intensity Too Low

**Overall < 9.0:**
- Audit each sequence for weak endings
- Upgrade "aftermath" endings to "consequence" or "mid-action"
- Add physical threat, stakes, or revelation to weak episodes

**Sequence < 8.5:**
- Focus on the specific sequence
- Ensure at least 50% of episodes end mid-crisis
- Check for too many "talking" cliffhangers

### Insufficient Action

- Add chase, fight, or escape to slow sequences
- Convert dialogue scenes to "dialogue during action"
- Ensure every 3-episode span has movement/threat

### Missing Emotional Beats

- Check if beat exists but at wrong episode
- Add the beat at the designated episode
- Ensure both plot AND emotional function are present

### Tier 2 Score < 7.0

- Identify lowest-scoring dimension
- Apply specific remediation:
  - **Tension**: Add obstacles, narrow escapes, ticking clocks
  - **Reversals**: Plant earlier, make reveals more consequential
  - **Stakes**: Escalate what can be lost at each act
  - **Variety**: Change locations, action types, emotional modes
  - **Pacing**: Insert breathers after intensity peaks

---

*Established: 2026-01-15*
*Integration: validate_agent.md, PROMOTE_TO_SCRIPTING.md, STATUS.md*
