Tracking issue for the **Push pandas to the seams** epic (#85). Pick off one site at a time, each its own PR with a parity proof; check off as merged. ## Execution order - [x] **S1** #86 — `frames.py` → S>1 `PredictionFrame` `[UNILATERAL]` *(keystone; do first)* - [x] **S2** #87 — `extraction.py` frame-native sibling readers `[UNILATERAL]` *(dep S1)* - [ ] **S3** #88 — forecast "convert at the door" `[UNILATERAL]` *(dep S1, S2)* - [ ] **S4** #89 — `enrichment.py` numpy/pyarrow gather `[UNILATERAL, low pri]` *(independent)* - [ ] **S5** #90 — `build_gaul_lookup.py` pyarrow-native `[UNILATERAL, lowest pri]` *(independent)* - [ ] **S6** #91 — forecast outbound → arrow sample-frame `[GATED: faoapi #45 + C-40]` *(dep S3)* - [ ] **S7** #92 — historical inbound retirement `[GATED: pipeline-core C-40]` *(do not move yet)* - [ ] Close epic #85 ## Sequence ``` S1 ──► S2 ──► S3 ──► S6 (gated: faoapi #45) S4, S5 (independent, low/lowest priority) S7 (gated: pipeline-core C-40) — never blocks samples ``` ## Notes - **Unilateral arc = S1→S2→S3.** Landing these makes vpp's interior carry `(N,S)` with byte-identical S=1 deliveries — the samples-ready milestone behind frozen wires. - **S6 ships samples to FAO** but needs the coordinated faoapi wire change (#45). **S7** is pipeline-core-gated (C-40) and never blocks the sample work. - Parity pattern for every step: `tests/test_views_frames_conformance.py` (build pandas → convert → assert arrays equal) + head-to-head old-vs-new fixtures. - Each story = its own PR → `development`, usual ritual (ruff/tests/CI; manual issue close on `development` merges). - Cross-refs: register **C-40**, **#45**.
Tracking issue for the Push pandas to the seams epic (#85). Pick off one site at a time, each its own PR with a parity proof; check off as merged.
Execution order
frames.py→ S>1PredictionFrame[UNILATERAL](keystone; do first)extraction.pyframe-native sibling readers[UNILATERAL](dep S1)[UNILATERAL](dep S1, S2)enrichment.pynumpy/pyarrow gather[UNILATERAL, low pri](independent)build_gaul_lookup.pypyarrow-native[UNILATERAL, lowest pri](independent)[GATED: faoapi #45 + C-40](dep S3)[GATED: pipeline-core C-40](do not move yet)Sequence
Notes
(N,S)with byte-identical S=1 deliveries — the samples-ready milestone behind frozen wires.tests/test_views_frames_conformance.py(build pandas → convert → assert arrays equal) + head-to-head old-vs-new fixtures.development, usual ritual (ruff/tests/CI; manual issue close ondevelopmentmerges).