Epic: #51 · cross-cutting end-to-end validation for the input-integrity guards
Problem
The guards added in S2-S5 (and S1's outcome) need an integration-level test exercising the full enrich→validate→metadata path on synthetic data, proving each failure mode is caught — beyond each story's own unit tests.
Work — one tests/test_input_integrity*.py module covering:
Acceptance criteria
Dependencies
Follows S2-S5 and reflects S1's decision. Each implementation story carries its own unit tests; this is the integration layer.
Epic: #51 · cross-cutting end-to-end validation for the input-integrity guards
Problem
The guards added in S2-S5 (and S1's outcome) need an integration-level test exercising the full enrich→validate→metadata path on synthetic data, proving each failure mode is caught — beyond each story's own unit tests.
Work — one
tests/test_input_integrity*.pymodule covering:category="forecast"file with a different ensemble name is rejected; the correct one is selected.land_gaul-shaped fixture asserts 64,736 + 82; an injected unassigned cell crashes loud.skip/xfailwith a clear reason if the guard is upstream-only.Acceptance criteria
skip/xfail(with reason) where a guard is upstream/deferred.ruff+ full suite green.Dependencies
Follows S2-S5 and reflects S1's decision. Each implementation story carries its own unit tests; this is the integration layer.