# generator_v25 — persistence specialists Lineage: v18 → v22 → v23 → v24 → v25. Fork of v24. ## What the lineage established Paired attribution against the reigning king (UID 158) over 1536 fresh windows (July 27-29, two window seeds each) located the gap precisely. Sorting upstream feeds by how often they repeat the previous sample ordered v18's losses almost perfectly: | feed | windows | zero-diff frac | levels | v18 vs king | v24 vs king | | --- | --- | --- | --- | --- | --- | | gbfs_bergen_station_status | 57 | 0.968 | 7 | -76.9% | -53.4% | | nextbike_zagreb_station_status | 87 | 0.949 | 12 | -52.6% | -37.9% | | gbfs_trondheim_station_status | 32 | 0.925 | 9 | -20.8% | -17.5% | | gbfs_bicing_barcelona_station_status | 88 | 0.638 | 20 | +5.6% | +4.4% | Bergen and Zagreb alone account for about 4 of the 5 percentage points between v18 and the king. These feeds hold a value bit-exact for tens of samples, so their naive-difference scale is tiny and a forecast that drifts even a fraction of one count is punished heavily. Three attempts narrowed down what actually helps: * **v22** (dock family + a blanket link rounding all families onto small integer ranges) scored 0.40635 against v18's 0.39113. The targeted part worked (Bergen +32%) but the blanket link coarsened the fine-grained feeds, costing 10% on Barcelona and 49% on German hospitalization counts. * **v23** re-targeted the link on flat fraction rather than capacity. Result discarded: three copies of the run launched at once and overwrote each other's checkpoint directory. * **v24** (dock family only, 14% mass) reached 0.39272, a tie with v18, at full token parity — 9.64B tokens against v18's 9.73B. It won exactly where aimed (Bergen +13.3%, Zagreb +9.6%, NY COVID testing +15.3%) but the mass it took from `ou_stochastic_vol`, `regime_shift`, `integrated`, and `threshold_ar` cost 19.7% on NZ electricity prices over 101 windows, cancelling the gain. ## Changes in v25 * New `piecewise_level` family at 11% mass. Levels are held exactly constant for hundreds of steps and broken by rare changes, with a bounded-integer variant (3-40 capacity, unit moves) and a continuous variant. Change rates are drawn log-uniformly over 0.05%-9% of samples, so the corpus spans both the near-frozen feeds and the moderately active ones. Only a quarter of continuous rows carry reading noise; the rest stay bit-exact, which is the property the metric rewards most. * `dock_occupancy` raised to 15% and sharpened toward the flat band the pool actually occupies: swing 0.03-0.6 of capacity (was 0.04-1.1), jump rate 0.002-0.09 (was 0.003-0.2), seasonal amplitude up to 0.30 of capacity (was 0.45). Median flat fraction moves from 0.81 to 0.89. * Funding now comes only from `forecast_tasks` (0.435 → 0.261) and the generic stochastic families. `regime_shift`, `integrated`, `threshold_ar`, `ou_stochastic_vol`, `pulse_outlier`, `tidal_harmonic`, `physical_sensors`, `seasonal_counts`, `intermittent`, `stable_calendar_counts`, and `conditional_stability` are restored to their v18 weights, since those are what serve the spiky price and sensor feeds v24 damaged. * `observation.small_count_rate` stays at 0, so no blanket requantization. ## Corpus coverage, last 512 points of 2000 series | | flat >= 0.8 | flat >= 0.90 | flat >= 0.95 | <= 24 levels | | --- | --- | --- | --- | --- | | pool | 43.7% | 23.1% | 11.8% | 64.5% | | v18 | 11.0% | 8.4% | 7.1% | 13.4% | | v24 | 16.3% | 13.2% | 11.0% | 22.9% | | v25 | 25.6% | 22.5% | 19.8% | 32.0% | Throughput is 799 series/s against v18's 729 measured back-to-back, since both new families are cheaper per row than the `forecast_tasks` mass they replace, so the training budget should not lose tokens.