Real recorded data
Klein's Pollution Solution — Project Promised Land
Retrospective Case Study: 2026 Upper East Side Legionnaires' Disease Cluster
Run date: 2026-10-16 · Instrument: Klein detection engine v23.3 (frozen) · Configuration: ABSOLUTE_LIMIT = 0 — Tier 1 disabled, Tiers 2–5 active (spike / wave / disruption / coherence). Identical configuration to the Yap Island dengue 2011 threshold-off ablation.
Question: Using only data available as the outbreak developed, when would the frozen detector first have produced an anomaly signal, and how does that compare with NYC's official recognition on July 2, 2026?
Headline result
The detector's first alert associated with the UES outbreak is a Tier-2 spike in MMWR week 26 (Jun 28 – Jul 4, 2026) — the same week in which NYC announced the cluster on July 2.
- Lead time vs. official recognition: 0 days (the alert and the announcement fall in the same reporting week; week-close is +2 days after the announcement).
- The detector did not beat July 2. NYC recognized this outbreak unusually early — at two confirmed cases, below the normal three-case community-cluster threshold and far below the statistical excursion the frozen engine can register against citywide background (~2–13 cases/week baseline).
- The detector did independently confirm the outbreak contemporaneously and flagged all three genuine NYC community clusters in the series — Harlem (Aug 2025), UES (Jul 2026), South Bronx (Sep 2026) — each in its announcement week.
- A contaminated-baseline control confirms the design constraint: running the same engine on the DOHMH cluster-only daily series (baseline = outbreak rising edge) produces zero detections. Baseline integrity is what makes the primary result meaningful.
- Robustness sweep (§5): across every functional baseline configuration — 13 pre-outbreak-history lengths plus the locked rolling-baseline Air Mode — the first cluster-associated alert remains W26. The limit is the data's weekly, citywide resolution, not detector initialization.
- Event history does not rescue an earlier alert (§6): a baseline drawn from the post-recovery quiet period sharpens discrimination but still fires at W26; a baseline carrying the 2025 Harlem event delays or masks the next one. What matters is which history calibrates the detector, not how much has elapsed.
- Cross-portfolio pattern (§7): every genuine early warning in the portfolio (Delhi +35h, Yap dengue +70d, Geneva +37d, SARS +4d) sits on hourly-or-daily, spatially local, physically direct measurements; every simultaneous result sits on weekly aggregated downstream-outcome series. Early-warning lead time tracks precursor observability — a testable engineering specification, not an inconsistency in the detector.
- Harlem 2025 reopened (§9.1): applying the emergence-window attribution rule, the same frozen run produced spikes 3 and 2 weeks before NYC's Jul 25, 2025 recognition — inside the outbreak's plausible exposure window and during documented source-tower disinfectant failure. Candidate precursors, not confirmed; unprovable at citywide resolution, but not dismissible either.
1. Data
1.1 Primary detector input (the baseline-compliant series)
NYC publishes no pre-outbreak daily or neighborhood-resolution legionellosis series (checked: DOHMH annual surveillance report is annual only; EpiQuery is query-on-demand; the cluster epi curve starts 6/23). The longest defensible continuous series over one surveillance population is:
| Series | Incident weekly legionellosis cases, New York City reporting area |
| Source | CDC NNDSS Weekly Data, data.cdc.gov dataset x9gk-5huc, label=Legionellosis, states=NEW YORK CITY |
| Span | MMWR 2022-W01 (ending 2022-01-08) → 2026-W40 (ending 2026-10-10), 249 weeks |
| Derivation | new_cases = first difference of source column m3 (cumulative YTD, revised counts). Provisional m1 column is missing ~40% of weeks and was not used. |
| Imputation | 7 year-start weeks preceding each year's first reported cumulative are cumulative 0 by definition — flagged imputed_zero=1, no other imputation |
| File | klein_input_nyc_legionellosis_weekly.csv |
This satisfies the baseline requirement: 4½ years of genuine pre-event observations run uninterrupted through the outbreak. No zeros were prepended and the surveillance population never changes — the UES cluster appears inside the citywide counts.
1.2 Outbreak epi curve (context; not the detector input)
| Series | UES cluster daily newly-diagnosed cases, by specimen-collection date |
| Source | NYC DOHMH page, embedded Datawrapper chart kUAIX v31 — ues_cluster_daily.csv |
| Span | 2026-06-23 → 2026-07-30; 94 cases total (matches DOHMH final count), last diagnosis 7/21, 11 deaths |
1.3 Environmental data
| Registered towers | NYC Open Data y4fw-iqfr, ZIPs 10028/10128/10075 → 243 tower systems, with per-tower sampledates (Legionella water-test dates) |
| Inspections | NYC Open Data f9wb-g8mb (BWSO) → 330 inspection records, 2026, same ZIPs |
| Lab lists | DOHMH PDFs: PCR-positive towers (7/14, updated 7/20; 77 towers at 75 buildings), confirmatory cultures (7/29; 59 culture-positive towers at 58 buildings) |
| Official timeline | DOHMH press releases: Jul 2 (investigation launched, 2 cases), Jul 10 (31-building list, 46 cases), Sep 10 (South Bronx cluster, separate event) |
2. Detector configuration (frozen)
Engine loaded verbatim from 04_KLEIN_Biodefense/klein_biodefense_yap_dengue_2011.py — the same v23.3 port used for the dengue threshold-off run — via exec of the file up to __main__ (same technique as yap_dengue_tier_sweep.py). Nothing was tuned for this dataset.
ABSOLUTE_LIMIT = 0→ Tier 1 off; Tiers 2–5 activeBASELINE_WINDOW = 15→ fixed baseline = first 15 observations (2022-W01..W15): μ = 2.333, σ = 3.436WINDOW_SIZE = 20,SENSITIVITY = 2.0,FFT_SIZE = 256,PLV_THRESHOLD = 0.7- engine SHA-256
9c3c494b…, input SHA-2564b88c4c2…(full hashes inklein_legionnaires_results.json)
3. Results
3.1 Output over the full series
69 detections in 249 weeks: 28 spike · 7 wave · 34 disruption · 0 coherence. They cluster on real events — every summer legionellosis season and every announced community cluster is marked. Complete per-week output: legionnaires_ues_2026_detection_log.csv.
3.2 The UES episode
| MMWR week | Week ending | New cases | Detection | z | p |
|---|---|---|---|---|---|
| W25 | 2026-06-27 | 4 | — | ||
| W26 | 2026-07-04 | 28 | spike | 6.55 | 5.6e-11 |
| W27 | 2026-07-11 | 58 | spike | 8.61 | 7.6e-18 |
| W28 | 2026-07-18 | 50 | spike | 3.16 | 1.6e-3 |
| W29–W32 | …Aug 15 | 33, 29, 21, 18 | spike ×4 | ||
| W34 | 2026-08-29 | 21 | spike |
First outbreak alert: W26, Tier 2 "spike" — first crossing of baseline μ + 4σ = 16.1 (28 cases). July 2 official recognition falls inside W26 → lead/lag = 0 weeks (same reporting week; −2 days measured against week-close). Within-week ordering is not resolvable at weekly resolution; the 28-case week already contains the cases DOHMH announced.
Prior 2026 run-up alerts: three Tier-4 disruptions (W06 Feb 14, W11 Mar 21, W16 Apr 25) — months before the late-June exposure window; unrelated, i.e., false alarms under prospective use. Reported, not hidden.
3.3 Controls and corroboration
- Cluster-only daily run (contaminated baseline): engine on the 38-day DOHMH epi curve alone → baseline μ=6.0 σ=4.8, 0 detections. Shows why the pre-event baseline was required — reported as a negative, not a defect.
- South Bronx cluster (separate event): W36–W38 spikes (43, 42, 22); the Sep 10 announcement falls in W36 — same-week agreement again.
- 2025 Harlem cluster: sustained spikes W24–W36 (peak 60 cases W31) — consistent with the announced Aug 2025 outbreak.
- Environmental record: 88 detections on the zone sampling-activity series, but the DOHMH sampling surge (peak 31 samples/day) begins Jul 7–9, after recognition — BWSO inspection records show 243 zone inspections in July (vs. 64 in the February annual cycle and ≤13/month otherwise). The environmental series captures the response, not a precursor. PCR-positive and culture-positive tower lists are dated artifacts (7/14, 7/29) with no per-sample result dates published — no earlier environmental warning is recoverable from public data.
4. Interpretation
What this shows: the frozen instrument registers NYC community Legionnaires' clusters in the week they become official — for UES, Harlem, and South Bronx alike — and the engine is unchanged from the dengue run. Zero tuning occurred.
What it does not show: advance warning for this event. NYC moved at two confirmed cases; at citywide weekly resolution the earliest the frozen thresholds could fire was the 28-case week containing the announcement. A detector that needs a statistical excursion cannot beat a health department acting on case linkage at n=2.
Honest limitations: (1) weekly citywide resolution is the finest public continuous series — the detector would need sub-weekly, zone-resolution data to have had a chance; (2) NNDSS counts cases by report week, not specimen date, so the series embeds diagnosis+reporting lag (~1–2 wks); (3) 34 disruption alerts across 4.75 years is a real false-alarm load under prospective deployment; (4) retrospective — the event was known before the run.
5. Follow-up experiment — was the baseline/warm-up the problem?
The primary criticism of the primary run: the engine fixes its baseline from the first 15 observations — is W26 an artifact of which history calibrated the detector? Tested by truncating the start of the same 249-week series so the detector receives H ∈ {10…234} weeks of pre-outbreak data. Detector untouched (ABSOLUTE_LIMIT=0, all constants, both ports). Complete table — nothing selected:
| H (wks pre-outbreak) | Baseline μ / σ | Tiers live at W26? | First alert ≥ Jun 1 | vs W26 |
|---|---|---|---|---|
| 10 | 16.93 / 18.36 | no | none | missed |
| 15 | 5.40 / 3.54 | no | W31 spike | +5 |
| 19 | 5.07 / 2.79 | no | W27 spike | +1 |
| 20 | 5.27 / 3.10 | yes | W26 spike | 0 |
| 21 | 5.40 / 3.36 | yes | W26 spike | 0 |
| 26 | 6.47 / 3.60 | yes | W26 spike | 0 |
| 39 | 8.67 / 4.97 | yes | W26 wave | 0 |
| 52 | 27.53 / 15.99 | yes | W31 disruption | +5 |
| 78 | 3.27 / 1.67 | yes | W23 spike | −3 |
| 104 | 7.27 / 3.69 | yes | W26 spike | 0 |
| 156 | 7.73 / 4.22 | yes | W26 spike | 0 |
| 208 | 8.67 / 5.79 | yes | W26 wave | 0 |
| 234 (primary) | 2.33 / 3.44 | yes | W26 spike | 0 |
Three failure modes, all instructive:
- Too little history kills by two routes. H=15–19:
WINDOW_SIZE=20means the statistical tiers physically cannot fire at W26 — the first possible alert moves to W27–W31. H=10: the 15-week baseline contains the outbreak itself (μ=16.9, σ=18.4) — self-masking, no alert at all. - Baseline drawn from the prior outbreak year masks the next one. H=52 seeds the baseline on the 2025 Harlem peak (μ=27.5, σ=16.0 → spike threshold ≈92); a 28-case week reads as normal and the outbreak surfaces only as a Tier-4 artifact at W31.
- The one "early" result is unprovable, not disproven. H=78 (quiet Jan–Apr 2025 baseline, σ=1.67) flags W23 (Jun 13, 12 cases) — and W20 (May 23, 10 cases). Both predate the cluster's earliest specimen date (Jun 23). Corrected framing (§9.1): predating first diagnosis does not exclude an alert from the outbreak — diagnosis trails onset by the incubation period (2–14 d). W23 sits at the extreme edge of the plausible first-exposure window, on a week that ran at normal seasonal level (2026 June: 8, 12, 0, 4 — flat). Verdict: marginal candidate, weak — a thin winter baseline still converts ordinary fluctuation into alarms, and nothing corroborates it. The correction matters more for Harlem than for UES.
Locked Air Mode check (klein_port_v2.py, the v5.0-lock rolling-baseline configuration, ABSOLUTE_LIMIT=0 for parity): expanding trailing baseline, Tier 4 off. First outbreak alert = W26 as wave (the 2025-inflated trailing baseline pushes the 28-case week below spike threshold but above wave threshold), then W27–W28 spikes. Same week, different layer — 13 total detections vs 71 legacy. Even the adaptive baseline does not find anything earlier.
Conclusion of the sweep: across every functional configuration the first cluster-associated alert is W26; earlier "alerts" appear only when the baseline is too thin to separate background from signal (and still predate the event). Weekly citywide incidence does not contain a pre-W26 signal this detector can legitimately claim.
Spatial dilution — assessed, not resolved. The UES event was geographically local; the input was citywide. No public sub-city-resolution legionellosis series exists (NNDSS reports at NYC level; DOHMH publishes cluster curves only post-hoc; EpiQuery requires a data request). So the spatial question — would a zone-resolution series have alerted before Jul 2 — is untestable from public data and is logged as the limiting factor for the next experiment: the instrument's own spatial machinery (grid binning, Moran's I) needs neighborhood- or ZIP-level line-list data to run.
6. Second follow-up — does prior event history change the next detection?
Question: does the detector behave differently when the continuous stream includes the previous outbreak and its recovery (2025 Harlem cluster, W24–W36/2025) versus when the stream begins after recovery? Same 249-week series, four start points, both locked baseline architectures, ABSOLUTE_LIMIT=0. Script: run_event_history_experiment.py; full output: event_history_results.json.
| Stream start | Architecture | Baseline at W26 (μ/σ) | First alert ≥ Jun 1 | Class |
|---|---|---|---|---|
| A W44/2025 — after Harlem recovery | fixed | 7.20 / 2.96 | W26 spike | clean discrimination |
| air (rolling) | 6.26 / 3.29 | W26 spike | sharp — only config where Air Mode spikes at W26 | |
| B W01/2022 — full history (primary) | fixed | 2.33 / 3.44 | W26 spike | baseline predates Harlem entirely |
| air (rolling) | 7.20 / 8.05 | W26 wave | Harlem inflates trailing σ → demoted from spike to wave | |
| C W01/2025 — Harlem mid-stream | fixed | 3.27 / 1.67 | W24 spike (Jun 13, 10 cases) | hair-trigger: 9 marginal spikes on background in 2026 before W26, incl. W24 before first UES specimen (Jun 23) — background, not signal |
| air (rolling) | 10.31 / 11.55 | W27 spike | Harlem in trailing baseline delays the outbreak alert by a week | |
| D W28/2025 — starts inside Harlem peak | fixed | 27.47 / 16.02 | W31 disruption only | masked — misses outbreak as spike/wave entirely |
| air (rolling) | 12.67 / 13.18 | W27 wave | worst outcome |
Finding: prior event history helps the detector only through the quality of the baseline drawn after the event has recovered — configuration A (post-recovery winter baseline) yields the sharpest discrimination in both architectures (spike at W26, not wave). History that carries the previous event either inflates the trailing baseline (delays/demotes: B-air W26 wave, C-air W27, D-air W27) or, if the fixed window lands inside it, masks the next event outright (D-fixed). There is no evidence the instrument "learns" from having experienced an event — it does not; it is memoryless beyond the baseline statistics. What matters is whether the baseline reflects recovered normal, not merely elapsed time. This is the quantitative version of the case-study design rule: normal → event → recovery → normal must all be inside the stream and the calibration window must sit in the post-recovery quiet.
7. Precursor Observability Matrix — why lead time varies across the portfolio
Compiled across every retrospective run to date (precursor_observability_matrix.csv). Hypothesis under test: early-warning lead time is governed by precursor observability — sampling cadence × spatial resolution × how directly the measured variable represents the underlying process. A detector cannot warn about information that has not yet entered the measured stream.
| Case | Cadence | Spatial scale | Directness | First alert vs milestone | Outcome |
|---|---|---|---|---|---|
| Delhi PM2.5 (Air Mode) | hourly | single station | direct physical | +35 h median before severe-episode onset | early warning |
| Yap dengue 2011 | daily | island pop. ~11k (closed) | downstream cases | Sep 16 vs Nov 25 peak → +70 d (Tiers 2–5) | early warning |
| Geneva 1918 influenza | daily deaths | city | downstream deaths | Sep 13 disruption vs Oct 20 peak → +37 d (violation Sep 25 → +25 d) | early warning |
| SARS Hong Kong 2003 | daily | city | downstream cases | Mar 8 wave (z=2.89) vs WHO alert Mar 12 → +4 d | early warning |
| Tokyo sarin 1995 | hourly | single site | downstream casualties | 08:00 alert at attack onset (first bucket already 780/hr) | simultaneous — no precursor exists |
| Ebola 2014–16 | ~weekly | multi-country | downstream cases | alerts at threshold crossings | simultaneous |
| COVID-19 WHO global | daily | global aggregate | downstream cases | per-wave threshold crossings | simultaneous |
| Flint / Bethpage / E. Palestine / asbestos | event/daily | site–city | direct ppb/µg | Tier-1 action-level crossings | threshold detection (by design) |
| Yap zika 2007 | weekly | island | downstream cases | no tier output (n=29 < WINDOW_SIZE=20 warmup over baseline) | null by construction |
| UES Legionnaires 2026 | weekly | citywide, 5 boroughs | most-downstream proxy (diagnosed → reported → aggregated) | W26 = recognition week → 0 d | simultaneous detection |
| UES environmental (tower sampling) | daily event log | ZIP-level | testing intensity, not pathogen | surge Jul 7–9, after recognition | post-hoc response artifact |
The pattern is orderly: every genuine early warning in the portfolio sits on direct or daily, spatially local measurements where the physical precursor enters the input before the milestone. Every simultaneous result sits on weekly or geographically aggregated, downstream-outcome series. The UES run is the extreme point of the latter class — coarse cadence, spatial dilution (a 3-ZIP event inside ~8.3M-person counts), the deepest causal distance from the physical event (cooling-tower growth → exposure → infection → diagnosis → reporting → weekly aggregation), and the fastest official responder in the portfolio (action at n=2). Instantaneous events (sarin) bound the other end: no precursor exists at any resolution.
Testable prediction now on record: if ZIP-resolution daily line-list or pre-outbreak cooling-tower Legionella measurements ever become available for this event, the frozen instrument run on those streams should produce an earlier alert than W26 — with tower-level measurements predicted to alert earliest, as the physically most-upstream observable. That is where in the causal chain early warning becomes possible, and it is an engineering specification for what minimum temporal/spatial/causal resolution a sensor stream must have for early-warning claims to be meaningful.
8. Two-stream causal-chain test — NYC COVID-19 wastewater vs diagnosed cases
Direct test of the §7 hypothesis on an event where two contemporaneous streams exist at different positions in the causal chain: wastewater SARS-CoV-2 load (viral shedding — physically upstream of diagnosis) vs confirmed clinical cases (downstream outcome). Same detector, same constants, ABSOLUTE_LIMIT=0, streams aggregated to identical weekly bins — the only thing varied is causal position.
- Upstream: NYC DEP wastewater N1 per-capita load, 14 WRRFs, population-weighted citywide mean per sampling date (Socrata
f7dc-2q9f; source:source_data/nyc_wastewater_sarscov2.json) - Downstream: DOHMH confirmed daily cases by diagnosis date (nychealth/coronavirus-data
cases-by-day.csv) - Window: Aug 31 2020 – Oct 31 2022 (114 weeks) — restricted to the pure RT-qPCR era; the Apr 2023 dPCR transition rescales values ~10–20× and would confound. Waves covered: Alpha, Delta, Omicron, BA.2, BA.5.
Weekly-aligned run (controlled — equal cadence and grid):
| Wave | Wastewater first alert | Cases first alert | Upstream lead |
|---|---|---|---|
| Alpha (winter 20–21) | Jan 30 wave (z=2.0) | none — warm-up | n/a |
| Delta | Aug 14 wave (z=3.1) | Aug 28 disruption | +14 d |
| Omicron | Dec 25 spike (z=5.4) | Dec 4 disruption / Dec 18 spike | −7 d (magnitude tiers) |
| BA.2 | Apr 2 disruption | Mar 19 disruption | −14 d |
| BA.5 | Jun 25 wave (z=2.2) | Aug 27 disruption | +63 d |
Two findings are clean. (a) Tier-strength: wastewater produced magnitude-tier alerts (spike/wave) in every wave; the case stream produced a magnitude alert only for Omicron — for Delta and BA.5 the downstream record never crossed its spike threshold (~30.9k/wk) and surfaced only as Tier-4 harmonic firings. Upstream the same events are physical excursions; downstream they are sub-threshold ripples in an inflated baseline. (b) The exceptions are instructive: Omicron's case surge was so steep that daily diagnosis counts outran the 2×/week weekly-mean-smoothed wastewater stream — averaging damped exactly the precursor the hypothesis cares about.
Native-cadence run (wastewater per sampling date, ~2–3/week, 195 obs): first spike Nov 30 – Dec 5, 2021 vs cases' first magnitude alert Dec 18 → +13–18 d upstream for Omicron, recovering the documented wastewater-leads-cases ordering. Delta first alert Jul 13–20 (vs cases Aug 28): +5–6 wks. Caveat, reported honestly: native cadence uses first-15-samples as baseline (≈6 weeks vs 15 weeks), yielding a hair-triggered detector with 119 detections — earlier, but noisier; wave-attribution is weaker when the detector is already firing. This is again §5's lesson: baseline construction, not detector choice, governs the sensitivity/specificity trade-off.
Verdict on the hypothesis: directionally supported, not decisive — 3 of 5 waves alerted earlier upstream at equal cadence (Delta +14d, BA.5 +63d, Alpha non-comparable by warm-up) with stronger tier evidence, and the native-cadence run restores upstream-first ordering for Omicron. The exceptions occur where the downstream process accelerates faster than upstream sampling cadence resolves. Consistent with the matrix prediction: lead time scales with precursor observability, and the binding constraint on this test was upstream sampling cadence, not the detector.
The Legionnaires analog is now concrete: cooling-tower Legionella concentrations (not test counts) are the upstream stream; weekly citywide diagnoses were what we had. The instrument flagged everything the downstream stream could support — the data, not the detector, capped the achievable lead.
9. The better candidate — 2025 Central Harlem (pursuit status)
The 2025 Central Harlem outbreak (118 confirmed, 7 deaths; tower isolates WGS-linked to clinical isolates from eight patients, two systems on the same block) is the strongest available Legionnaires candidate for the upstream test: NYC detected it Jul 25, 2025 via daily spatiotemporal surveillance (8 clustered urine-antigen results within ~1 km), and the NEJM Evidence investigation (EVIDpha2600062, PMID 42334300, DOHMH authors) documents pre-outbreak routine water-quality records for the source towers — one with major monitoring failures, one properly monitored but with three intermittent sub-target disinfectant periods in June–July 2025, described as a "slight and intermittent decline in water quality" accompanying Legionella growth.
What public data yield for Harlem:
- Daily cluster epi curve recovered (Datawrapper
AhMQjv22, archived DOHMH page 2025-08-15): 114 cases, first diagnoses Jul 22, 2025, last Aug 13 (source_data/harlem_cluster_daily.csv). - Cluster-only daily run: frozen engine on the Harlem curve alone → baseline μ=6.1/σ=3.0, 0 detections. Third independent demonstration that a series starting at the outbreak cannot warn about it.
9.1 Attribution correction — the emergence window, not the diagnosis date
An earlier version of this section rejected all pre-recognition alerts as "background" because they preceded the first cluster diagnosis (Jul 22). That rule was wrong for an early-warning instrument: if only post-diagnosis signals are admissible, early warning is defined out of existence. Diagnosis trails onset by incubation (Legionnaires' ≈ 2–10 d, occasionally to 14) plus testing/reporting lag — and cluster membership is a retrospective classification requiring geographic linkage; a person infected by the same source who lived or traveled outside the mapped zone would be counted in citywide totals but never in the cluster curve. The correct attribution boundary is the biological emergence window, not the administrative record.
The published case definition fixes the emergence window directly: outbreak-associated cases were those who resided, worked, or stayed in the zone from June 30 through August 15 (PHA report / NEJM Evidence, source_data/harlem_pha_report.pdf). Against that window:
| Alert (wk ending) | Cases | vs Jul 25 recognition | Class |
|---|---|---|---|
| May 31 wave, Jun 7 wave | 10, 14 | −8/−6 wk | weak — before the exposure-eligibility window opens (Jun 30) |
| Jun 14 spike | 19 | −6 wk | weak candidate — pre-window, but inside Tower B's documented dip period |
| Jul 5 spike | 20 | −3 wk | candidate precursor — edge of window (onsets ~Jul 1–3 → exposures ~Jun 20–Jul 1) |
| Jul 12 spike | 24 | −2 wk | candidate precursor — inside window |
| Jul 26 spike | 32 | same week | defensible cluster-associated alert |
The blocking check passes — the pre-recognition elevation is real and non-circular. The seven consecutive weeks ending Jun 7 → Jul 19 ran 13–24 citywide cases vs 1–13 in the same weeks of 2023 and 2024 — and every one of those weeks ends before Jul 25 and contains zero cluster-member diagnoses (the cluster curve begins Jul 22). The elevation is not the outbreak counting itself. What remains unknowable is whether the people inside those counts were infected by the Harlem source — cluster membership requires zone linkage, so unlinked infections (commuters, out-of-zone residents exposed in Harlem) appear in citywide totals but never in the cluster curve.
The counterevidence, included: Harlem Hospital's tower (Tower B) cultured negative in March and June and was fully disinfected Jul 2 — "three weeks before the first case" per the hospital (closing PR). The same DOHMH review still found three intermittent periods in June–July when disinfectant read below target for two consecutive readings, returning to target after routine biocide dosing — "a slight and intermittent decline in water quality" during which Legionella growth was detected. Tower A (the unregistered construction tower, W 137th St — registered Jul 31, four days after its PCR+ sample) had major monitoring lapses and missed required sampling. WGS linked tower isolates to clinical isolates from eight patients; investigators could not determine which tower infected anyone. Retrospective WQ analysis found one tower carried higher Legionella concentrations and worse overall water quality.
Revised Harlem statement: the frozen detector produced magnitude-tier alerts 3 and 2 weeks before NYC's Jul 25 recognition, the later one squarely inside the outbreak's published exposure-eligibility window, during a sustained pre-recognition elevation that contains no cluster members. Candidate precursors — unproven, unprovable at citywide resolution, not dismissible. Adjudication requires the Tower A/B serial water-quality records. The UES result is unchanged: June 2026 ran flat and the primary run produced no June alerts.
The tower data gap — now precisely located:
- NYC Cooling Tower Registrations (
y4fw-iqfr) exposes sampling dates only, as a rolling ~12-month snapshot. The two source systems are identified: 506 Lenox Ave (BBL 1017330001, Harlem Hospital — sampled Mar & Jun 2025, disinfected Jul 2, three weeks before the first case per the closing PR = the well-monitored "Tower B") and 40 W 137th St (BBL 1017340002, a construction tower registered Jul 31, 2025 — after the Jul 28 sampling that returned PCR+ = plausibly the monitoring-failure "Tower A"). Their Jun–Jul 2025 records have rolled off the public file; nothing below-1000-CFU/mL is ever reported to DOHMH by rule. - NYS registry publishes results but excludes NYC and is weekly-snapshot only.
- NEJM Evidence is paywalled/bot-blocked; even if a supplement exists it is likely descriptive rather than the serial reading log.
What would be needed (the actual data request): operator water-quality logs for those two systems covering ~Mar–Aug 2025 — disinfectant residual readings with timestamps, pH, temperature, conductivity, biocide dosing events, plus routine Legionella sample dates/results. Obtainable via FOIL request to NYC DOHMH or direct request to the corresponding author (Shama D. Ahuja, DOHMH). If obtained: freeze engine, replay chronologically, milestone = Jul 25, 2025 — the first genuine Legionnaires-to-Legionnaires upstream test.
10. Files
| File | Contents |
|---|---|
klein_input_nyc_legionellosis_weekly.csv |
Detector input — 249 weeks, DATE |
klein_input_ues_tower_sampling_daily.csv |
Environmental input — daily zone sampling events |
legionnaires_ues_2026_detection_log.csv |
Complete raw detector output, primary run |
sensitivity_cluster_daily_detection_log.csv |
Raw output, contaminated-baseline control |
environmental_sampling_detection_log.csv |
Raw output, environmental run |
klein_legionnaires_results.json |
Config, SHA-256 hashes, summary metrics |
baseline_sweep_results.json + run_baseline_history_sweep.py |
Pre-outbreak-history sensitivity sweep (H=10…234), full table |
airmode_comparison.json |
v5.0-lock Air Mode (rolling baseline) vs legacy-fixed comparison |
event_history_results.json + run_event_history_experiment.py |
Prior-event-history experiment (§6): 4 stream starts × 2 baseline architectures |
precursor_observability_matrix.csv |
Cross-portfolio observability matrix (§7) |
klein_input_covid_two_stream_weekly.csv + two_stream_covid_results.json + run_two_stream_covid.py |
Two-stream test (§8): weekly inputs, full detections, per-wave first alerts |
legionnaires_ues_2026_timeline.png |
Cases + Klein signals + recognition + tower response |
engine_snapshot_klein_biodefense_v23.3.py |
Frozen engine copy as executed |
build_input_series.py · run_klein_legionnaires.py · run_secondary_analyses.py · make_timeline_figure.py |
Reproduction scripts |
source_data/ |
Raw pulls: NNDSS JSON, Datawrapper CSVs (UES + Harlem), tower registrations/inspections, DOHMH PDFs + press releases, PHA/NEJM outbreak report (harlem_pha_report.pdf + .txt), archived DOHMH page + press releases |
Retrospective case study for Klein's Pollution Solution — Project Promised Land. Detector frozen; result reported as produced.