Goal
Add deterministic scientific evidence artifacts for core CLI/API validation so fitting accuracy can be reviewed visually as PNG exports — not only numerically.
Depends On
Background
The community needs reliable, sophisticated fitting results that can be inspected visually. Currently, validation is numeric only. Artifact-based visual regression allows maintainers and community members to judge fit quality and detect regressions from CI run artifacts — without needing to re-run locally.
spectrafit/generators/synthetic.py provides SyntheticSpectrum and PeakDefinition for deterministic scenario construction. spectrafit/plotting.py provides the current plotting surface. Determinism requires pinned seed, style, DPI, backend, and filename conventions.
Tasks
Acceptance Criteria
- Validation runs generate deterministic PNG artifacts locally via
uv run pytest tests/validation/ -m validation
- CI uploads visual artifacts corresponding to numeric validation results
- The repository has a defined acceptance rule for visual-regression review (documented in
docs/ or tests/validation/README.md)
Determinism Requirements
| Setting |
Value |
| NumPy seed |
fixed per scenario (e.g., 42) |
| Matplotlib backend |
Agg |
| DPI |
150 |
| Style |
seaborn-v0_8-whitegrid or pinned style sheet |
| Filename |
validation_{scenario_id}.png |
Scope Constraint
First wave: core CLI/API validation only. Visual artifacts complement numeric validation; they do not replace it.
Goal
Add deterministic scientific evidence artifacts for core CLI/API validation so fitting accuracy can be reviewed visually as PNG exports — not only numerically.
Depends On
Background
The community needs reliable, sophisticated fitting results that can be inspected visually. Currently, validation is numeric only. Artifact-based visual regression allows maintainers and community members to judge fit quality and detect regressions from CI run artifacts — without needing to re-run locally.
spectrafit/generators/synthetic.pyprovidesSyntheticSpectrumandPeakDefinitionfor deterministic scenario construction.spectrafit/plotting.pyprovides the current plotting surface. Determinism requires pinned seed, style, DPI, backend, and filename conventions.Tasks
SyntheticSpectrumandPeakDefinitionfor at least three cases:spectrafit/plotting.pyor dedicated test utilities; each scenario must emit predictable PNG outputs (pinned seed,matplotlibAggbackend, fixed DPI=150, fixed filename patternvalidation_{scenario}_{timestamp_or_fixed}.png)tests/validation/test_visual_regression.py; usepytest-pltwhere appropriate; keep baselines stable through pinned style, seed, DPI, and filename conventions.github/workflows/python-ci.ymlvalidation job to upload PNG artifacts alongsidevalidation-report.jsonandvalidation-report.html; document how maintainers inspect failuresAcceptance Criteria
uv run pytest tests/validation/ -m validationdocs/ortests/validation/README.md)Determinism Requirements
Aggseaborn-v0_8-whitegridor pinned style sheetvalidation_{scenario_id}.pngScope Constraint
First wave: core CLI/API validation only. Visual artifacts complement numeric validation; they do not replace it.