diff --git a/complete/2026/08/cli-noise-pyautofit-batch.md b/complete/2026/08/cli-noise-pyautofit-batch.md
new file mode 100644
index 00000000..31a6f640
--- /dev/null
+++ b/complete/2026/08/cli-noise-pyautofit-batch.md
@@ -0,0 +1,98 @@
+# cli-noise-pyautofit-batch
+
+- shipped: 2026-08-18
+- issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1495
+- library-pr: https://github.com/PyAutoLabs/PyAutoFit/pull/1496 (`pending-release`) — MERGED 2026-08-18 as `7d4d931`, all 3 checks green (unittest 3.12 + 3.13, docs-build)
+- repos:
+ - PyAutoFit: `claude/pyautofit-cli-noise-fixes-vqs7mg` → `7d1fe19`
+- session: Claude Code web (remote); no local worktree
+
+## Summary
+
+The five mechanical fixes from the 2026-08-06 `-W all` CLI-noise audit, in one
+PyAutoFit PR (6 files, +42/−5). Each warning was reproduced on `main` first and
+shown gone after the fix; full suite on py3.13 + scipy 1.17.1: 1884 passed,
+3 skipped.
+
+1. `configure_handler` (`abstract_search.py`) now calls `handler.close()`
+ beside `removeHandler` in its `finally` — ends the 44-per-run
+ `ResourceWarning` and file-descriptor leak from `search.log`.
+2. `Fit.arrays` carries `overlaps="fit"`, `Fit.hdus` carries
+ `overlaps="arrays,fit"` (`database/model/fit.py`) — the exact strings
+ SQLAlchemy 2.0.52's two `SAWarning`s suggest; `configure_mappers()` is now
+ silent.
+3. Nautilus `samples_info_from` reads `.log_z` instead of the deprecated
+ `evidence()` (nautilus 1.0.5's method is a warn-then-`return self.log_z`
+ wrapper — exactly equivalent).
+4. `LBFGS.options` drops the `disp`/`iprint` keys scipy 1.15 deprecated for
+ L-BFGS-B (removal slated 1.18); constructor still accepts both, `disp`
+ stays live for plain `BFGS`; `test_lbfgs.py` pins the contract.
+5. `test_fork_context.py` filters both fork warnings module-locally —
+ CPython 3.12+'s DeprecationWarning *and* JAX's equivalent RuntimeWarning.
+
+## Traps / findings
+
+- **JAX adds a second fork warning.** Once JAX is imported it registers its own
+ `os.fork()` RuntimeWarning hook, so a filter for CPython's DeprecationWarning
+ alone leaves the module noisy in JAX-enabled runs. Both are needed; the
+ regexes differ (`This process` vs `os\.fork\(\) was called`).
+- **SQLAlchemy names the fix for you.** The `SAWarning` text contains the exact
+ `overlaps="..."` string per relationship — reproduce with
+ `sa.orm.configure_mappers()` under `warnings.catch_warnings(record=True)` and
+ copy it verbatim rather than deriving the overlap set by hand.
+- **Prompt line numbers drift.** The prompt's `bfgs/search.py:194` (filed
+ 2026-08-06) no longer matched; the sites were re-located by symbol
+ (`options` property / `samples_info_from`), not by line.
+- Out of scope, still open on `main`: fork warnings from the dynesty pool tests
+ elsewhere in `test_autofit/non_linear/search/`, and the deliberately
+ degenerate-input numerical warnings (`interpolator/covariance.py`,
+ `messages/normal.py`, `fitness.py`) the prompt marked lowest priority.
+
+## Workflow notes
+
+- Remote web session: `pyauto-heart` unavailable, so the ship gate ran as the
+ WORKFLOW.md fallback (full repo suite as the verdict); vitals faculty not
+ consultable — noted here rather than silently skipped.
+- Deliberate conflict override (file-disjoint) with the two in-flight PyAutoFit
+ claims `stored-sample-reconstruction-guard` and `version-stamp-sync-guards`,
+ documented in the `active.md` entry at registration.
+- No workspace impact: API changes "None — internal"; no workspace migration
+ needed (option iii).
+
+## Original prompt
+
+# PyAutoFit CLI-noise batch: unclosed search.log handler + four small warning fixes
+
+Type: maintenance
+Target: PyAutoFit
+Repos:
+- PyAutoFit
+Difficulty: small
+Autonomy: safe
+Priority: normal
+Status: formalised
+
+Filed 2026-08-06 from a full `/cli_noise_clean` audit (full PyAutoFit suite,
+1667 tests, `-W all`). Five mechanical fixes, all in PyAutoFit:
+
+1. **Unclosed `search.log` FileHandler (44 warnings/run)** —
+ `autofit/non_linear/search/abstract_search.py:123-131` (`configure_handler`)
+ removes the handler in `finally` but never calls `handler.close()`. Add
+ `handler.close()` beside `removeHandler` at line 131.
+2. **SQLAlchemy `SAWarning` relationship overlap** — `Fit.arrays`/`Fit.hdus`
+ vs `HDU.fit` ("will copy column fit.id ... conflicts"). Add the
+ `overlaps="..."` parameters SQLAlchemy suggests, in the DB model
+ definitions (fires from `configure_mappers()`, not the test).
+3. **Nautilus deprecation** — `non_linear/search/nest/nautilus/search.py:535`
+ uses `search_internal.evidence()`; swap to the `.log_z` property.
+4. **scipy L-BFGS-B deprecation** — `non_linear/search/mle/bfgs/search.py:194`
+ passes deprecated `disp`/`iprint` options; drop them per scipy's migration
+ note (or gate on scipy version).
+5. **fork() DeprecationWarning in `test_fork_context.py`** — pytest's thread
+ pool + `os.fork()`; add a module-local `filterwarnings` mark or use the
+ `spawn` context in that test where feasible.
+
+Edge-case numerical warnings from tests that deliberately exercise degenerate
+inputs (`LinAlgWarning`/`RuntimeWarning` in `interpolator/covariance.py`,
+`messages/normal.py`, `fitness.py`) are lowest priority — silence locally in
+the triggering tests with `warnings.catch_warnings()`, never globally.
diff --git a/complete/index.md b/complete/index.md
index a5710403..a202c88e 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.
-1021 records across 7 buckets.
+1022 records across 7 buckets.
## Highlights
@@ -34,6 +34,7 @@ _(curate hard-won records here — survives regeneration.)_
- [border-relocator-degenerate-pca](2026/08/border-relocator-degenerate-pca.md) — Stabilized near-isotropic border PCA axes with a deterministic axis-aligned branch at a scale-aware eigenvalue…
- [circular-ell-comps-image-gradient](2026/08/circular-ell-comps-image-gradient.md) — Replaced the Sersic image path's Cartesian-to-polar ellipticity conversion with an algebraically equivalent Ca…
- [cli-noise-autonerves-batch](2026/08/cli-noise-autonerves-batch.md)
+- [cli-noise-pyautofit-batch](2026/08/cli-noise-pyautofit-batch.md)
- [clipper-usage-in-search-summary](2026/08/clipper-usage-in-search-summary.md) — `search.summary` now reports prior-support clipping. `n_clipped_lane_steps`
- [clipper-validation-campaign](2026/08/clipper-validation-campaign.md)
- [compile-axis-campaign-coverage](2026/08/compile-axis-campaign-coverage.md)
diff --git a/dashboard.md b/dashboard.md
index 78ce8eed..00e22817 100644
--- a/dashboard.md
+++ b/dashboard.md
@@ -11,7 +11,7 @@ Tasks only — the organism's health lives with the Heart (`/health`), not here.
| [In flight](#in-flight) (`active/`) | 3 |
| [Parked](#parked) (`parked.md`) | 1 |
| [Planned](#planned) (`planned.md`) | 7 |
-| [Backlog](#backlog) (`draft/`) | 129 |
+| [Backlog](#backlog) (`draft/`) | 128 |
Live on GitHub: [open issues](https://github.com/search?q=org%3APyAutoLabs+is%3Aissue+is%3Aopen&type=issues) · [open pull requests](https://github.com/search?q=org%3APyAutoLabs+is%3Apr+is%3Aopen&type=prs)
@@ -34,7 +34,6 @@ Live on GitHub: [open issues](https://github.com/search?q=org%3APyAutoLabs+is%3A
**Quick wins** (small enough, and safe enough to run unattended)
-- [PyAutoFit CLI-noise batch: unclosed search.log handler + four small warning](draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md) — pyautofit · small · safe · normal
- [Tenant firewall: release_run.py carries an unlisted 'PyAutoLabs' instance fact](draft/bug/pyautoheart/tenant_firewall_release_run_instance_fact.md) — pyautoheart · small · safe · normal
- [add-vincken-2026-wiki-and-cite-in-euclid](draft/docs/workspaces/add_vincken_2026_wiki_and_cite_in_euclid.md) — workspaces · small · safe · normal
- [`add_notebook_quotes` mistakes a code string literal's closing delimiter for a](draft/bug/hands/notebook_quotes_string_literal_closing_delimiter.md) — hands · small · safe · low
@@ -80,7 +79,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
## Backlog
-**129** filed prompts, not started. Each section is sorted most-pickable first (priority, then size).
+**128** filed prompts, not started. Each section is sorted most-pickable first (priority, then size).
bug — 35
@@ -156,31 +155,6 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-
-maintenance — 19
-
-- [autolens_workspace_developer rectangular experiments — Gut stash + rename](draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md) — autolens_workspace_developer · small · supervised · normal
-- [PyAutoFit CLI-noise batch: unclosed search.log handler + four small warning](draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md) — pyautofit · small · safe · normal
-- [Mirror drifted library config keys into the workspace configs](draft/maintenance/workspaces/config_key_mirror_drift.md) — workspaces · small · supervised · normal
-- [Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges](draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md) — workspaces · small · supervised · normal
-- [autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)](draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md) — autolens_workspace_developer · medium · supervised · normal
-- [run_smoke.py: three runner variants across 10 repos, no sync mechanism](draft/maintenance/ci/run_smoke_copy_drift.md) — ci · medium · supervised · normal
-- [Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead](draft/maintenance/libraries/dep_cap_refresh_2026_08.md) — libraries · medium · supervised · normal
-- [PyAutoMemory canonical-key TODO sweep](draft/maintenance/pyautomemory/canonical_key_todo_sweep.md) — pyautomemory · medium · supervised · normal
-- [Single-source the "Never rewrite history" policy as a generated AGENTS.md](draft/maintenance/pyautomind/history_policy_generated_block.md) — pyautomind · medium · supervised · normal
-- [Capped smoke datasets were committed as if they were real](draft/maintenance/workspaces/committed_capped_smoke_datasets.md) — workspaces · medium · supervised · normal
-- [autolens_profiling is now a mature project, with a good separation](draft/maintenance/autolens_profiling/polish.md) — autolens_profiling · large · supervised · normal
-- [Auto-request GitHub Copilot code review on every PR, org-wide](draft/maintenance/ci/copilot_auto_review.md) — ci · large · supervised · normal
-- [autolens_workspace](draft/maintenance/workspaces/read_through_issues.md) — workspaces · too-large · supervised · normal
-- [dataset/imaging/jwst_lw is untracked because the gitignore was never extended for](draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md) — autolens_profiling · small · supervised · low
-- [cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of](draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md) — autolens_workspace · small · supervised · low
-- [LaTeX in non-raw docstrings emits SyntaxWarning: invalid escape sequence](draft/maintenance/autolens_workspace/latex_docstrings_invalid_escape_warnings.md) — autolens_workspace · small · supervised · low
-- [Raw-string the LaTeX docstrings emitting SyntaxWarnings (HowToFit + HowToLens)](draft/maintenance/workspaces/latex_raw_string_docstrings.md) — workspaces · small · safe · low
-- [Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces](draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md) — workspaces · small · supervised · low
-- [Refresh the stale `.script_sizes.json` snapshot in @autolens_workspace](draft/maintenance/workspaces/script_sizes_snapshot_drift.md) — workspaces · small · safe · low
-
-
-
research — 19
@@ -206,6 +180,30 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
+maintenance — 18
+
+- [autolens_workspace_developer rectangular experiments — Gut stash + rename](draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md) — autolens_workspace_developer · small · supervised · normal
+- [Mirror drifted library config keys into the workspace configs](draft/maintenance/workspaces/config_key_mirror_drift.md) — workspaces · small · supervised · normal
+- [Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges](draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md) — workspaces · small · supervised · normal
+- [autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)](draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md) — autolens_workspace_developer · medium · supervised · normal
+- [run_smoke.py: three runner variants across 10 repos, no sync mechanism](draft/maintenance/ci/run_smoke_copy_drift.md) — ci · medium · supervised · normal
+- [Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead](draft/maintenance/libraries/dep_cap_refresh_2026_08.md) — libraries · medium · supervised · normal
+- [PyAutoMemory canonical-key TODO sweep](draft/maintenance/pyautomemory/canonical_key_todo_sweep.md) — pyautomemory · medium · supervised · normal
+- [Single-source the "Never rewrite history" policy as a generated AGENTS.md](draft/maintenance/pyautomind/history_policy_generated_block.md) — pyautomind · medium · supervised · normal
+- [Capped smoke datasets were committed as if they were real](draft/maintenance/workspaces/committed_capped_smoke_datasets.md) — workspaces · medium · supervised · normal
+- [autolens_profiling is now a mature project, with a good separation](draft/maintenance/autolens_profiling/polish.md) — autolens_profiling · large · supervised · normal
+- [Auto-request GitHub Copilot code review on every PR, org-wide](draft/maintenance/ci/copilot_auto_review.md) — ci · large · supervised · normal
+- [autolens_workspace](draft/maintenance/workspaces/read_through_issues.md) — workspaces · too-large · supervised · normal
+- [dataset/imaging/jwst_lw is untracked because the gitignore was never extended for](draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md) — autolens_profiling · small · supervised · low
+- [cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of](draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md) — autolens_workspace · small · supervised · low
+- [LaTeX in non-raw docstrings emits SyntaxWarning: invalid escape sequence](draft/maintenance/autolens_workspace/latex_docstrings_invalid_escape_warnings.md) — autolens_workspace · small · supervised · low
+- [Raw-string the LaTeX docstrings emitting SyntaxWarnings (HowToFit + HowToLens)](draft/maintenance/workspaces/latex_raw_string_docstrings.md) — workspaces · small · safe · low
+- [Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces](draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md) — workspaces · small · supervised · low
+- [Refresh the stale `.script_sizes.json` snapshot in @autolens_workspace](draft/maintenance/workspaces/script_sizes_snapshot_drift.md) — workspaces · small · safe · low
+
+
+
docs — 17
diff --git a/draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md b/draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md
deleted file mode 100644
index df0c87f1..00000000
--- a/draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# PyAutoFit CLI-noise batch: unclosed search.log handler + four small warning fixes
-
-Type: maintenance
-Target: PyAutoFit
-Repos:
-- PyAutoFit
-Difficulty: small
-Autonomy: safe
-Priority: normal
-Status: formalised
-
-Filed 2026-08-06 from a full `/cli_noise_clean` audit (full PyAutoFit suite,
-1667 tests, `-W all`). Five mechanical fixes, all in PyAutoFit:
-
-1. **Unclosed `search.log` FileHandler (44 warnings/run)** —
- `autofit/non_linear/search/abstract_search.py:123-131` (`configure_handler`)
- removes the handler in `finally` but never calls `handler.close()`. Add
- `handler.close()` beside `removeHandler` at line 131.
-2. **SQLAlchemy `SAWarning` relationship overlap** — `Fit.arrays`/`Fit.hdus`
- vs `HDU.fit` ("will copy column fit.id ... conflicts"). Add the
- `overlaps="..."` parameters SQLAlchemy suggests, in the DB model
- definitions (fires from `configure_mappers()`, not the test).
-3. **Nautilus deprecation** — `non_linear/search/nest/nautilus/search.py:535`
- uses `search_internal.evidence()`; swap to the `.log_z` property.
-4. **scipy L-BFGS-B deprecation** — `non_linear/search/mle/bfgs/search.py:194`
- passes deprecated `disp`/`iprint` options; drop them per scipy's migration
- note (or gate on scipy version).
-5. **fork() DeprecationWarning in `test_fork_context.py`** — pytest's thread
- pool + `os.fork()`; add a module-local `filterwarnings` mark or use the
- `spawn` context in that test where feasible.
-
-Edge-case numerical warnings from tests that deliberately exercise degenerate
-inputs (`LinAlgWarning`/`RuntimeWarning` in `interpolator/covariance.py`,
-`messages/normal.py`, `fitness.py`) are lowest priority — silence locally in
-the triggering tests with `warnings.catch_warnings()`, never globally.