You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Autonomy: supervised
Difficulty: large (executed as two scoped tasks — see Scope split)
Found: 2026-07-09 (verify_install check F). Diagnosis corrected 2026-07-13 — the
original "15×15 smoke artifact" framing below the fold was disproven; the real defect is
the -f force-commit, not simulator env.
Supersedes the old framing (issued/release_ships_smoke_datasets.md, retired
2026-07-13). The datasets aren't 15×15 because a smoke run shrank them at release — generate.py never runs simulators. They're committed at all because pre_build.sh
force-stages dataset/ against .gitignore; some are incidentally 15×15 because a
prior local smoke run (PYAUTO_SMALL_DATASETS=1) left them on disk before pre_build.
Corrected diagnosis
Design intent (encoded in each workspace .gitignore): dataset/** is gitignored
except a small allowlist of real observational data un-ignored via ! lines. All simulated datasets are meant to be generated at runtime, never committed. The
self-provision mechanism already exists — al.util.dataset.should_simulate(path) +
a simulator subprocess (canonical example scripts/imaging/modeling.py:96-102).
Two coupled bugs:
PyAutoBuild/pre_build.sh runs git add -f dataset/ — the -f overrides .gitignore,
committing simulated datasets that should be ignored.
A minority of example scripts load simulated data without the should_simulate
guard, so they only work because the -f leak committed the data for them.
Phase-2 cross-repo audit (2026-07-13, read-only)
Repo
ignore rule
tracked non-allowlisted
size
simulators
orphan dirs
loader
autolens_workspace
dataset/** + 14 ! allowlist
242
8.2 MB
63
7
from_fits
autogalaxy_workspace
dataset/** + 2 ! allowlist
134
1.4 MB
32
5
from_fits
autofit_workspace
bare dataset/
409
2.6 MB
3
—
from_json
HowToFit
bare dataset/
408
2.6 MB
2
—
from_json
HowToGalaxy
bare dataset/
21
2.8 MB
4
—
from_fits
HowToLens
bare dataset/
27
0.9 MB
7
—
from_fits
Notebook/Colab CWD gate → PASS. The guard's relative subprocess path resolves in both
notebook paths: Colab via setup_colab.setup() → os.chdir(workspace_dir)
(setup_colab.py:250); CI nbconvert via run_smoke.py:118 (cwd=str(WORKSPACE)). Purge is
CWD-safe provided each simulated loader is guarded and its simulator exists.
Orphans (no simulator reference — do not blind-purge):
Group B = the 4 bare-dataset/ repos (autofit, HowToFit, HowToGalaxy, HowToLens) —
small toy/tutorial data, possibly committed-by-design; needs a policy decision (allowlist
vs purge+guard, and a from_json guard idiom for the fit repos). Filed separately as bug/pyautobuild/release_datasets_group_b_policy.md.
Plan (high-level)
Leg 1 — stop the leak (universal): drop -f from git add dataset/ in pre_build.sh so staging honors .gitignore.
Leg 2 — guard the problem set (Group A): add the should_simulate + simulator
subprocess to the truly-unguarded simulated loaders (small set; not the sibling scripts
that rely on a folder's guarded start_here.py).
Leg 3 — purge (Group A): git rm the non-allowlisted committed simulated datasets, excluding the classified orphans. Users/CI/Colab regenerate via the simulators.
Leg 4 — guard leg: an allowlist-based assertion (git ls-files dataset/ ⊆ .gitignore
allowlist — NOT git check-ignore, which mis-flags tracked + negated paths), wired as a
PyAutoHeart leg or pre_build assertion, landed after the purge so it goes green.
Plan (detailed)
Leg 1 — PyAutoBuild/pre_build.sh: git add -f dataset/ → git add dataset/.
Already-tracked real (allowlisted) data stays tracked; only allowlisted paths can ever be
staged henceforth.
Leg 2 — per Group A repo, for each from_fits script that loads a non-allowlisted
(simulated) dataset and lacks should_simulate: insert the guard block mirroring autolens_workspace/scripts/imaging/modeling.py:96-102, targeting that folder's simulator.
Exclude scripts whose data is provided by a guarded start_here.py in the same folder.
Leg 3 — git rm -r --cached (then remove from tree) each non-allowlisted, non-orphan
dataset dir in autolens + autogalaxy; verify a simulator produces it first. Orphans parked
for a per-dir decision (dead → purge; consumer-but-no-simulator → needs a simulator).
Leg 4 — allowlist guard: parse each workspace .gitignore!dataset/... lines, assert
every git ls-files dataset/ entry is under an allowlisted prefix. Fail loud otherwise.
Autonomy
--auto, effective level supervised (bug cap). Plan written here; implementation
proceeds; run parks at ship sign-off with a batched question (no auto-PR, no merge).
Orphan-dir dispositions and the precise leg-2 set are supervised judgment forks → batched
questions on this issue.
Impact
Every pip/Colab/tagged-zip user ships ~10 MB of simulated datasets that should be
runtime-generated; some are degenerate 15×15 from a pre-release smoke run. Open =
release-blocker.
bug: release pipeline force-commits simulated workspace datasets (
git add -f)Autonomy: supervised
Difficulty: large (executed as two scoped tasks — see Scope split)
Found: 2026-07-09 (verify_install check F). Diagnosis corrected 2026-07-13 — the
original "15×15 smoke artifact" framing below the fold was disproven; the real defect is
the
-fforce-commit, not simulator env.Corrected diagnosis
Design intent (encoded in each workspace
.gitignore):dataset/**is gitignoredexcept a small allowlist of real observational data un-ignored via
!lines. Allsimulated datasets are meant to be generated at runtime, never committed. The
self-provision mechanism already exists —
al.util.dataset.should_simulate(path)+a simulator subprocess (canonical example
scripts/imaging/modeling.py:96-102).Two coupled bugs:
PyAutoBuild/pre_build.shrunsgit add -f dataset/— the-foverrides.gitignore,committing simulated datasets that should be ignored.
should_simulateguard, so they only work because the
-fleak committed the data for them.Phase-2 cross-repo audit (2026-07-13, read-only)
dataset/**+ 14!allowlistfrom_fitsdataset/**+ 2!allowlistfrom_fitsdataset/from_jsondataset/from_jsondataset/from_fitsdataset/from_fitsNotebook/Colab CWD gate → PASS. The guard's relative subprocess path resolves in both
notebook paths: Colab via
setup_colab.setup()→os.chdir(workspace_dir)(
setup_colab.py:250); CI nbconvert viarun_smoke.py:118(cwd=str(WORKSPACE)). Purge isCWD-safe provided each simulated loader is guarded and its simulator exists.
Orphans (no simulator reference — do not blind-purge):
cluster/csv_api_example,imaging/simulated_lens,interferometer/{many_visibilities, simpleold, simulated_lens},point_source/{simulated_lens, start_here_example}database/simple__{0,1,2},{imaging,interferometer}/simulated_galaxyScope split
autolens_workspace+autogalaxy_workspace— allowlistregime,
from_fits+should_simulateidiom already present, simulators exist. The 4-legfix applies as written. Plus universal leg 1 (the
-fdrop).dataset/repos (autofit, HowToFit, HowToGalaxy, HowToLens) —small toy/tutorial data, possibly committed-by-design; needs a policy decision (allowlist
vs purge+guard, and a
from_jsonguard idiom for the fit repos). Filed separately asbug/pyautobuild/release_datasets_group_b_policy.md.Plan (high-level)
-ffromgit add dataset/inpre_build.shso staging honors.gitignore.should_simulate+ simulatorsubprocess to the truly-unguarded simulated loaders (small set; not the sibling scripts
that rely on a folder's guarded
start_here.py).git rmthe non-allowlisted committed simulated datasets,excluding the classified orphans. Users/CI/Colab regenerate via the simulators.
git ls-files dataset/⊆.gitignoreallowlist — NOT
git check-ignore, which mis-flags tracked + negated paths), wired as aPyAutoHeart leg or pre_build assertion, landed after the purge so it goes green.
Plan (detailed)
PyAutoBuild/pre_build.sh:git add -f dataset/→git add dataset/.Already-tracked real (allowlisted) data stays tracked; only allowlisted paths can ever be
staged henceforth.
from_fitsscript that loads a non-allowlisted(simulated) dataset and lacks
should_simulate: insert the guard block mirroringautolens_workspace/scripts/imaging/modeling.py:96-102, targeting that folder's simulator.Exclude scripts whose data is provided by a guarded
start_here.pyin the same folder.git rm -r --cached(then remove from tree) each non-allowlisted, non-orphandataset dir in autolens + autogalaxy; verify a simulator produces it first. Orphans parked
for a per-dir decision (dead → purge; consumer-but-no-simulator → needs a simulator).
.gitignore!dataset/...lines, assertevery
git ls-files dataset/entry is under an allowlisted prefix. Fail loud otherwise.Autonomy
--auto, effective level supervised (bug cap). Plan written here; implementationproceeds; run parks at ship sign-off with a batched question (no auto-PR, no merge).
Orphan-dir dispositions and the precise leg-2 set are supervised judgment forks → batched
questions on this issue.
Impact
Every pip/Colab/tagged-zip user ships ~10 MB of simulated datasets that should be
runtime-generated; some are degenerate 15×15 from a pre-release smoke run. Open =
release-blocker.