Overview
Generalise the per-workspace smoke_tests.yml (9 near-identical ~100-line copies, hard-coded dependency chains) into one Heart-owned reusable workflow, per the docs-build.yml precedent — --auto supervised, prompt PyAutoMind/issued/pyautoscientist_3b_smoke_reusable.md (drafted at Phase-3a, human-directed "do Phase 3"). This is the missing piece that makes an adopter's workspace CI a thin caller, and deletes ~900 duplicated lines from the live setup.
Plan
- Heart
.github/workflows/smoke-tests.yml (reusable): input package → workspace + dependency-chain map; owns the ceremony — chain checkout, branch matching, base source install, jupyter tooling, cache dirs, python .github/scripts/run_smoke.py, Slack-on-failure. Always checks out PyAutoBuild + sets its PYTHONPATH (the main-workspace runners need it; benign for the test/HowTo tier — disclosed parity delta).
- Per-repo install epilogue stays workspace-owned: a new tiny
.github/scripts/smoke_install.sh (receives PYTHON_VERSION) carrying exactly the lines that differ today — [optional] extras on 3.12, numba/nufftax on 3.13, tensorflow-probability pin, autofit's nautilus + NSS git pins. Base + epilogue reproduces each repo's current pip set exactly.
- Convert
autolens_workspace first — the PR run itself is the end-to-end parity proof (same workflow name "Smoke Tests", so Heart's required-workflow gating is untouched; the reusable Navigator Check already proves the pattern under gating).
- Sweep the remaining 7 free repos (autofit/autogalaxy workspaces, autofit/autogalaxy _test, HowToFit/Galaxy/Lens).
autolens_workspace_test is claimed by rectangular-kernel-cdf-mesh — batched: disjoint override or defer.
- Follow-up noted for spawn: with the reusable live, spawn can stamp thin callers into the template family (spec already gates this on 3b-2).
Acceptance
- Each converted repo's Smoke Tests check runs green on its PR via the reusable workflow, with the same matrix and pip set (modulo the disclosed PYTHONPATH delta).
- Heart's
config/repos.yaml required-workflow names unchanged.
- One PR per repo; supervised gates.
🤖 Generated with Claude Code
Overview
Generalise the per-workspace
smoke_tests.yml(9 near-identical ~100-line copies, hard-coded dependency chains) into one Heart-owned reusable workflow, per the docs-build.yml precedent —--autosupervised, promptPyAutoMind/issued/pyautoscientist_3b_smoke_reusable.md(drafted at Phase-3a, human-directed "do Phase 3"). This is the missing piece that makes an adopter's workspace CI a thin caller, and deletes ~900 duplicated lines from the live setup.Plan
.github/workflows/smoke-tests.yml(reusable): inputpackage→ workspace + dependency-chain map; owns the ceremony — chain checkout, branch matching, base source install, jupyter tooling, cache dirs,python .github/scripts/run_smoke.py, Slack-on-failure. Always checks out PyAutoBuild + sets its PYTHONPATH (the main-workspace runners need it; benign for the test/HowTo tier — disclosed parity delta)..github/scripts/smoke_install.sh(receivesPYTHON_VERSION) carrying exactly the lines that differ today —[optional]extras on 3.12,numba/nufftaxon 3.13,tensorflow-probabilitypin, autofit's nautilus + NSS git pins. Base + epilogue reproduces each repo's current pip set exactly.autolens_workspacefirst — the PR run itself is the end-to-end parity proof (same workflow name "Smoke Tests", so Heart's required-workflow gating is untouched; the reusable Navigator Check already proves the pattern under gating).autolens_workspace_testis claimed by rectangular-kernel-cdf-mesh — batched: disjoint override or defer.Acceptance
config/repos.yamlrequired-workflow names unchanged.🤖 Generated with Claude Code