Repository navigation
[Tracking] Epic #85 — baseline targets-key migration (S1–S8 checklist) #93
Copy link
Copy link
Open
Labels
epicTracking issue for a multi-story epicTracking issue for a multi-story epic
Description
Checklist for #85. Cross them off in order — the sequence is load-bearing in three places, noted below.
Stories (in order)
- S1: Read regression_targets in the catalog; migrate the 46 fixture sites #86 — S1: Read
regression_targetsin the catalog; migrate the 46 fixture sites (implementation, bug) — closes Every baseline model has been unrunnable since 2026-08-02 — catalog.py reads the retired config['targets'] key (27 models) #84 - S2: Promote regression_targets and level to CORE_GENOME #87 — S2: Promote
regression_targetsandleveltoCORE_GENOME(implementation) — depends on S1 - S3: Conformance test — build all 7 catalog models from a realistic merged config #88 — S3: Conformance test — build all 7 catalog models from a realistic merged config (testing) — depends on S1
- S4: Guard audit — mutation-test the new guards against both tests and code #89 — S4: Guard audit — mutation-test the new guards against both tests and code (testing) — depends on S2, S3
- S5: Restore CI as a real merge gate #90 — S5: Restore CI as a real merge gate (implementation) — independent, must land before S7
- S6: Update ADR-009, the two CICs, and the risk register #91 — S6: Update ADR-009, the two CICs, and the risk register (documentation) — depends on S1, S2
- S7: Release 1.0.2 to PyPI #92 — S7: Release 1.0.2 to PyPI (implementation) — depends on S1–S6
- S8: Adopt views-baseline 1.0.2 — floor bump ×29 + smoke-test fix views-models#459 — S8: Adopt views-baseline 1.0.2 — floor bump ×29 + smoke-test fix (implementation) — depends on S7, closes views-models#445
Dependency chain
S1 #86 ──┬──→ S2 #87 ──┐
├──→ S3 #88 ──┴──→ S4 #89 ──┐
└──→ S6 #91 ────────────────┼──→ S7 #92 ──→ S8 (views-models#459)
S5 #90 ─────────────────────────────┘
Three places the order actually matters
- Inside S1, fixtures before the catalog. The suite must go red between the two commits.
A PR that was never red has not demonstrated that the tests now describe reality. - S5 before S7. Releasing from a branch whose CI cannot run reproduces the exact condition that
hid this bug for five weeks. - S8 is one PR, not two. The floor bump is what pulls 1.0.2 into the shared env; 1.0.2 is what
the smoke-test fix requires. Split them and views-models CI breaks in whichever order you land them.
Definition of done (epic)
-
grep -rn 'config\["targets"\]' views_baseline/returns nothing - No config-key
"targets"left intests/(the ~115 constructor-kwarg and fixture uses stay) -
conda run -n views_pipeline python -m pytest -qgreen: ≥248 passed + new tests -
ruff check .clean andbash docs/validate_docs.shexits 0 - "Lint and Test" green on GitHub Actions — first green since 2026-08-02
-
pip install views-baseline==1.0.2resolves from a clean index (first time for any version) -
light_striderruns end to end on the validation partition and emits aPredictionFrame - Every baseline model has been unrunnable since 2026-08-02 — catalog.py reads the retired config['targets'] key (27 models) #84 and views-models#445 closed with evidence
Notes / conventions
- Test gate:
conda run -n views_pipeline python -m pytest -q— the editableviews_pipeline
conda env. CI cannot run until S5 lands, so until then this is the only gate. Baseline before
any change: 248 passed, 1 xfailed. - Branch protection:
developmentis protected (PRs only);mainadditionally requires 1 review
withenforce_admins. S7 needs the admin-merge toggle for the release PR. reports/is gitignored — the register needsgit add -f.- Register concerns touched: C-42 (mis-tiered on 2026-09-09; S6 supersedes it with the tier
corrected and the reason recorded), C-38 (discharges in S5/S7 — pipeline-core 3.0.0 reached PyPI
2026-08-03), C-44 (S6 extends with the concrete instance). - Out of scope — do not reopen inside this epic. Each has an owner:
- C-19 catalog registry consolidation — deferred by ADR-012; the seven
_get_*factories stay - C-40 ADR path drift from the epic [EPIC] Dual-input (FeatureFrame | DataFrame) on a SOLID, screaming-architecture layout (implements ADR-019) #47 reorg (8 ADRs cite deleted files) — needs its own epic
- C-41 undeclared
scipyinevaluation/closeness.py— separate issue per maintainer; S7
records the observation only - C-45 no public API façade on
views_baseline/__init__.py views-frames 2.0.0is published and we pin<2— unrelatedrun.shinstall semantics — a pipeline-core template change, not a views-models one
- C-19 catalog registry consolidation — deferred by ADR-012; the seven
- Related upstream: pipeline-core #380/#381 (the retirement), its C-269/C-286/C-289, and
views-models #204 (the env-lifecycle root cause behind the floor bump), #445, #405, #455.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
epicTracking issue for a multi-story epicTracking issue for a multi-story epic
Activity
Polichinel commentedon Sep 9, 2026
S1–S6 merged ✅
PR #94 merged to
developmentas2b3d3b4. Branch deleted.CI green:
check (3.11),lint,build,check-branch— first green Lint and Test since 2026-08-02.Suite: 248 → 295 passed, 1 xfailed.
ruffclean.validate_docs.shgreen.A
/code-review maxran before merge and found 20 items; 11 were fixed in this PRThe ones worth knowing about, because three were self-inflicted by the epic itself:
targets. It skips any constructor param whose name isn't a config key — and the config key had just been renamed. The test stayed green while no longer testing the thing its own failure message names. Fixed with an explicit param→key map, verified by mutation.regression_targets: []passed the entire gate. Presence yes, non-None yes → every model built with zero targets and the run reports success having written no PredictionFrames. Reachable in production because check 4 isn't: pipeline-core rewritesNone→[]before the manager sees it. The gate now rejects empty values.__init__brokelist_models()— ADR-004 Stable, CIC "no side effects". It's a property now.CoreConfigSnifferrejected all seven. Now complete, and a new test hands each to the sniffer so the claim is enforced, not asserted.match=re.escape(missing_key)re-introduced the substring looseness the same commit removed 100 lines below — "steps" matches a message naming only "time_steps".Five new register entries for what was deliberately not fixed
C-48
run_typeread past the gate (not promoted — it's runtime-injected, and requiring it would break the static downstream check; the C-24 lesson). C-49 CI runs but is not a required status check, so green is advisory. C-50 the catalog reimplements the platform's target vocabulary — a recorded consequence of the ADR-013 decision, including that the new conformance guard cannot detect the failure it was built for. C-51 unpinneduvx ruff. C-52 fixture keyed by algorithm caps coverage at one config each.C-41 was corrected — I had claimed a clean install raises
ModuleNotFoundError: scipy. False:views-baseline → views-pipeline-core → views-evaluationrequiresscipy>=1.11,<2. The real defect is smaller — we import it directly while declaring nothing.🤖 Generated with Claude Code
https://claude.ai/code/session_01PoczAeeAcC81UVMGMSiAvS
Polichinel commentedon Sep 9, 2026
S7 done — 1.0.2 is on PyPI
mainis at6c43f6d(PR #96), release v1.0.2 published,enforce_adminsrestored onmain.Clean-room install verified — the first successful install of any views-baseline version. In an empty 3.11 venv,
get_model("MixtureBaseline")onblack_ranger's real config returnstargets: ['lr_os_best']. C-38 resolved (#97).Definition of done — 7 of 9
pip install views-baseline==1.0.2resolveslight_striderruns end to end and emits a PredictionFrameThe bar was never "published" — it is a baseline model producing a forecast. That needs views-models#459.