# SRP Exp002 — Episode trace audit + null freeze (v0.3.1)

**Hub job:** `b73c292a` · **Astra:** `92358493` / `339cb28d` (Hub `3c8f210c` / `c234c2a0`) superseding `5a018515`
**Agent:** grok · **MODEL_CHANGE:** NO · **Inference:** NOT AUTHORIZED
**Ownership note (Hub 8ae6adb1):** Grok=Exp002 audit; Claude=E2 replication; Codex proposals→Claude/Astra review; no M1 independent replication from derived pairs
**Date:** 2026-09-09 ~5:45 PM PT (independent-review addendum)
**v0.3.1 status:** PROPOSAL (not accepted) · **DECISION:** PRESERVE_SPARSE_SAMPLE_GATE; AUDIT_ONLY

## Controlling decision

`CHANGES_REQUESTED_BEFORE_INFERENTIAL_COMPUTE` / `EXP002_EPISODE_GATE_PARTIAL_PASS_INFERENCE_NOT_YET_AUTHORIZED`

`NEXT_ACTION: COMPLETE_EPISODE_TRACE_AUDIT_AND_FREEZE_ONE_NULL_MODEL`

Audit/descriptive ONLY — **no** ratchet statistic, secular-trend significance, support/not-support, or scoring.

## Input provenance

- Path: `/workspace/srp-observatory/data/raw/l1/pew_individual_and_smoothed.csv`
- SHA256: `c32f7f02ceed3fc647f14e3afa2c09e9d6affff07887c5c240641d902705de9d`
- n_polls=163 · 1958-12-01 → 2025-09-28 · metric `individual_pct`
- Note: Compiled individual-poll research input (Pew-compiled series). Distinct from frozen production L1-US-v0.1 score series — not a replacement.

## Headline counts

| Metric | Value |
|--------|-------|
| N_ep (published look-ahead gate) | 6 |
| N_ep (strict frozen forward confirmation) | 5 |
| E005 disposition | `E005_RECLASSIFIED_CONFIRMATION_ORDERING_FAILURE` |
| Admissible B1 (strict) | **4** |
| Admissible B1 if E005 kept | 5 |
| Right-censored confirmed | 0 |
| Null frozen for review | `EXP002_NULL_V0_3_1_POLL_INDEX_BLOCK_BOOTSTRAP` |
| Ratchet statistic | NOT_COMPUTED |

Six confirmed (look-ahead gate) ≠ six usable independent observations. Under strict frozen confirmation ordering **or** full forward-only rerun, N_ep=5 &lt; 6 → **INSUFFICIENT_EPISODES** (sparse gate PRESERVED; do not compute observed ratchet; do not lower gate to B1≥4). Admissible B1=4. Full-machine forward-only **merges** look-ahead E005+E006 (row-delete ≠ rerun). Shared B0/EP/B1 overlaps further reduce independence. Null remains PROPOSAL, revised, **NOT RUN**.

## 1. Ordered poll-level traces (every episode)

Full machine-readable traces: `exp002_episode_poll_traces.json` / `.csv` (baseline + episode + B1 sections).

### E001 — RECOVERED · onset 1990-10-28 → detect 1991-01-27

- B0=41.0 · xmin=25.0 · δ=16.0 · r50=33.0
- Confirmation decide 1990-12-01 · rule `immediate_next_le_B0_minus_D` · follow-ups ['1990-12-01', '1991-01-27', '1991-03-01'] values [28.0, 46.0, 45.0]
- Ordering: confirm_on_or_after_recovery=False · confirm follow-ups after recovery=['1991-03-01']
- B1 valid=True B1=28.5 reason=None span=688 maxgap=232

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 1987-10-18 | 41.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1988-01-23 | 39.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1988-10-15 | 41.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1988-11-10 | 44.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1989-01-15 | 44.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1989-06-29 | 35.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1990-01-16 | 38.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1990-09-06 | 42.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 1990-10-28 | 25.0 | CBS/NYT | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (25.0 <= 33.0) |
| episode | 1990-12-01 | 28.0 | NES | CONFIRMATION_AND_IN_EPISODE | IN_EPISODE→IN_EPISODE | CONFIRMATION_immediate_next_le_B0_minus_D |
| episode | 1991-01-27 | 46.0 | ABC/POST | RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (46.0 >= 33.0) |
| b1 | 1991-03-01 | 45.0 | ABC/POST | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1991-03-06 | 47.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1991-10-20 | 35.0 | ABC/POST | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1992-06-08 | 23.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1992-10-15 | 29.0 | NES | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1992-10-23 | 22.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1993-01-14 | 24.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1993-01-17 | 28.0 | ABC/POST | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

### E002 — RECOVERED · onset 1992-06-08 → detect 1996-05-06

- B0=40.0 · xmin=17.0 · δ=23.0 · r50=28.5
- Confirmation decide 1992-10-15 · rule `immediate_next_le_B0_minus_D` · follow-ups ['1992-10-15', '1992-10-23', '1993-01-14'] values [29.0, 22.0, 24.0]
- Ordering: confirm_on_or_after_recovery=False · confirm follow-ups after recovery=[]
- B1 valid=True B1=29.0 reason=None span=617 maxgap=156

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 1990-01-16 | 38.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1990-09-06 | 42.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1990-10-28 | 25.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1990-12-01 | 28.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1991-01-27 | 46.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1991-03-01 | 45.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1991-03-06 | 47.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 1991-10-20 | 35.0 | ABC/POST | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 1992-06-08 | 23.0 | GALLUP | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (23.0 <= 32.0) |
| episode | 1992-10-15 | 29.0 | NES | CONFIRMATION_AND_IN_EPISODE | IN_EPISODE→IN_EPISODE | CONFIRMATION_immediate_next_le_B0_minus_D |
| episode | 1992-10-23 | 22.0 | CBS/NYT | TROUGH_UPDATE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE |
| episode | 1993-01-14 | 24.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1993-01-17 | 28.0 | ABC/POST | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1993-03-24 | 22.0 | GALLUP | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1994-01-20 | 24.0 | ABC/POST | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1994-01-30 | 19.0 | GALLUP | TROUGH_UPDATE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE |
| episode | 1994-06-06 | 17.0 | GALLUP | TROUGH_UPDATE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE |
| episode | 1994-10-23 | 22.0 | ABC/POST | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1994-10-29 | 22.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1994-12-01 | 22.0 | NES | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1995-02-22 | 18.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1995-03-19 | 22.0 | ABC/POST | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1995-08-05 | 20.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1995-08-07 | 22.0 | GALLUP | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1995-11-19 | 25.0 | ABC/POST | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 1996-05-06 | 34.0 | ABC/POST | RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (34.0 >= 28.5) |
| b1 | 1996-05-12 | 27.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1996-10-15 | 33.0 | NES | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1996-11-02 | 25.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1997-01-14 | 23.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1997-06-01 | 32.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1997-08-27 | 22.0 | ABC/POST | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1997-10-31 | 39.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 1998-01-19 | 31.0 | ABC/POST | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

### E003 — RECOVERED · onset 2003-10-26 → detect 2004-10-15

- B0=45.0 · xmin=36.0 · δ=9.0 · r50=40.5
- Confirmation decide 2004-03-21 · rule `immediate_next_le_B0_minus_D` · follow-ups ['2004-03-21', '2004-07-15', '2004-10-15'] values [36.0, 40.0, 46.0]
- Ordering: confirm_on_or_after_recovery=False · confirm follow-ups after recovery=[]
- B1 valid=True B1=31.5 reason=None span=453 maxgap=222

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 2001-12-07 | 48.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-01-24 | 46.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-06-17 | 44.0 | GALLUP | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-07-13 | 38.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-09-02 | 38.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-09-04 | 46.0 | GALLUP | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-10-15 | 55.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2003-07-27 | 36.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 2003-10-26 | 37.0 | GALLUP | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (37.0 <= 37.0) |
| episode | 2004-03-21 | 36.0 | Pew Research Center | TROUGH_UPDATE+CONFIRMATION_DECIDE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE;CONFIRMATION_immediate_next_le_B0_minus_D |
| episode | 2004-07-15 | 40.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2004-10-15 | 46.0 | NES | RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (46.0 >= 40.5) |
| b1 | 2005-06-19 | 30.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2005-09-09 | 29.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2005-09-11 | 31.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2005-12-02 | 32.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2006-01-06 | 32.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2006-01-20 | 32.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2006-02-05 | 34.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2006-09-15 | 28.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

### E004 — RECOVERED · onset 2005-06-19 → detect 2006-02-05

- B0=39.0 · xmin=29.0 · δ=10.0 · r50=34.0
- Confirmation decide 2005-09-09 · rule `immediate_next_le_B0_minus_D` · follow-ups ['2005-09-09', '2005-09-11', '2005-12-02'] values [29.0, 31.0, 32.0]
- Ordering: confirm_on_or_after_recovery=False · confirm follow-ups after recovery=[]
- B1 valid=True B1=27.0 reason=None span=1001 maxgap=462

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 2002-09-02 | 38.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-09-04 | 46.0 | GALLUP | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2002-10-15 | 55.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2003-07-27 | 36.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2003-10-26 | 37.0 | GALLUP | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2004-03-21 | 36.0 | Pew Research Center | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2004-07-15 | 40.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2004-10-15 | 46.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 2005-06-19 | 30.0 | GALLUP | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (30.0 <= 31.0) |
| episode | 2005-09-09 | 29.0 | CBS/NYT | TROUGH_UPDATE+CONFIRMATION_DECIDE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE;CONFIRMATION_immediate_next_le_B0_minus_D |
| episode | 2005-09-11 | 31.0 | Pew Research Center | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2005-12-02 | 32.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2006-01-06 | 32.0 | GALLUP | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2006-01-20 | 32.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2006-02-05 | 34.0 | Pew Research Center | RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (34.0 >= 34.0) |
| b1 | 2006-09-15 | 28.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2006-10-08 | 29.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2007-01-09 | 31.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2007-07-09 | 24.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2008-10-13 | 17.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2008-10-15 | 31.0 | NES | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2008-12-21 | 26.0 | CNN | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2009-06-12 | 20.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

### E005 — RECOVERED · onset 2008-10-13 → detect 2008-10-15

- B0=31.5 · xmin=17.0 · δ=14.5 · r50=24.25
- Confirmation decide 2008-10-15 · rule `K_of_3_le_B0_minus_D_half` · follow-ups ['2008-10-15', '2008-12-21', '2009-06-12'] values [31.0, 26.0, 20.0]
- Ordering: confirm_on_or_after_recovery=True · confirm follow-ups after recovery=['2008-12-21', '2009-06-12']
- B1 valid=True B1=21.0 reason=None span=455 maxgap=173

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 2005-12-02 | 32.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-01-06 | 32.0 | GALLUP | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-01-20 | 32.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-02-05 | 34.0 | Pew Research Center | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-09-15 | 28.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-10-08 | 29.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2007-01-09 | 31.0 | Pew Research Center | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2007-07-09 | 24.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 2008-10-13 | 17.0 | CBS/NYT | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (17.0 <= 23.5) |
| episode | 2008-10-15 | 31.0 | NES | CONFIRMATION_DECIDE_AND_RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (31.0 >= 24.25);CONFIRMATION_K_of_3_le_B0_minus_D_half |
| b1 | 2008-12-21 | 26.0 | CNN | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2009-06-12 | 20.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2009-08-31 | 24.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2009-12-20 | 20.0 | CNN | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-01-10 | 19.0 | GALLUP | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-02-05 | 19.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-02-12 | 26.0 | CNN | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-03-21 | 22.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

### E006 — RECOVERED · onset 2009-06-12 → detect 2010-02-12

- B0=28.5 · xmin=19.0 · δ=9.5 · r50=23.75
- Confirmation decide 2009-08-31 · rule `K_of_3_le_B0_minus_D_half` · follow-ups ['2009-08-31', '2009-12-20', '2010-01-10'] values [24.0, 20.0, 19.0]
- Ordering: confirm_on_or_after_recovery=False · confirm follow-ups after recovery=[]
- B1 valid=False B1=None reason=fail_min_span span=344 maxgap=149

| section | date | value | source | role | state_before→after | rule_fired |
|---------|------|-------|--------|------|--------------------|------------|
| baseline | 2006-02-05 | 34.0 | Pew Research Center | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-09-15 | 28.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2006-10-08 | 29.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2007-01-09 | 31.0 | Pew Research Center | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2007-07-09 | 24.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2008-10-13 | 17.0 | CBS/NYT | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2008-10-15 | 31.0 | NES | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| baseline | 2008-12-21 | 26.0 | CNN | BASELINE | SEEK_ONSET→SEEK_ONSET | baseline_window_M8 |
| episode | 2009-06-12 | 20.0 | CBS/NYT | ONSET | SEEK_ONSET→PENDING_CONFIRM | onset_x_le_B0_minus_D (20.0 <= 20.5) |
| episode | 2009-08-31 | 24.0 | CBS/NYT | CONFIRMATION_AND_IN_EPISODE | IN_EPISODE→IN_EPISODE | CONFIRMATION_K_of_3_le_B0_minus_D_half |
| episode | 2009-12-20 | 20.0 | CNN | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2010-01-10 | 19.0 | GALLUP | TROUGH_UPDATE | IN_EPISODE→IN_EPISODE | MERGE_RESTART_deeper_onset_sized_drop;RUNNING_MIN_UPDATE |
| episode | 2010-02-05 | 19.0 | CBS/NYT | IN_EPISODE | IN_EPISODE→IN_EPISODE | None |
| episode | 2010-02-12 | 26.0 | CNN | RECOVERY_DETECT | IN_EPISODE→RECOVERED | RECOVERY_x_ge_r50 (26.0 >= 23.75) |
| b1 | 2010-03-21 | 22.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-04-05 | 25.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-04-05 | 20.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-09-01 | 25.0 | CNN | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-09-06 | 24.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-10-01 | 18.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2010-10-21 | 22.0 | CBS/NYT | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |
| b1 | 2011-02-28 | 29.0 | Pew Research Center | B1 | RECOVERED→RECOVERED | B1_window_M8_post_detection |

## 2. E005 confirming timestamps + frozen-protocol disposition

- **Disposition:** `E005_RECLASSIFIED_CONFIRMATION_ORDERING_FAILURE` / `INVALIDATED_CONFIRMATION_AFTER_RECOVERY_CROSSING`
- Frozen protocol permits retrospective confirmation? **False**
- Basis: v0.3 §4.1 states SEEK_ONSET→IN_EPISODE→(RECOVERED|CENSORED); §4.2 confirmation gates entry to IN_EPISODE; §4.3 recovery is an IN_EPISODE update. No clause authorizes confirming an episode with observations after a recovery detection. Gate script look-ahead over all within-540d follow-ups is an implementation choice not written into frozen text.
- Rationale: Under look-ahead gate: onset 2008-10-13 x=17; recovery detect 2008-10-15 x=31 (>= r50=24.25). Immediate-next confirm fails (31 > B0-D=23.5). K-of-3 confirm uses follow-ups ['2008-10-15', '2008-12-21', '2009-06-12'] values [31.0, 26.0, 20.0], of which polls after recovery are required to reach K=2. Frozen v0.3 does not permit retrospective confirmation. Therefore E005 is invalidated under frozen forward chronology — NOT arbitrarily excluded; retained in ledger with this disposition.
- Forward-only note: Forward-only confirmation cannot decide at 2008-10-15 (only 1 follow-up; immediate-next fails). K-of-3 first decidable when 3rd follow-up arrives (2009-06-12), which is after the Oct15 crossing. Ambiguity preserved as protocol issue for v0.3.1 clarification — not silently re-forced to N_ep=6.

Window polls:

| date | value | source |
|------|-------|--------|
| 2007-01-09 | 31.0 | Pew Research Center |
| 2007-07-09 | 24.0 | CBS/NYT |
| 2008-10-13 | 17.0 | CBS/NYT |
| 2008-10-15 | 31.0 | NES |
| 2008-12-21 | 26.0 | CNN |
| 2009-06-12 | 20.0 | CBS/NYT |
| 2009-08-31 | 24.0 | CBS/NYT |
| 2009-12-20 | 20.0 | CNN |
| 2010-01-10 | 19.0 | GALLUP |
| 2010-02-05 | 19.0 | CBS/NYT |

## 3. B1 admissibility + overlap

| episode | B0 | B1 | cadence valid | admissible strict | notes |
|---------|----|----|---------------|-------------------|-------|
| E001 | 41.0 | 28.5 | True | **True** | — |
| E002 | 40.0 | 29.0 | True | **True** | — |
| E003 | 45.0 | 31.5 | True | **True** | — |
| E004 | 39.0 | 27.0 | True | **True** | — |
| E005 | 31.5 | 21.0 | True | **False** | E005 invalidated |
| E006 | 28.5 | None | False | **False** | fail_min_span |

**Admissible B1 count (strict) = 4**

Overlap records (shared polls across episode B0/EP/B1 windows): **22** — see JSON for dates. Independence is not automatic from N_ep=6.

## 4. Post-2010 candidate ledger

Summary counts: `{'INVALIDATED_CONFIRMATION_ORDERING': 1, 'MERGED_IN_EPISODE': 1, 'RECOVERY_DETECT': 1, 'UNCONFIRMED': 2, 'END_OF_SERIES': 1, 'RIGHT_CENSORED_COUNT': 1}`

| date | disposition | episode | detail |
|------|-------------|---------|--------|
| 2008-10-13 | INVALIDATED_CONFIRMATION_ORDERING | E005 | Pre-2010 onset; listed because audit reclassification affects post-gate usable counts. Confirmation used post-recovery follow-ups. |
| 2010-01-10 | MERGED_IN_EPISODE | E006 | deeper onset-sized drop while IN_EPISODE x=19.0 |
| 2010-02-12 | RECOVERY_DETECT | E006 | detection on/after 2010-01-01 |
| 2011-09-23 | UNCONFIRMED |  | unconfirmed B0=23.0 elapsed=11d |
| 2011-10-19 | UNCONFIRMED |  | unconfirmed B0=21.0 elapsed=378d |
| 2025-09-28 | END_OF_SERIES |  | Series ends 2025-09-28; no open confirmed episode at EOF → zero right-censored confirmed episodes. |
| 2025-09-28 | RIGHT_CENSORED_COUNT |  | Zero right-censored confirmed episodes because every confirmed episode under the published look-ahead gate reached a 50% recovery detection before series end. Post-2010 unconfirmed onset candidates were discarded as UNCONFIRMED (not censored episodes). Censoring applies only to confirmed IN_EPISODE trajectories that never cross r50 by EOF/H; unconfirmed onsets are not episodes and are not right-censored. |

### Zero right-censored explanation

Zero right-censored confirmed episodes because every confirmed episode under the published look-ahead gate reached a 50% recovery detection before series end. Post-2010 unconfirmed onset candidates were discarded as UNCONFIRMED (not censored episodes). Censoring applies only to confirmed IN_EPISODE trajectories that never cross r50 by EOF/H; unconfirmed onsets are not episodes and are not right-censored.

Only two post-2010 cadence-eligible onset-sized candidates exist (2011-09-23, 2011-10-19); both **UNCONFIRMED**. No post-2010 `REJECTED_BASELINE_INVALID` onset-sized rows. Unconfirmed onsets are not censored episodes.

## 5. Frozen null model (ONE; for independent review — NOT RUN)

**ID:** `EXP002_NULL_V0_3_1_POLL_INDEX_BLOCK_BOOTSTRAP`

**One-liner:** Poll-index block bootstrap L_block=8, n_sim=5000, seed=20260909 (PCG64); values reshuffled in blocks onto fixed field_dates (cadence preserved); re-run frozen episode machine; statistic=mean ΔB over admissible B1; one-sided left-tail p=(1+#{ΔB_sim≤ΔB_obs})/(1+n_valid_sim); Type-I calibration required before any claim; **observed ΔB not computed here**.

### Parameters

```json
{
  "L_block": 8,
  "L_block_rationale": "Equals baseline window M=8 so blocks match the minimum local dependence scale of the baseline estimator; preserves short-run serial structure without calendar-day interpolation.",
  "L_block_sensitivity_registered_not_primary": [
    6,
    10
  ],
  "n_simulations": 5000,
  "seed": 20260909,
  "rng": "numpy.random.Generator(numpy.random.PCG64(seed))",
  "preserve_cadence": true,
  "preserve_field_dates": true,
  "value_resampling_axis": "poll_index_blocks",
  "confirmation_rule_binding": "MUST use the Astra-reviewed v0.3.1 confirmation clarification; do not run inference under unresolved E005 look-ahead ambiguity.",
  "episode_machine_thresholds": {
    "D": 8,
    "K": 2,
    "M": 8,
    "MIN_SPAN": 365,
    "MAX_SPAN": 2920,
    "G_max": 730,
    "confirm_days": 540,
    "H": 3650
  },
  "admissible_B1_definition": "RECOVERED episode with B1 window of M polls immediately after detection satisfying min/max span and G_max; episode not INVALIDATED under confirmation-ordering rule."
}
```

### Algorithm steps

- 1. Work on the ordered poll series x[0..n-1] with irregular field_dates (cadence fixed).
- 2. Form overlapping blocks of length L_block polls on the poll-index axis (not calendar days).
- 3. Draw with replacement floor(n/L_block) blocks and concatenate; trim/pad to length n preserving the original date vector (values reshuffled in blocks onto fixed dates).
- 4. On each bootstrap series, run the SAME frozen episode machine (D,K,M,spans,G_max,confirm≤540d) under the reviewed confirmation rule (pending v0.3.1 clarification).
- 5. For each sim with ≥1 admissible B1 episode, compute mean ΔB_sim; if zero admissible B1, record as NULL_SIM_INSUFFICIENT (excluded from percentile denominator but counted in failure tallies).
- 6. p-value = (1 + #{sim: ΔB_sim <= ΔB_obs}) / (1 + n_valid_sim) — one-sided toward more-negative ΔB (ratchet direction). Two-sided also reported as descriptive sensitivity only.

### p-value

{
  "primary": "one_sided_left_tail_ratchet_direction",
  "formula": "p = (1 + count(\u0394B_sim <= \u0394B_obs)) / (1 + n_valid_sim)",
  "n_valid_sim_excludes": "sims with zero admissible B1 episodes",
  "two_sided_sensitivity": "p_2 = (1 + count(|\u0394B_sim| >= |\u0394B_obs|)) / (1 + n_valid_sim)"
}

### Calibration + failure rule

Before authorizing observed ΔB test: run Type-I calibration on synthetic series with known mean-reverting / no-ratchet truth (AR(1)-like residual shuffle preserving marginal variance and original cadence) using SAME null; require empirical Type-I at α=0.05 within [0.02, 0.08] over ≥1000 synthetic truths, else NULL_VALIDITY_UNPROVEN and no inferential claim.

FAIL if: (a) Type-I calibration outside [0.02, 0.08]; (b) n_valid_sim < 0.8 * n_simulations; (c) observed N_ep_confirmed < 6 OR admissible B1 < 6 (**original sparse gate** — prior draft B1<4 lowered gate REJECTED); (d) confirmation-ordering / full-machine semantics still unresolved; (e) any threshold retuned after seeing ΔB_obs. On FAIL → publish NULL_VALIDITY_UNPROVEN / INSUFFICIENT_EPISODES; do NOT claim ratchet support/not-support; do NOT compute observed ratchet.

Selection basis: Predeclared by v0.3 §5–§6: primary null = poll-index block bootstrap preserving gaps / irregular cadence. NOT chosen after seeing ΔB. Irregular phase-randomization explicitly NOT primary.

## 6. Protocol versioning

- v0.3 protocol file **preserved**
- Clarifications versioned as **v0.3.1** in `SRP_EXPERIMENT_002_PROTOCOL_CLARIFICATION_V0_3_1.md`
- Thresholds D/K/M/spans/G_max **unchanged**

## Artifacts

```
/workspace/srp-observatory/data/snapshots/gates_20260909/exp002_trace_audit_v031
  exp002_audit_summary.json
  exp002_b1_admissibility.csv
  exp002_b1_admissibility.json
  exp002_episode_poll_traces.csv
  exp002_episode_poll_traces.json
  exp002_episode_summaries.json
  exp002_forward_only_machine_comparison.json
  exp002_null_model_freeze_v031.json
  exp002_post2010_candidate_ledger.csv
  exp002_post2010_candidate_ledger.json
```


## 7. Independent review addendum (PRESERVE_SPARSE_SAMPLE_GATE)

See `SRP_EXP002_INDEPENDENT_REVIEW_SPARSE_GATE_V0_3_1.md` for FIX vs DEBATE table, 155↔163 hashes, E005→E006 cascade verification, competing explanations, and revised null notes (still not run).

Additional artifacts:
- `exp002_source_count_155_vs_163.json`
- `exp002_e005_e006_cascade_check.json`
- revised `exp002_null_model_freeze_v031.json` (PROPOSAL_REVISED_NOT_RUN)

## Return to Astra

REVIEW_BY=ASTRA_OR_INDEPENDENT_CODEX. Inferential compute remains blocked. Sparse gate FAILS (N_ep=5<6). v0.3.1 remains PROPOSAL. Confirmation semantics unresolved between hybrid invalidate vs full forward-only (discriminating synthetic audit proposed).
