Adds the test that verifies the full producer→drain→re-pass loop: sample written with NULL HRRR fields + fetch task enqueued, then once an HRRR profile lands, the next sampler pass UPSERTs the same calibration_samples row (id preserved) with non-NULL weather data. Also tightens dialyzer surface: * PartitionManager defines a `result()` typedoc and uses it on both public functions instead of inlined tuple types. * PartitionMaintenanceWorker.perform/1 + the lookahead/1 helper get explicit specs. * CalibrationSampler.enqueue_missing_hrrr/3 gets a spec covering its group_by-shape input map and HRRR profile list. `mix precommit` clean (3310 tests, 0 failures). Local `mix dialyzer` hits an OTP 28.4 vs 28.5 toolchain mismatch unrelated to this change. |
||
|---|---|---|
| .. | ||
| aggregator.ex | ||
| calibration_sample.ex | ||
| calibration_sampler.ex | ||
| client.ex | ||
| feature_bin.ex | ||
| mqtt.ex | ||
| recalibration_run.ex | ||
| recalibrator.ex | ||
| spot_hourly.ex | ||