Hot-fix , radial dial production sawtooth (#210)
Beta.70 introduced the unified 5-day data store but the production builder filled every past bucket without a recorder sample with 0. Since _pvCalibStats publishes 1 LTS row per hour while the store packs 4 buckets per hour, 3 buckets out of 4 in the past read as 0 between samples and the radial dial's production fill drew as a sawtooth.
Fix: the production builder now borrows the modelled W at past-null buckets from the forecast series, exact same pattern the pre-refactor computeHourlyProduction had. Falls back to 0 only when the forecast itself is null (before sunrise, after sunset, no weather series). Future buckets stay null, the forecast curve owns the future-half of the dial.
Finishes the migration that beta.70 started. Tracked in #210.