Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions docs/ADRs/013_sampled_forecast_wire_contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -1044,6 +1044,20 @@ record execution progress against it.
(maintainer: "fix this through the pipeline"): lifting the `<17` ceiling at its
source is filed as pipeline-core#280; when it lifts, the fixture gets one
planned re-baseline, coordinated, never a drive-by.**
- **2026-07-20 — HOP-B SINK LEG SHIPPED (epic #105 complete; upload-disabled).**
The contract's missing middle exists in fixture-proven code:
`unfao/wire/` (naming, header, shard, sidecar, run_manifest, source_selection,
sink) + `unfao/product.py` + `delivery/parity.py`, wired into the manager
behind an explicit declared `wire_contract` launch key. Settled by shipping:
**§4.2a's configuration home is `unfao/product.py`**; **§5.2's parity
invariant is `delivery/parity.py`**; the §11.4 upload interlock is live in
code (`product.UPLOAD_ENABLED=False`; the default configuration provably makes
zero store calls — golden-tested). The e2e capstone proves the anti-corruption
role end to end: fixture Track-A artifacts in → **byte-identical** fixture
Hop-B artifacts out, §6 gate first, manifest uploaded last, every document
under the pinned `un_fao` name (the F1 fix, in code). First live enablement
remains gated on C-161 closure (faoapi #184 release). Stories: vpp #106–#113;
PRs #115–#121.
- **2026-07-19 — retention direction given (maintainer): a configurable retention
period with automatic deletion** (e.g. 12 or 36 months — the value to be decided
with the owner). This settles the *shape* of the §3.5 policy; the owner
Expand Down
6 changes: 4 additions & 2 deletions reports/technical_risk_register.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
| Owner | Dylan Pinheiro / PRIO MD&D Team |
| Last Updated | 2026-07-19 |
| Total Concerns | 55 |
| Open Concerns | 26 |
| Resolved Concerns | 29 |
| Open Concerns | 25 |
| Resolved Concerns | 30 |

---

Expand Down Expand Up @@ -531,6 +531,8 @@ No silent corruption and no current breakage (development is green on 2.3.0) →

**Partly addressed by S1 (epic #85 / #86, 2026-06-28).** `frames.py` was reworked to the declare-don't-guess design (D-11): it now exposes `build_prediction_frame` / `build_target_frame` over **declared primitives** (a 2-D `(N, S)` array + `(time, unit)`), supports **S>1** (the `S=1` hardcode is gone), is **pandas-free** (no longer the lone pandas importer — it sits alongside `delivery/`), and fails loud rather than inferring/reshaping. So the *S=1-hardcode*, *inference-risk*, and *pandas-coupling* dimensions are resolved. **Residual (entry stays open):** the module is still **not called by the live delivery path** — that wiring is S3 (#88, forecast convert-at-the-door). C-45 resolves when S3 lands (or, if S3 is abandoned, when the module is removed).

**RESOLVED 2026-07-20 (epic #105, S6/S7 — the wiring landed):** `frames.build_prediction_frame` is now on the live contract path — `track_a_source` constructs every interior frame through it, called by `wire/source_selection.fetch_run`, which the manager's declared contract mode invokes (`_read_forecast_data_contract`). The conformance scaffolding became the load-bearing constructor exactly as intended. (#88 was superseded by #105/#111; the wiring shipped there.)

See also C-40 (the pandas gate this adapter anticipates), #45 (the draws carrier that will need the `S>1` version), epic **#85** / **#86** (the S1 rework) / **#88** (the S3 wiring that closes this), **D-11** (the declare-don't-guess decision).

---
Expand Down
Loading