Task 3 β extend ci.yml with the D-REPRO-03 metrics-regression gate.
- Adds top-level schedule trigger: cron 0 6 * * 0 (Sundays 06:00 UTC).
- Adds new metrics-regression job with explicit if-condition that triggers
ONLY on schedule events OR push to a tag matching refs/tags/v* β NOT on
regular PRs or pushes to main. The smoke-train job remains the per-PR
gate (60s budget); this gate runs the full ~15min make all + 1e-4 1e-4
cross-run reproducibility check.
- ubuntu-latest, timeout-minutes: 30 (15min make all + headroom).
- actions/upload-artifact@v4 on failure: surfaces the failing
eval_metrics.json + plots so a maintainer can diagnose without re-running
locally.
Existing lint-test (matrix Win/macOS/Linux Γ py 3.13) and smoke-train
(path-filtered, per-PR) jobs preserved unchanged.
YAML parses cleanly via PyYAML; metrics-regression and schedule both
present in the parsed doc.
.github/workflows/ci.yml β RESEARCH Pattern 8 with two jobs:
lint-test: matrix [ubuntu-latest, windows-latest, macos-latest] x py 3.13
ruff + ruff-format + mypy model/ (D-16 standard mode) + pytest.
pytest --ignore=tests/test_synth_smoke.py so smoke runs only in
its own path-filtered job below.
smoke-train: D-17 100 samples/class smoke. dorny/paths-filter@v3 gates the
whole job to PRs that touch model/ or tests/ paths. Runs only
on ubuntu-latest because it is a CPU-only generator and the
Pitfall 4 budget is set against a single platform anyway.
.github/workflows/release.yml β RESEARCH Pattern 7 HF Hub mirror on tag push:
hf auth login --token $HF_TOKEN + hf upload-large-folder --repo-type model.
HF_TOKEN secret needs registering in repo Settings -> Secrets and variables.
tests/test_synth_smoke.py β D-17 verbatim:
SMOKE_N_PER_CLASS = 100, SMOKE_BUDGET_SECONDS = 60.
Asserts wall time, row coβ¦