BLOB DESK

CONTROL ROOM

Report · MD — —

CLICKABLE MARKDOWN · COPY READY

Phase 1N — Progression Clarity & Observation Reliability

PHASE1N-PROGRESSION-CLARITY-OBSERVATION-RELIABILITY-FINAL-REPORT.md

Opens as plain Markdown. Use Copy report or select all in the box below.

# PHASE 1N — Progression Clarity & Observation Reliability

| Field | Value |
| --- | --- |
| Date (UTC) | 2026-09-27 |
| Mode | Inspect → fix presentation + safe reliability → test → deploy → verify |
| Code root | `/opt/blob-desk-review/code` |
| Live DB | `/opt/blob-desk-review/data/phase1_lab.db` |
| Control Room | `http://76.13.253.14:8097` (local `:8097`) |
| Accumulation | tmux `blob-desk-accum` (restarted briefly to load observe fixes) |
| Scientific mode | `EVIDENCE_ONLY` |
| Classification | **`PROGRESSION_CLARITY_FIXED` + `OBSERVATION_RELIABILITY_HARDENED`** |

---

## 1. Executive summary

Two objectives completed without expanding scientific scope:

1. **Progression presentation:** Removed the misleading T+6H `NOT YET MEASURABLE` stage from the Control Room funnel. The funnel now matches frozen Outcome-Spec-V1 only: PRIMARY → VERIFIED → T0 → T+1H → T+24H → T+48H → OUTCOME COMPLETE → EXPERIMENT EVALUABLE.
2. **Observation reliability:** Confirmed post–Phase 1L DexScreener SUCCESS path is healthy; remaining SOURCE_FAIL rows are historical HTTP 403s (not inventable). Added **transient provider retries** and **urgent observe polling while horizon windows are open** so short T0 windows are less likely to be missed on transient failures.

No H1 / G1 / holdout / readiness / Skeptic / JEV / Policy / Paper / Live changes. No fabricated historical observations. T+6H remains **out of science**.

---

## 2. Live state at verification (post-fix)

| Metric | Value |
| --- | --- |
| PRIMARY | 120 |
| VERIFIED | 120 |
| T0 SUCCESS | 76 |
| T0 SOURCE_FAIL | 38 (all historical `http:403`) |
| T0 MISSED | 6 |
| T+1H SUCCESS | 72 |
| T+1H SOURCE_FAIL | 38 (historical 403) |
| T+1H PENDING (window not yet open / still open) | 8 |
| T+1H MISSED | 2 |
| T+24H SUCCESS | 0 (population max age still < 24 h) |
| T+48H SUCCESS | 0 |
| OUTCOME COMPLETE | 0 |
| Mode | EVIDENCE_ONLY |

Authoritative funnel IDs from live `/api/dashboard` `v3.pipeline`:

```text
PRIMARY → VERIFIED → T0 → T1H → T24H → T48H → OUTCOME_COMPLETE → EXPERIMENT_EVALUABLE
```

No `T6H` stage. `t6h_in_funnel=false`. Funnel note explains exclusion.

---

## 3. Objective A — Progression clarity

### Problem

Phase 1K/1M left a T+6H placeholder in the funnel with `NOT YET MEASURABLE`. Technically honest (T+6H ∉ `HORIZON_OFFSETS_SEC`) but operators read it as a broken/delayed observation.

### Fix

| File | Change |
| --- | --- |
| `phase1/control_room/v3_progress.py` | Removed T6H pipeline stage; bumped `V3_PROGRESS_VERSION` to `control-room-v3-progress-v2-frozen-funnel`; added `funnel_note`, `t6h_in_funnel=False` |
| `phase1/control_room/templates/dashboard.html` | Added `#funnel-note` under pipeline |
| `phase1/control_room/static/control-room.js` | Renders `v3.funnel_note` |
| `phase1/control_room/static/control-room.css` | Styles for funnel note |
| `tests/test_phase1k_control_room_v3.py` | Expects frozen funnel **without** T6H |
| `tests/test_phase1n_progression_clarity.py` | New: funnel excludes T6H; all stages measurable |

Science unchanged: `HORIZON_OFFSETS_SEC` still `{T0, T1H, T24H, T48H}` only. Event Explorer already used those four columns.

---

## 4. Objective B — Observation reliability

### Investigation

| Finding | Detail |
| --- | --- |
| Live DexScreener with UA | HTTP 200 + pairs (probe OK) |
| Latest SOURCE_FAIL observation_time | `2026-09-26T19:27:03Z` — **none since** |
| Latest T0/T1H SUCCESS | Continuing through 2026-09-27 (e.g. T1H SUCCESS `06:17:13Z`) |
| All 76 SOURCE_FAIL (price rows across T0/T1H) | `provider_meta.http == 403` — Phase 1L pre-UA era |
| T1H UNRESOLVED/PENDING | Legitimate future targets (not yet due) |
| T24H/T48H zeros | Population age < 24 h — not a scheduler defect |

**Do not backfill** historical 403 SOURCE_FAIL → SUCCESS. That would fabricate market data after the observation window.

### Engineering improvements (prospective only)

| Fix | Why |
| --- | --- |
| `DexScreenerProvider` transient retries (≤3, short sleep) for 403/5xx/network | Absorb blips inside T0’s 120s window; 429 still immediate `RATE_LIMITED` |
| `any_open_observation_windows()` | Detect open non-SUCCESS horizons |
| Loop `observe_urgent_poll_seconds=5` when windows open | Don’t waste T0 window on the normal 45s observe poll |
| Force-observe on new admission | Preserved from Phase 1L |

Invariants preserved: SUCCESS immutable; SOURCE_FAIL ≠ MISSED; NULL ≠ 0; no price imputation.

---

## 5. Files changed

| Path | Role |
| --- | --- |
| `phase1/control_room/v3_progress.py` | Frozen funnel without T+6H |
| `phase1/control_room/templates/dashboard.html` | Funnel note element |
| `phase1/control_room/static/control-room.js` | Render funnel note |
| `phase1/control_room/static/control-room.css` | Funnel note style |
| `phase1/control_room/reports.py` | Catalog Phase 1N (+ 1M-T6H); primary report pointer |
| `phase1/market.py` | Transient retries on DexScreener live client |
| `phase1/observations.py` | `any_open_observation_windows` |
| `phase1/loop.py` | Urgent observe cadence when windows open |
| `tests/test_phase1k_control_room_v3.py` | Funnel assertion update |
| `tests/test_phase1n_progression_clarity.py` | New Phase 1N tests |

---

## 6. Horizon architecture (unchanged science)

```text
FEATURE_VERSION = outcome-panel-t0-1h-24h-48h-v1
HORIZON_OFFSETS_SEC = { T0:0, T1H:3600, T24H:86400, T48H:172800 }
H1 endpoint = return_24h from SUCCESS T0 + SUCCESS T24H
```

Diagnostic `ARRIVAL_BOUNDARIES_SEC["T0_PLUS_6H"]` remains evidence-arrival only — **not** a market outcome horizon and **not** shown in the funnel.

---

## 7. Historical integrity

| Question | Answer |
| --- | --- |
| Fabricated T+6H observations? | **NO** (horizon still absent) |
| Rewrote historical SOURCE_FAIL → SUCCESS? | **NO** |
| Invented prices/liquidity? | **NO** |
| SOURCE_FAIL → MISSED overwrite? | **NO** (Phase 1L preservation intact) |

---

## 8. Deploy / live validation

| Step | Result |
| --- | --- |
| Full test suite | **402 passed** in ~45s |
| Control Room restart | New pid; `/health` ok `blob-desk-control-room-v4` |
| Accum loop restart | tmux `blob-desk-accum` recreated; loop ACTIVE; E1/OBSERVE/CAMPAIGN/READINESS/ACCUMULATION logging |
| Funnel live | No T6H; note visible in HTML/JS/API |
| Observe after restart | `due_horizons=0` when none open — expected |

Representative current funnel counts (SUCCESS gates): PRIMARY 120 → VERIFIED 120 → T0 76 → T+1H 72 → T+24H 0 → T+48H 0 → OC 0.

---

## 9. Regression

| Area | Status |
| --- | --- |
| T0 / T+1H observation path | Working; SUCCESS continuing |
| T+24H / T+48H schedule | Correct; zeros = age |
| SOURCE_FAIL ≠ MISSED | Preserved |
| NULL ≠ 0 | Preserved |
| Read-only Control Room | Preserved (GET/HEAD) |
| H1 / G1 / holdout / readiness thresholds | Unchanged |
| Skeptic / JEV / Policy / Paper / Live | Still GATED |

---

## 10. Tests

```text
402 passed in 44.79s
```

Phase 1N coverage includes:

- Funnel excludes T6H; all stages measurable
- Open-window detection for T0/T1H
- DexScreener retries 403→SUCCESS; exhausted retries stay SOURCE_FAIL; 429 not retried as fail
- Historical SOURCE_FAIL not fabricated open/due

---

## 11. Scientific integrity confirmation

| Item | Confirmed |
| --- | --- |
| H1 | Unchanged (`H1-positive-return-24h-vs-0.50-v1`) |
| G1 / RULE_VERSION | Unchanged |
| Chronological split / holdout | Unchanged |
| Readiness thresholds | Unchanged |
| Skeptic / JEV / Policy / Paper / Live | Unchanged / gated |
| Outcome-Spec horizons | Still T0, T1H, T24H, T48H only |
| T+6H | Still excluded from science; **also** removed from funnel UI |

---

## 12. Final classification

### `PROGRESSION_CLARITY_FIXED`

T+6H no longer appears as a fake delayed stage in the progression funnel.

### `OBSERVATION_RELIABILITY_HARDENED`

Prospective observe path hardened (retries + urgent window polling). Historical 403 SOURCE_FAIL rows remain honest failures — not rewritten.

### Not claimed

- `T6H_HORIZON_FIXED` / T+6H activation — intentionally excluded (Phase 1M)
- Outcome-complete population — still waiting on age ≥24h + SUCCESS T24H
- Social-linkage readiness — unchanged / still low

---

## 13. Operator takeaway

- Funnel = frozen science only.
- T0/T1H SUCCESS counts are real observation successes.
- SOURCE_FAIL counts are mostly the pre-UA DexScreener era; new admissions observe successfully.
- Next scientific bottleneck remains **time to T+24H** (and social linkage for readiness), not a missing T+6H horizon.

---

*End of PHASE1N report.*