Repository navigation
Every baseline model has been unrunnable since 2026-08-02 — catalog.py reads the retired config['targets'] key (27 models) #84
Description
Summary
views_baseline/model/catalog.py reads self.config["targets"] at 7 call sites. That key was
deliberately retired by views-pipeline-core on 2026-08-02 (507ae11, "fix!: retire the
synthesized targets config key", refs #380 / C-269). pipeline-core migrated its own 13 read sites
to a new helper; views-baseline was never swept.
Every baseline model has therefore been unrunnable since 2026-08-02 — that's 27 models in
views-models whose algorithm this catalog serves.
Found from views-hydranet, where it blocks a pre-registered acceptance criterion (details at the
bottom). Filing here rather than fixing it, since this is your repo.
The failure
File "views_baseline/model/catalog.py", line 75, in _get_conflictology_model
targets=self.config["targets"],
~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'targets'
Reproduced 2026-09-07 running light_strider on the validation partition.
Why the key is gone
pipeline-core's ConfigurationManager.get_combined_config used to synthesise
config["targets"] from regression_targets + classification_targets for every model. It was a
backward-compatibility shim. views-evaluation retired targets in its 0.4.0 API and now raises
on a config carrying it — and pipeline-core hands its whole merged config to NativeEvaluator — so
the shim broke every evaluation run.
507ae11 removed the synthesis rather than hiding it, and its message is explicit that this was
the deliberate choice:
An earlier idea was to strip it at the evaluator boundary, which would have kept a dead key alive
everywhere else and concealed it from the one component honest enough to complain.
The 7 sites
views_baseline/model/catalog.py — lines 57, 62, 67, 75, 85, 98, 112, one per builder:
| line | builder |
|---|---|
| 57 | _get_zero_model |
| 62 | _get_locf_model |
| 67 | _get_average_model |
| 75 | _get_conflictology_model |
| 85 | _get_mixture_model |
| 98 | (mixture variant) |
| 112 | _get_parametric_hurdle |
The replacement pipeline-core provides
views_pipeline_core.managers.configuration.configuration.combined_targets(config) — verified
importable from the currently pinned pipeline-core. It returns regression targets then
classification targets, and raises if a retired key reappears (the old shim let a stale
targets take precedence, which is how it could quietly outrank the split keys).
So each site is plausibly:
targets=combined_targets(self.config),We have not tested this — it is what the migration did in pipeline-core, offered as a starting
point, not a verified patch. Two things worth checking that we could not check from outside:
- Ordering.
combined_targetsreturns regression-then-classification. If any baseline model
depends on a different order, concatenation order matters and should be pinned by a test. - Models with no classification targets.
light_striderdeclares onlyregression_targets;
the helper returns[]for the missing key where the old shim reportedly crashed onNone. Fine
for us, but worth confirming against the other 26.
Blast radius
27 models in views-models carry an algorithm served by this catalog:
MixtureBaseline 8 · ParametricHurdleConflictology 6 · LocfModel 5
ConflictologyModel 4 · ZeroModel 2 · AverageModel 2
Why we care downstream
light_strider is the datafactory climatology comparator for a pre-registered kill criterion
(K3: "worse than climatology on crps_events/mcr_events for more than half the months") in
views-hydranet's ensemble-roster dossier. Because it cannot run, K3 is recorded VOID, not PASS —
the 8-member roster has never been compared to a baseline. Tracked at views-hydranet#249.
No urgency implied for your planning; we have recorded it as untested rather than assuming a pass.
Suggested check once fixed
A test that constructs each of the 7 builders from a realistic merged config would have caught this
and would catch the next retired key. Right now the first signal is a KeyError in a training run.
Cross-refs: pipeline-core 507ae11 (#380, C-269) · views-models#445 (filed 2026-09-07, same root
cause, no comments yet) · views-hydranet#249.
Activity
Polichinel commentedon Sep 9, 2026
Picked this up — it is now owned by epic #85, with the fix as #86 and seven further stories
through to the views-models adoption (views-platform/views-models#459).
Three notes from the investigation, one of which changes the proposed fix.
1. The count is 29, not 27. The tally here omits the two
ParametricConflictologymodels(
doctorish_dwarf,stumpy_dwarf). views-platform/views-models#445 has the correct roster.2. Divergence on the fix — not using
combined_targets(). This issue proposescombined_targets(self.config). That was considered and rejected, for two reasons:views_baseline/model/catalog.pysits undermodel/, which ADR-013 forbids from importingviews-pipeline-core at module level. Calling the helper there breaks the one topology rule this
package actually maintains (
model/has zero module-level pipeline-core imports today).keys arriving by a different mechanism from the other six (
window_months,lambda_mix,n_samples,seed,family,transform), which is a split convention rather than a boundary.Instead the catalog derives once in
__init__and readsregression_targetsdirectly. Your twoopen questions resolve cleanly under that:
classification_targets.classification_targets— that is all of them, so nothing is dropped. No guardis added either:
ZeroModelandLocfModelare perfectly valid classification baselines, and acatalog-level veto would block models that already work.
3. Your "suggested check once fixed" became #88 — a conformance test constructing all seven
builders from a realistic merged config. Worth noting why it belongs here rather than upstream:
pipeline-core has registered the blindness itself (its C-289 — a repo "cannot see a consumer,
because being imported by someone leaves no trace in your own source") and its conformance suite
explicitly exempts views-baseline, pushing the check to our side, where it did not exist.
Closing this when #86 merges.
fix: address code-review findings — re-arm the C-10 guard, close two …
Polichinel commentedon Sep 9, 2026
Closed by #94, merged to
development(2b3d3b4). CI green:check (3.11),lint,build,check-branchall pass — the first green Lint and Test since 2026-08-02. Suite 248 → 295 passed.