Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
3 changes: 2 additions & 1 deletion complete/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

<!-- CURATED:START -->
## Highlights
Expand Down Expand Up @@ -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)
Expand Down
16 changes: 8 additions & 8 deletions dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
</details>
<details>
<summary>maintenance — 21</summary>
<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>
<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>
<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>
<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>
Expand All @@ -342,6 +341,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<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>
<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>
<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>
<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>
<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>
<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>
<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>
Expand Down Expand Up @@ -433,6 +433,12 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<tr>
<td class="when">2026-08-27</td>
<td class="what">filed</td>
<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>
<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>
</tr>
<tr>
<td class="when">2026-08-27</td>
<td class="what">filed</td>
<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>
<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>
</tr>
Expand Down Expand Up @@ -466,7 +472,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<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>
<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>
</tr>
<tr>
<tr hidden>
<td class="when">2026-08-26</td>
<td class="what">filed</td>
<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>
Expand Down Expand Up @@ -535,12 +541,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<tr hidden>
<td class="when">2026-08-22</td>
<td class="what">filed</td>
<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>
<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>
</tr>
<tr hidden>
<td class="when">2026-08-22</td>
<td class="what">filed</td>
<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>
<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>
</tr>
Expand Down
Loading
Loading