Problem
The unfao delivery manager (views_postprocessing/unfao/managers/unfao.py) is built around point forecasts:
_read_forecast_data (~L62-100) downloads a single parquet DataFrame from Appwrite and wraps it in PGMDataset (pandas).
_append_metadata (~L112-122) joins GAUL metadata onto that DataFrame.
_save (~L206-223) writes pred_*_best / pred_*_prob point columns.
rusty_bucket (views-models#143) is the opposite by design: a PredictionFrameEnsembleManager + aggregation: concat ensemble that ships the full pooled posterior draws (~1024/cell, Track A y_pred.npy of shape (N, S)) uncollapsed, so the principled MAP/HDI collapse happens once downstream in views_frames_summarize.
So the current FAO delivery path would not carry rusty_bucket's draws — it expects a point DataFrame with _best/_prob columns, not (N, S) draw arrays. This is the downstream half of the views-models#143 contract: "the FAO delivery path must not collapse them."
Scope
- Adapt the unfao delivery to read/carry the pooled draws (frames /
(N, S) arrays + identifiers) for rusty_bucket, delivering them uncollapsed.
- Keep the metadata enrichment (
GaulLookupEnricher) and validation working on the frames/draws path.
- Decide the delivery artifact to FAO (raw draws vs the
views_frames_summarize collapse output).
Not blocking yet
rusty_bucket's constituent models are still being tuned (views-models#143), so this is track-and-scope. It must land before rusty_bucket goes live.
Refs
- views-models#143 (rusty_bucket + the downstream draw-preservation contract)
views_postprocessing/unfao/managers/unfao.py (_read_forecast_data, _append_metadata, _save)
- Related: C-40 in the register (the manager's pipeline-core coupling), which any rework here should keep in mind.
Problem
The unfao delivery manager (
views_postprocessing/unfao/managers/unfao.py) is built around point forecasts:_read_forecast_data(~L62-100) downloads a single parquet DataFrame from Appwrite and wraps it inPGMDataset(pandas)._append_metadata(~L112-122) joins GAUL metadata onto that DataFrame._save(~L206-223) writespred_*_best/pred_*_probpoint columns.rusty_bucket(views-models#143) is the opposite by design: aPredictionFrameEnsembleManager+aggregation: concatensemble that ships the full pooled posterior draws (~1024/cell, Track Ay_pred.npyof shape(N, S)) uncollapsed, so the principled MAP/HDI collapse happens once downstream inviews_frames_summarize.So the current FAO delivery path would not carry rusty_bucket's draws — it expects a point DataFrame with
_best/_probcolumns, not(N, S)draw arrays. This is the downstream half of the views-models#143 contract: "the FAO delivery path must not collapse them."Scope
(N, S)arrays + identifiers) forrusty_bucket, delivering them uncollapsed.GaulLookupEnricher) and validation working on the frames/draws path.views_frames_summarizecollapse output).Not blocking yet
rusty_bucket's constituent models are still being tuned (views-models#143), so this is track-and-scope. It must land before rusty_bucket goes live.Refs
views_postprocessing/unfao/managers/unfao.py(_read_forecast_data,_append_metadata,_save)