Skip to content

[Tracking] Epic #85 — baseline targets-key migration (S1–S8 checklist) #93

Open

Description

@Polichinel

Checklist for #85. Cross them off in order — the sequence is load-bearing in three places, noted below.

Stories (in order)

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

  1. 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.
  2. S5 before S7. Releasing from a branch whose CI cannot run reproduces the exact condition that
    hid this bug for five weeks.
  3. 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 in tests/ (the ~115 constructor-kwarg and fixture uses stay)
  • conda run -n views_pipeline python -m pytest -q green: ≥248 passed + new tests
  • ruff check . clean and bash docs/validate_docs.sh exits 0
  • "Lint and Test" green on GitHub Actions — first green since 2026-08-02
  • pip install views-baseline==1.0.2 resolves from a clean index (first time for any version)
  • light_strider runs end to end on the validation partition and emits a PredictionFrame
  • 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 editable views_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: development is protected (PRs only); main additionally requires 1 review
    with enforce_admins. S7 needs the admin-merge toggle for the release PR.
  • reports/ is gitignored — the register needs git 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 scipy in evaluation/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.0 is published and we pin <2 — unrelated
    • run.sh install semantics — a pipeline-core template change, not a views-models one
  • 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.

Activity

  1. added
    epicTracking issue for a multi-story epic
    on Sep 9, 2026
  2. Polichinel commented on Sep 9, 2026

    @Polichinel
    ContributorAuthor

    S1–S6 merged ✅

    PR #94 merged to development as 2b3d3b4. 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. ruff clean. validate_docs.sh green.

    A /code-review max ran before merge and found 20 items; 11 were fixed in this PR

    The ones worth knowing about, because three were self-inflicted by the epic itself:

    1. The C-10 forwarding guard silently stopped checking 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.
    2. 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 rewrites None → [] before the manager sees it. The gate now rejects empty values.
    3. Deriving targets in __init__ broke list_models() — ADR-004 Stable, CIC "no side effects". It's a property now.
    4. The conformance fixtures weren't configs pipeline-core would accept, falsifying the module docstring. CoreConfigSniffer rejected all seven. Now complete, and a new test hands each to the sniffer so the claim is enforced, not asserted.
    5. 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_type read 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 unpinned uvx 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-evaluation requires scipy>=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

  3. Polichinel commented on Sep 9, 2026

    @Polichinel
    ContributorAuthor

    S7 done — 1.0.2 is on PyPI

    main is at 6c43f6d (PR #96), release v1.0.2 published, enforce_admins restored on main.

    Clean-room install verified — the first successful install of any views-baseline version. In an empty 3.11 venv, get_model("MixtureBaseline") on black_ranger's real config returns targets: ['lr_os_best']. C-38 resolved (#97).

    Definition of done — 7 of 9

    ✅ Catalog no longer reads the retired key
    ✅ Tests describe the config shape production has
    ✅ Failure is loud at the boundary
    ✅ CI green — first since 2026-08-02
    ✅ 1.0.2 on PyPI
    ✅ pip install views-baseline==1.0.2 resolves
    ⬜ views-models floor raised ×29 so existing envs pick it up
    ⬜ light_strider runs end to end and emits a PredictionFrame
    ⬜ #84 ✅ and views-models#445 ⬜ closed

    The bar was never "published" — it is a baseline model producing a forecast. That needs views-models#459.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking issue for a multi-story epic

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions