diff --git a/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md b/complete/2026/08/untrack-fits-test-artifacts.md similarity index 50% rename from draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md rename to complete/2026/08/untrack-fits-test-artifacts.md index f4eb925cc..ec4493c4a 100644 --- a/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md +++ b/complete/2026/08/untrack-fits-test-artifacts.md @@ -1,3 +1,77 @@ +## untrack-fits-test-artifacts +- issue: https://github.com/PyAutoLabs/PyAutoArray/issues/494 +- completed: 2026-08-27 +- library-pr: https://github.com/PyAutoLabs/PyAutoArray/pull/495 (merged as a5d718e) +- repos: + - PyAutoArray: feature/untrack-fits-test-artifacts + +### What shipped + +`test_autoarray` wrote test *output* into tracked paths, so any change to the +autonerves FITS writer rewrote a committed binary and dirtied the tree for every +contributor. PyAutoArray#483 demonstrated it: the PyAutoNerves#155 header-comment +fix (`[""]` -> `""`) silently modified +`structures/arrays/files/array/output_test/array.fits` the moment the autonerves +floor moved to a release carrying it -- identical cards, values, data and byte +size, but a modified tracked file that had to be committed into an unrelated PR. + +The durable fix, applied uniformly rather than file-by-file again: the nine tests +that wrote into an `output_test/` directory now take pytest's `tmp_path` and drop +their `rmtree`/`makedirs` preamble; the 13 exposed artifacts are untracked and +deleted; the two file-by-file `.gitignore` lines are replaced by +`test_autoarray/**/output_test/` as a backstop. **After a full run no +`output_test/` directory is created anywhere in the source tree** -- the defect is +closed at the source, not masked by an ignore rule. + +20 files, +48 / -106. Suite: 1177 passed, 55 skipped -- identical to the +pre-change baseline -- run twice in a row from a clean checkout with +`git status --porcelain` unchanged after each. + +### Traps + +- **The prompt's inventory described the symptom, not the state.** Of the 13 + tracked files only **one** was a live output (the `array.fits` #483 flipped). + The other 12 were orphans: no test referenced their paths, and a repo-wide grep + for their basenames returned nothing. They were residue from tests deleted long + ago -- as were the two `.gitignore` lines, gravestones for one such test. + Re-derive which inventory entries are still load-bearing before acting. +- **A fixture that looks dead may not be.** The plan called + `dataset/imaging/test_dataset.py::make_test_data_path` never-requested and + proposed deleting it; three tests do request it, and a truncated `grep | head` + hid them. Deleting it broke those three -- caught by the first verification run, + one step earlier than the prompt's "run the suite twice" guard was aimed at. + They now take `tmp_path`, which was the plan's real intent. +- **The repo has three inconsistent ignore conventions**, not two: root + file-by-file lines, root directory lines, and **nested `.gitignore` files + containing `*`** (`test_autoarray/structures/files/`, + `test_autoarray/util/files/array/`). The third is why + `structures/files/output_test/data.fits` looked exposed in the plan but was in + fact already covered. Not consolidated here; worth knowing before the next + gitignore judgement in this repo. +- **`test_uniform_1d` and `test_uniform_2d` both `rmtree`'d the same shared + output directory** -- a cross-module ordering hazard nobody had filed. + `tmp_path` removes it incidentally. + +### Notes + +- Shipped from a web session: no local worktree, no `gh`; issue, PR and merge all + driven through the GitHub MCP surface. PyAutoHeart was not reachable, so the + readiness gate ran through the documented fallback (per-repo suite, any failure + treated as RED). PyAutoArray was attached to the session mid-run via `add_repo`. +- Mind state for this task was pushed to `claude/untrack-fits-test-artifacts-r1eard` + rather than `main`, per the session's branch instruction -- so + `dashboard_refresh.yml` does not heal the render until that branch merges. +- Sibling sweep (the prompt's scope item 4) done and deliberately **not** widened + into #495. PyAutoGalaxy is clean -- no `output_test/`, zero tracked artifacts, + global `data_temp/` ignore. PyAutoLens has no tracked artifacts either, so this + defect was autoarray-only, but its `.gitignore` covers only the `integration/` + copies of `data_temp/` while its tests write to + `test_autolens/{imaging,interferometer}/data_temp/`; the teardown `rmtree` hides + the leak unless a run fails. Filed as + `draft/maintenance/libraries/autolens_data_temp_not_ignored.md`. + +## Original prompt + # Untrack the generated FITS test artifacts in autoarray Type: maintenance @@ -9,6 +83,7 @@ Autonomy: supervised Priority: medium Status: formalised Filed: 2026-08-22 (backfilled from git) +Issued: 2026-08-27 Filed 2026-08-23 from the PyAutoArray#482/#483 floor bump, which tripped over this. Not a bug — a git-hygiene defect that converts unrelated upstream changes diff --git a/complete/index.md b/complete/index.md index 37cf4819a..cf173ac2b 100644 --- a/complete/index.md +++ b/complete/index.md @@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema: only then grep a dated bucket. Curators: edit the band between the CURATED markers; everything below GENERATED is rebuilt. -1162 records across 7 buckets. +1163 records across 7 buckets. ## Highlights @@ -274,6 +274,7 @@ _(curate hard-won records here — survives regeneration.)_ - [transformed-message-semantics-doc](2026/08/transformed-message-semantics-doc.md) - [undo-community-file-declutter](2026/08/undo-community-file-declutter.md) — Undid the 2026-08-19 community-file declutter (#248 Mind, #32 Memory): - [uniform-prior-bounds-numpy-path](2026/08/uniform-prior-bounds-numpy-path.md) — auto-closed by the merge's `Closes` line +- [untrack-fits-test-artifacts](2026/08/untrack-fits-test-artifacts.md) - [version-skew-yank-awareness](2026/08/version-skew-yank-awareness.md) - [version-stamp-sync-guards](2026/08/version-stamp-sync-guards.md) — closed by the 2026-08-19 reconcile sweep — see traps - [vincken-2026-bib-placeholder](2026/08/vincken-2026-bib-placeholder.md) diff --git a/dashboard.html b/dashboard.html index a89f694d6..7907ba5ab 100644 --- a/dashboard.html +++ b/dashboard.html @@ -324,7 +324,6 @@

Backlog

Untrack the generated FITS test artifacts in autoarray🧹 maintenancelibrariessmallsupervisedmedium

smoke_install.sh's stale jax<0.7 pin — CI is on the right jax…🧹 maintenancecilowsupervisedmedium

autolens_workspace_developer rectangular experiments — Gut stash + rename🧹 maintenanceautolens_workspace_developersmallsupervisednormal

Two organs are missing this session's fixes, and the hook still ships…🧹 maintenanceorganssmallsupervisednormal

@@ -342,6 +341,7 @@

Backlog

autolens_workspace🧹 maintenanceworkspacestoo-largesupervisednormal

pynufft removal: unswept downstream residue (1 hard break + stale docs/CI)🧹 maintenanceworkspaceslow-mediumsupervisednormal

Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs🧹 maintenanceworkspaceslowsupervisednormal

+

PyAutoLens test data_temp/ write paths are not gitignored🧹 maintenanceautolenssmallsupervisedlow

dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it🧹 maintenanceautolens_profilingsmallsupervisedlow

cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's…🧹 maintenanceautolens_workspacesmallsupervisedlow

Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces🧹 maintenanceworkspacessmallsupervisedlow

@@ -433,6 +433,12 @@

Backlog 2026-08-27 filed +PyAutoLens test data_temp/ write paths are not gitignored + + + +2026-08-27 +filed One construction path for plane-bound lensing quantities @@ -466,7 +472,7 @@

Backlog Board phase 1: the injection seam, proven on the overnight legs - + 2026-08-26 filed jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… @@ -535,12 +541,6 @@

Backlog 2026-08-22 filed -Untrack the generated FITS test artifacts in autoarray - - - -2026-08-22 -filed The reconstruction noise map describes a different estimator than the… diff --git a/dashboard.md b/dashboard.md index b3d11edd5..d32f4dc27 100644 --- a/dashboard.md +++ b/dashboard.md @@ -630,14 +630,6 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
maintenance — 21 -
📋 Untrack the generated FITS test artifacts in autoarray — libraries · small · supervised · medium - -``` -/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md -``` - -
-
📋 smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… — ci · low · supervised · medium ``` @@ -774,6 +766,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 PyAutoLens test data_temp/ write paths are not gitignored — autolens · small · supervised · low + +``` +/start_dev draft/maintenance/autolens/data_temp_write_paths_not_ignored.md +``` + +
+
📋 dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it — autolens_profiling · small · supervised · low ``` @@ -1199,18 +1199,19 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-27 | issued | Why does XLA CPU's Eigen thread pool wedge on the multi_dataset vmap… | | 2026-08-27 | filed | Two organs are missing this session's fixes, and the hook still ships… | | 2026-08-27 | filed | Should TransformedMessage carry its own support, rather than the… | +| 2026-08-27 | filed | PyAutoLens test data_temp/ write paths are not gitignored | | 2026-08-27 | filed | One construction path for plane-bound lensing quantities | | 2026-08-27 | filed | Multi-plane time delays | | 2026-08-27 | filed | LensCalc NumPy Hessian step is too coarse for multi-plane tracers | | 2026-08-27 | filed | Cross-validate multi-plane ray tracing | | 2026-08-27 | filed | Board phase 2: the remaining four legs onto the seam | | 2026-08-27 | issued | Board phase 1: the injection seam, proven on the overnight legs | -| 2026-08-26 | filed | jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| +| 2026-08-26 | filed | jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… | | 2026-08-26 | filed | The Brain board should work in a session that has no gh | | 2026-08-24 | filed | wiki-currency's --check-version gate rots on every library main merge | | 2026-08-24 | filed | interferometer/jax_grad/gradient.py: eager and jitted likelihoods… | @@ -1220,13 +1221,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-23 | filed | pynufft removal: unswept downstream residue (1 hard break + stale… | | 2026-08-23 | filed | Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI… | | 2026-08-23 | filed | Brain board follow-ups: what real mornings surface | -| 2026-08-22 | filed | smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| -| 2026-08-22 | filed | Untrack the generated FITS test artifacts in autoarray | +| 2026-08-22 | filed | smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… | | 2026-08-22 | filed | The reconstruction noise map describes a different estimator than the… | | 2026-08-22 | filed | Point-source JSON datasets record no resolution regime | | 2026-08-22 | filed | Is Intel macOS a supported platform, and what is the numpy-only… | diff --git a/draft/maintenance/autolens/data_temp_write_paths_not_ignored.md b/draft/maintenance/autolens/data_temp_write_paths_not_ignored.md new file mode 100644 index 000000000..a3d947de2 --- /dev/null +++ b/draft/maintenance/autolens/data_temp_write_paths_not_ignored.md @@ -0,0 +1,83 @@ +# PyAutoLens test `data_temp/` write paths are not gitignored + +Type: maintenance +Target: autolens +Repos: +- @PyAutoLens +Difficulty: small +Autonomy: supervised +Priority: low +Status: formalised +Filed: 2026-08-27 + +Filed 2026-08-27 from the sibling-repo sweep required by +shipped task `untrack-fits-test-artifacts` (PyAutoArray#494, record +`complete/2026/08/untrack-fits-test-artifacts.md`), whose +scope note said: "Leave the sibling repos alone. PyAutoGalaxy/PyAutoLens likely +share the pattern; check, and file separately rather than widening this." + +Scope is **PyAutoLens only**. PyAutoArray and PyAutoGalaxy appear below as the +comparison that isolates the defect, not as repos this task touches. + +## What the sweep found + +The autoarray defect itself — generated FITS committed into **tracked** paths — +does **not** exist in either sibling. Both track zero test-output artifacts: + +| Repo | Tracked output artifacts | `data_temp/` ignored? | +|------|--------------------------|------------------------| +| PyAutoGalaxy | 0 | yes — `.gitignore:1` has a global `data_temp/` | +| PyAutoLens | 0 | **partially** — see below | + +Neither repo uses the `output_test/` directory name at all, so there is nothing +to untrack. + +## The smaller defect that is real + +PyAutoLens' `.gitignore` covers only the *integration* copies: + +``` +test/integration/data_temp/ +test_autolens/integration/data_temp/ +``` + +but the tests that actually write FITS put them elsewhere — +`test_autolens/imaging/data_temp/simulate_and_fit/` and +`test_autolens/interferometer/data_temp/simulate_and_fit/` +(`test_simulate_and_fit_imaging.py:35,844`, +`test_simulate_and_fit_interferometer.py:37`). Confirmed against a clean +checkout at `c1bba66`: + +``` +$ git check-ignore -v test_autolens/imaging/data_temp/simulate_and_fit/image.fits +NOT IGNORED +``` + +The tests `shutil.rmtree` their `data_temp/` at the end, so on the happy path +this is invisible. On a **failing or interrupted** run the teardown does not +reach, and the artifacts linger as untracked files in a contributor's tree — +exactly when a developer is least well placed to tell noise from signal. + +PyAutoGalaxy is unaffected because its global `data_temp/` line catches every +location. + +## Suggested scope + +Pick one, matching whichever the repo prefers: + +1. **`tmp_path`** (consistent with the autoarray fix, PyAutoArray#494) — convert + the three `simulate_and_fit` writers to pytest's `tmp_path` so no test writes + into the source tree. Note these tests build real datasets and re-read them, + so verify the round-trip still passes. +2. **One `.gitignore` line** — replace the two integration-only lines with a + global `data_temp/`, as PyAutoGalaxy already has. A one-line fix that leaves + the tests writing into the tree. + +Either way, verify the suite passes twice in a row with `git status` clean after +each, and check no `data_temp/` survives a **failed** run. + +## Note + +Deliberately kept separate from PyAutoArray#494 rather than widening it — the +two repos share a family resemblance, not the same defect. #494 removed 13 +tracked binaries; this one removes an untracked-file leak on the failure path.