# zenfro_v2 — Grammar of Time on the v1 weather backbone Cascade miner generator. Evolves `zenfro_v1` (weather-heavy aurora blend) with **Grammar of Time (GoT)** and forecast-friendly seasonality upgrades. ## Why this prior Cascade holds Toto2 fixed and trains it from scratch on your corpus. Eval is forecast skill on held-out windows: **4096-step context → next 64 steps** (CRPS + MASE). Winning synthetic priors (Chronos-2, TempoPFN, CauKer) compose temporal primitives rather than sampling one ARIMA family. | Layer | What | |---|---| | Stems (v1) | weather (~34%), trend/seasonal, AR2, integrated, RFF-GP, … | | GoT (~22%) | compose ⊕, splice ‖, nested ⋉, causal ▷ | | Seasonality | coupled calendar pairs (24↔168, 7↔52, …) + amp/phase drift | | Clean mode | low-noise seasonal rows for sharp periodic reconstruction | ## Grammar of Time ``` Series → Production | Stem Production → Compose | Splice | Nested | Causal Compose → Stem ⊕ Stem [⊕ Stem] # additive / multiplicative phrase Splice → Stem ‖ Stem # clause = change of generating law Nested → Envelope ⋉ Carrier # slow modulates fast Causal → Driver ▷ Response # lagged temporal chain ``` GoT stems are cheap (seasonal+AR, RFF, integrated, AR2, diurnal-weatherish) so compositions stay wall-safe under the token budget. ## Layout ``` zenfro_v2/ generator.py # Generator(DataGenerator) config.json # active mixture + GoT knobs requirements.txt # numpy + numba README.md ``` ## Quick checks ```bash cascade verify ./mywork/zenfro_v2 cascade score ./mywork/zenfro_v2 --pool-dir ``` ## Config knobs | key | role | |---|---| | `family_weights` | mixture over stems + GoT | | `got_depth` | stems stacked in compose (2–4) | | `got_mul_frac` | multiplicative vs additive compose | | `got_splice_cuts` | clause boundaries in splice | | `got_nest_ratio` | slow/fast scale span | | `got_causal_lag_frac` | max lag as fraction of L | | `sa_clean_*` | clean low-noise seasonal mode | | `tr_*` / `gr_*` | trend / growth excursion | ## Contract - Deterministic at a fixed seed - NumPy + numba only, code-only (no shipped weights) - Full-context series (`min_length = max_length = 4096`)