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 @@
Untrack the generated FITS test artifacts in autoarray
@@ -342,6 +341,7 @@data_temp/ write paths are not gitignoredjax<0.7 pin — CI is on the right jax… — ci · low · supervised · mediumdata_temp/ write paths are not gitignored — autolens · small · supervised · lowTransformedMessage 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… |
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… |
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.