Commit timeline — commodity_hindcast (Apr–May 2026)¶
At a glance¶
- Window: 2026-04-16 to 2026-05-05 (~19 days)
- Commits touching the package: 116
- Authors active: 2
- Top themes:
- Delivery pipeline introduced from scratch (Apr 16)
- S3 path safety and URI unification (Apr 20–29)
- PREDICT stage and tidy-predictions schema (Apr 16–22)
- 9-phase package restructure (Apr 28–29, PR #339)
- Conformal calibration overhaul — MAPIE MetaModel (Apr 22 → May 2, PR #361)
- Brazil soy support + discriminated-union reference data (May 2–3, PR #360)
- Multi-year forecasting per init_date (May 5, PR #369)
Authors¶
| Author | Commits |
|---|---|
| ai-tommytf | 90 |
| Miguel Boland | 25 |
| miguelboland-treefera | 1 |
Themes¶
Theme 1 — Delivery pipeline built from scratch (Apr 16)¶
The opening burst of the window — roughly 15 commits on 16 April — introduced the entire
delivery subsystem in one sitting. Key additions: delivery/ package with Pydantic schemas
(5f1de1e6), centralised conformal CI computation (36519e56), unit conversions for
kg/ha → bu/acre (5f1de1e6), a rewritten deliver step writing multi-ADM CSVs (59b15970),
population of nass_actual and wasde_in_season benchmarks (230b1de4), and a benchmark
comparison grid plot (1e495a11). A new predict/ module with TidyPredictionSchema
(ecf9958e) was wired into the FIT phase, replacing the older wide-parquet approach
(99afcecf). Miguel Boland added the export step and weekly hindcast output on the same day
(011e13e9, f63d90c0).
Theme 2 — PREDICT stage and rolling-predictions consolidation (Apr 16–22)¶
Alongside delivery, ai-tommytf introduced an explicit PREDICT stage: added the stage module
(6bb1d1f0), updated DESIGN (b2cfc8a1), and replaced the asof-based model lookup with
explicit --season-year/--init-date flags (d8d8a441). Shared rolling-prediction logic
was extracted into predict_rolling (4669a8f6). The predict name collision between module
and package was later resolved (614b82d5 area, specifically 614b82d5). On Apr 22 the
is_forecast gate was dropped in favour of run_forecast always behaving as a forecast
(b4a40f0f), and a cleaner mental-model refactor (887d75d7, PR #307) consolidated
scattered utilities and extracted a train() primitive plus walk-forward orchestrator
(664063cc).
Theme 3 — S3 path safety (Apr 20–29)¶
A sustained campaign to remove bare relative paths and anchoring bugs. On Apr 20 alone,
ai-tommytf landed seven fix commits anchoring paths under data_root:
47b29ff7 (preflight checks), 5cfd2f97 (builder filepaths), 74865bbb (stress indices zarr),
dd775d29 (geo lookup), 297ad3ba (WASDE evaluation path + resolve_data_path helper),
and 78e7dbfe (NASS yields parquet). Miguel Boland fixed broken paths and S3 sync issues
on Apr 20–21 (baf30be3, 69607992, bc9a2158), then added direct S3 Zarr reads from
Greenprint (ca07b4a3). A targeted predict-stage S3 fix followed on Apr 29 (f66f4ac9,
PR #345), and Miguel Boland fixed MLflow URI support on the same day (13117727).
Theme 4 — 9-phase package restructure (Apr 28–29)¶
PR #339 (06b47bf7) was the single largest structural commit: a rename/reorganise to align
the source layout with the SYNTHESIS document's nine-phase model. It touched nearly every
subdirectory and established the canonical module hierarchy used in all subsequent work.
Miguel Boland patched broken paths exposed by the restructure immediately after (84c0460c).
The domain model was rewritten into a canonical v2 form on the same day (84fe9efb, PR #353).
Theme 5 — Conformal calibration overhaul (Apr 22 → May 2)¶
The longest-running theme. It began on Apr 22 with centralising the conformal CI computation
into a confidence_intervals module (36519e56) and adding P90 bands to delivery outputs
(1d583cc6, PR #331). The culmination was PR #361 (2e88cd85, May 2): MAPIE was adopted
as the conformal engine, CalibrationResult was restructured into a multi-mode discriminated
union with mode-keyed sidecars, and conformal calibration was promoted to a proper MetaModel.
This commit is the most architecturally significant in the window — it changed how uncertainty
quantification is stored and consumed end-to-end.
Theme 6 — Dashboard repairs and decoupling (Apr 23 → May 5)¶
The Streamlit dashboard received sustained attention. PR #316 (9930f106, Apr 23) removed
the coupling to the QUBE-sprint and rewired the dashboard to run off tmi-tl-app internals.
PR #340 (216af767, Apr 28) added window-aware metrics, a configurable truth source, and
generic vintage subsets. The wheat verification + dashboard fixes PR #324 (e3539323, Apr 24)
addressed label and plot regressions. A startup crash introduced by the conformal MetaModel
refactor was resolved by 481c6a1b (May 5, PR #363).
Theme 7 — Brazil soy + reference-data discriminated union (May 2–3)¶
PR #360 (3e6f8095, May 3) added Brazil soy as the first non-US commodity. This drove a
broader change to the reference-data layer: NASS yield tables, area imputation, and
geoboundary resolution all had to become country-aware. The discriminated union introduced
in the conformal layer (Theme 5) complemented the same pattern here for reference-data
sources, establishing a composable multi-region design.
Theme 8 — Multi-year forecasting per init_date (May 5)¶
PR #369 (f5399b96, May 5) added support for forecasting multiple season_year values from
a single init_date, unlocking rolling multi-vintage forecasts without separate CLI invocations.
Paired with PR #374 (4425fe44, May 5), which made commodity-region runs explicit via a new
experiment_key, these two commits represent the final shape of the CLI for the May 2026 release.
Theme 9 — Config hygiene and INPUT_DATA_DIR formalisation (Apr 27)¶
A cluster of commits on Apr 27 cleaned up configuration debt: INPUT_DATA_DIR was made
mandatory and documented in DESIGN (dbcf7597, ad4d4426); a doubled data/ prefix bug
in the wheat config was removed (7cca0375); delivery.model_public_name was added to the
wheat config (694c6b6b); default make forecast targets were set to current UTC
(b6bb4b2d); and stage banners with progress heartbeats were added to run_all (dbcf7597).
Theme 10 — CONUS soy model + area-imputation (Apr 23–29)¶
eca35c35 (Apr 23, PR #312) introduced declarative area imputation and fixed a wheat hindcast
crash. beecbaa1 (Apr 23, PR #309) decoupled the pred.parquet horizon from labels and
added loud failures on feature drops during preprocessing. The CONUS SOY model landed on
Apr 29 (eb268e30, PR #343), with corn-specific config fixes on Apr 20 (e038cc8f, 4243fd57).
Notable individual commits¶
02500dc9(Apr 16) — Imputer-based missing-data handling for all regressors (PR #271): introduced the generic imputation abstraction that underpins robust training across sparse-feature commodities.8dfdf9f8(Apr 23) — Scoped forecast feature build to the CLIinit_date(PR #317): closed a silent data-leak bug where future features bled into in-season forecasts.23eeab24(Apr 20) — Addedrun hindcast+forecastjoint operation and CLI tool (Miguel Boland): a convenience path that became the default QA workflow.13117727(Apr 29) — Fixed MLflow URI support in S3 (Miguel Boland): unblocked remote experiment tracking for non-local runs.84fe9efb(Apr 29, PR #353) — Domain model rewritten to canonical v2: the in-packageDOMAIN_MODEL.mdwas regenerated to match the nine-phase structure, making it the authoritative reference for subsequent entity pages.
What the timeline tells you about the project¶
The package underwent a compressed but coherent architectural maturation: the first week
built delivery and prediction primitives from scratch; the middle week restructured the layout
to match a formal synthesis document; the final days promoted conformal calibration and
multi-region support to first-class concerns. One author (ai-tommytf, 90 of 116 commits)
drives architectural decisions and feature direction; the second author (Miguel Boland, 25
commits) handles infrastructure plumbing — S3 integration, MLflow URIs, export pipelines —
and acts as an integration layer between the hindcast package and the broader platform. The
conformal MetaModel (PR #361) and multi-year forecasting (PR #369) are the two changes most
likely to have downstream schema implications.