# generator_v18 — surgical tidal specialist This candidate is a surgical fork of the proven `generator_v17`. It preserves v17's deterministic single-stream prefetch path, fixed 4096-point rows, curriculum, observation settings, and every existing family weight except `forecast_tasks`. A transferred `tidal_harmonic` specialist receives 1.5% final mass and 2.0% early mass, taken only from `forecast_tasks`. ## Forecast-task compiler Each forecast-task row is a continuous composition of: - deterministic quota-sampled periods from 7, 15, 24, 48, 60, 96, 144, 240, and 288; - slowly varying seasonal amplitude and phase templates; - smooth global trends and predictable local slope corrections; - persistent AR residuals with slowly varying, context-visible volatility; - sparse precursor → 64-step event → recovery episodes whose boundaries are exact multiples of 32. The 32-point alignment matches Toto2's patch size, while the 64-step episodes match Cascade's two-patch evaluation horizon. Event sign, approximate magnitude, and volatility are visible during the preceding context; this teaches conditional forecasts rather than independent surprise corruption. Period quotas use a 70% revealed-pool-frequency and 30% uniform blend. Counts are allocated exactly inside each generated family block and then shuffled by the generator's seeded RNG. ## Curriculum and corruption The forecast-task family starts at 58% with `forecast_task_hardness = 0.15`, then blends to a 43.5% share at full difficulty. The tidal family starts at 2% and blends to 1.5%. All other weights are byte-for-byte identical to v17. ## Tidal harmonic specialist Adapted from the round-1211 challenger that improved local NOAA tides, this family composes two to four astronomical-like constituents around a log-uniform base period. It retains the specialist's close constituent ratios `[1.0, 0.9661, 1.0191, 1.927, 2.0787]`, small period jitter, slow amplitude modulation, low-noise AR residual, small datum drift, and broad signed/offset scales. The implementation is vectorized over rows and time. AR coefficients use four representative groups so SciPy filters whole matrices instead of looping over individual rows. Tidal rows stay continuous rather than passing through v17's positive/count link, which would turn scarce tidal examples into integer counts. Compared with v12, final independent corruption is materially reduced: - shock-row rate: 0.40 → 0.08; - irregular-hold row rate: 0.25 → 0.08; - irregular hold probability: 0.01–0.10 → 0.005–0.04; - censor rate: 0.08 → 0.04; - regular-hold rate: 0.08 → 0.04; - TSMixup: 0.03 → 0.01. Positive and count observation links remain, at slightly lower rates, because they model domains rather than independent corruption. ## Determinism and throughput `generation_workers` remains 1. The new family consumes only the existing `numpy.random.Generator` stream, uses vectorized NumPy operations plus the existing SciPy AR filter, and introduces no new dependencies or unseeded state. ## Verification ```bash cd /root/cascade cascade verify /root/generator_v18 ``` For a direct generation benchmark, instantiate both generators with the same seed, drain the same row count, and compare points per second. This benchmark tests generation only; it does not launch a heat evaluation.