Skip to content

Commit 9bdf2d8

Browse files
authored
Merge pull request #355 from PyAutoLabs/claude/untrack-fits-test-artifacts-r1eard
prompt: untrack-fits-test-artifacts lifecycle (issued → shipped → complete) + PyAutoLens follow-up
2 parents 0124c86 + a088474 commit 9bdf2d8

5 files changed

Lines changed: 179 additions & 20 deletions

File tree

draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md renamed to complete/2026/08/untrack-fits-test-artifacts.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,77 @@
1+
## untrack-fits-test-artifacts
2+
- issue: https://github.com/PyAutoLabs/PyAutoArray/issues/494
3+
- completed: 2026-08-27
4+
- library-pr: https://github.com/PyAutoLabs/PyAutoArray/pull/495 (merged as a5d718e)
5+
- repos:
6+
- PyAutoArray: feature/untrack-fits-test-artifacts
7+
8+
### What shipped
9+
10+
`test_autoarray` wrote test *output* into tracked paths, so any change to the
11+
autonerves FITS writer rewrote a committed binary and dirtied the tree for every
12+
contributor. PyAutoArray#483 demonstrated it: the PyAutoNerves#155 header-comment
13+
fix (`[""]` -> `""`) silently modified
14+
`structures/arrays/files/array/output_test/array.fits` the moment the autonerves
15+
floor moved to a release carrying it -- identical cards, values, data and byte
16+
size, but a modified tracked file that had to be committed into an unrelated PR.
17+
18+
The durable fix, applied uniformly rather than file-by-file again: the nine tests
19+
that wrote into an `output_test/` directory now take pytest's `tmp_path` and drop
20+
their `rmtree`/`makedirs` preamble; the 13 exposed artifacts are untracked and
21+
deleted; the two file-by-file `.gitignore` lines are replaced by
22+
`test_autoarray/**/output_test/` as a backstop. **After a full run no
23+
`output_test/` directory is created anywhere in the source tree** -- the defect is
24+
closed at the source, not masked by an ignore rule.
25+
26+
20 files, +48 / -106. Suite: 1177 passed, 55 skipped -- identical to the
27+
pre-change baseline -- run twice in a row from a clean checkout with
28+
`git status --porcelain` unchanged after each.
29+
30+
### Traps
31+
32+
- **The prompt's inventory described the symptom, not the state.** Of the 13
33+
tracked files only **one** was a live output (the `array.fits` #483 flipped).
34+
The other 12 were orphans: no test referenced their paths, and a repo-wide grep
35+
for their basenames returned nothing. They were residue from tests deleted long
36+
ago -- as were the two `.gitignore` lines, gravestones for one such test.
37+
Re-derive which inventory entries are still load-bearing before acting.
38+
- **A fixture that looks dead may not be.** The plan called
39+
`dataset/imaging/test_dataset.py::make_test_data_path` never-requested and
40+
proposed deleting it; three tests do request it, and a truncated `grep | head`
41+
hid them. Deleting it broke those three -- caught by the first verification run,
42+
one step earlier than the prompt's "run the suite twice" guard was aimed at.
43+
They now take `tmp_path`, which was the plan's real intent.
44+
- **The repo has three inconsistent ignore conventions**, not two: root
45+
file-by-file lines, root directory lines, and **nested `.gitignore` files
46+
containing `*`** (`test_autoarray/structures/files/`,
47+
`test_autoarray/util/files/array/`). The third is why
48+
`structures/files/output_test/data.fits` looked exposed in the plan but was in
49+
fact already covered. Not consolidated here; worth knowing before the next
50+
gitignore judgement in this repo.
51+
- **`test_uniform_1d` and `test_uniform_2d` both `rmtree`'d the same shared
52+
output directory** -- a cross-module ordering hazard nobody had filed.
53+
`tmp_path` removes it incidentally.
54+
55+
### Notes
56+
57+
- Shipped from a web session: no local worktree, no `gh`; issue, PR and merge all
58+
driven through the GitHub MCP surface. PyAutoHeart was not reachable, so the
59+
readiness gate ran through the documented fallback (per-repo suite, any failure
60+
treated as RED). PyAutoArray was attached to the session mid-run via `add_repo`.
61+
- Mind state for this task was pushed to `claude/untrack-fits-test-artifacts-r1eard`
62+
rather than `main`, per the session's branch instruction -- so
63+
`dashboard_refresh.yml` does not heal the render until that branch merges.
64+
- Sibling sweep (the prompt's scope item 4) done and deliberately **not** widened
65+
into #495. PyAutoGalaxy is clean -- no `output_test/`, zero tracked artifacts,
66+
global `data_temp/` ignore. PyAutoLens has no tracked artifacts either, so this
67+
defect was autoarray-only, but its `.gitignore` covers only the `integration/`
68+
copies of `data_temp/` while its tests write to
69+
`test_autolens/{imaging,interferometer}/data_temp/`; the teardown `rmtree` hides
70+
the leak unless a run fails. Filed as
71+
`draft/maintenance/libraries/autolens_data_temp_not_ignored.md`.
72+
73+
## Original prompt
74+
175
# Untrack the generated FITS test artifacts in autoarray
276

377
Type: maintenance
@@ -9,6 +83,7 @@ Autonomy: supervised
983
Priority: medium
1084
Status: formalised
1185
Filed: 2026-08-22 (backfilled from git)
86+
Issued: 2026-08-27
1287

1388
Filed 2026-08-23 from the PyAutoArray#482/#483 floor bump, which tripped over
1489
this. Not a bug — a git-hygiene defect that converts unrelated upstream changes

complete/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema:
66
only then grep a dated bucket. Curators: edit the band between the CURATED
77
markers; everything below GENERATED is rebuilt.
88

9-
1162 records across 7 buckets.
9+
1163 records across 7 buckets.
1010

1111
<!-- CURATED:START -->
1212
## Highlights
@@ -274,6 +274,7 @@ _(curate hard-won records here — survives regeneration.)_
274274
- [transformed-message-semantics-doc](2026/08/transformed-message-semantics-doc.md)
275275
- [undo-community-file-declutter](2026/08/undo-community-file-declutter.md) — Undid the 2026-08-19 community-file declutter (#248 Mind, #32 Memory):
276276
- [uniform-prior-bounds-numpy-path](2026/08/uniform-prior-bounds-numpy-path.md) — auto-closed by the merge's `Closes` line
277+
- [untrack-fits-test-artifacts](2026/08/untrack-fits-test-artifacts.md)
277278
- [version-skew-yank-awareness](2026/08/version-skew-yank-awareness.md)
278279
- [version-stamp-sync-guards](2026/08/version-stamp-sync-guards.md) — closed by the 2026-08-19 reconcile sweep — see traps
279280
- [vincken-2026-bib-placeholder](2026/08/vincken-2026-bib-placeholder.md)

dashboard.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
324324
</details>
325325
<details>
326326
<summary>maintenance — 21</summary>
327-
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md">Untrack the generated FITS test artifacts in autoarray</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">libraries</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
328327
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/smoke_install_stale_jax_pin.md">smoke_install.sh's stale <code>jax&lt;0.7</code> pin — CI is on the right jax…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">low</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
329328
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md">autolens_workspace_developer rectangular experiments — Gut stash + rename</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens_workspace_developer</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
330329
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/organs/session_fixes_reach_only_two_organs.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/organs/session_fixes_reach_only_two_organs.md">Two organs are missing this session's fixes, and the hook still ships…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">organs</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
@@ -342,6 +341,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
342341
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/read_through_issues.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/read_through_issues.md">autolens_workspace</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill r">too-large</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
343342
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue.md">pynufft removal: unswept downstream residue (1 hard break + stale docs/CI)</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">low-medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
344343
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md">Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">low</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
344+
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens/data_temp_write_paths_not_ignored.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens/data_temp_write_paths_not_ignored.md">PyAutoLens test <code>data_temp/</code> write paths are not gitignored</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">low</span></span></p></div>
345345
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md">dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens_profiling</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">low</span></span></p></div>
346346
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md">cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens_workspace</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">low</span></span></p></div>
347347
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md">Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">low</span></span></p></div>
@@ -433,6 +433,12 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
433433
<tr>
434434
<td class="when">2026-08-27</td>
435435
<td class="what">filed</td>
436+
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens/data_temp_write_paths_not_ignored.md">PyAutoLens test <code>data_temp/</code> write paths are not gitignored</a></td>
437+
<td class="pick"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens/data_temp_write_paths_not_ignored.md" aria-label="Copy the Claude command">📋</button></td>
438+
</tr>
439+
<tr>
440+
<td class="when">2026-08-27</td>
441+
<td class="what">filed</td>
436442
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/refactor/autolens/one_construction_path_for_plane_bound_lensing.md">One construction path for plane-bound lensing quantities</a></td>
437443
<td class="pick"><button class="copy" data-cmd="/start_dev draft/refactor/autolens/one_construction_path_for_plane_bound_lensing.md" aria-label="Copy the Claude command">📋</button></td>
438444
</tr>
@@ -466,7 +472,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
466472
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/board_without_gh_phase1_seam.md">Board phase 1: the injection seam, proven on the overnight legs</a></td>
467473
<td class="pick"><button class="copy" data-cmd="/start_dev active/board_without_gh_phase1_seam.md" aria-label="Copy the Claude command">📋</button></td>
468474
</tr>
469-
<tr>
475+
<tr hidden>
470476
<td class="when">2026-08-26</td>
471477
<td class="what">filed</td>
472478
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/bug/workspaces/gradient_pixelization_pin_residual_drift.md">jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move…</a></td>
@@ -535,12 +541,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
535541
<tr hidden>
536542
<td class="when">2026-08-22</td>
537543
<td class="what">filed</td>
538-
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md">Untrack the generated FITS test artifacts in autoarray</a></td>
539-
<td class="pick"><button class="copy" data-cmd="/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md" aria-label="Copy the Claude command">📋</button></td>
540-
</tr>
541-
<tr hidden>
542-
<td class="when">2026-08-22</td>
543-
<td class="what">filed</td>
544544
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/bug/autoarray/reconstruction_noise_map_solver_mismatch.md">The reconstruction noise map describes a different estimator than the…</a></td>
545545
<td class="pick"><button class="copy" data-cmd="/start_dev draft/bug/autoarray/reconstruction_noise_map_solver_mismatch.md" aria-label="Copy the Claude command">📋</button></td>
546546
</tr>

0 commit comments

Comments
 (0)