diff --git a/complete/2026/08/aplt-output-drift-remaining-repos.md b/complete/2026/08/aplt-output-drift-remaining-repos.md new file mode 100644 index 00000000..1c9e2ddf --- /dev/null +++ b/complete/2026/08/aplt-output-drift-remaining-repos.md @@ -0,0 +1,184 @@ +Repaired the `aplt.Output` stale-API drift in the last two repos the +2026-08-04 `plot-array-stale-kwargs` task deliberately stopped short of — and +found that the drift's real shape was not what the prompt described. + +## Outcome + +| Repo | PR | Merged | +|---|---|---| +| PyAutoGalaxy | [#586](https://github.com/PyAutoLabs/PyAutoGalaxy/pull/586) | `d68a8f6` | +| euclid_strong_lens_modeling_pipeline | [#39](https://github.com/PyAutoLabs/euclid_strong_lens_modeling_pipeline/pull/39) | `62b2fd4` | + +Classification changed during planning from workspace-only to **library + +workspace**, which is why a PyAutoGalaxy PR exists at all. + +## The prompt was wrong in three ways, each found by verifying rather than trusting + +**1. `autocti_workspace_test` is out of scope — the hedge resolved, then the +scope collapsed.** The prompt flagged 27 files as "UNVERIFIED — check first", +suspecting PyAutoCTI might still export `Output`. It does not: +`autocti/plot/__init__.py` is 49 lines of flat functions. So those files are +genuinely broken — but an alias-aware scan found **31**, not 27, and: + +- **18 are under `legacy/`**, which `autocti_workspace_test/AGENTS.md:52` + forbids editing ("preserved Euclid VIS history"). Its README says outright + that they target the removed Plotter object stack and are not runnable. +- **13 are top-level `imaging_ci/`** — undocumented in AGENTS.md's structure + block, absent from `smoke_tests.txt`, substantive history **2023-02**, the + same era as `legacy/` (created 2026-07-17 by "CTI resurrection Phase 5"). + Its only 2026 commits are repo-wide mechanical sweeps that also hit `legacy/`. + +Following the prompt literally would have modernised dead code *and* violated +the repo's own hard rule. Filed as +`draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md` for a +human decision against the CTI resurrection epic (PyAutoCTI#82). + +**2. The drift was never really about `Output`.** The whole plotter-object stack +is gone from every public namespace — `MatPlot2D`, `MatPlot1D`, `Cmap`, +`Array2DPlotter`, `Visuals2D`, `MassProfileCentresScatter`, the `*Plotter` +family. `Output` was 6 of 13 missing symbols in autocti, 2 of 6 in euclid. + +**3. Two library defects the prompt never mentioned.** `Cmap` is exported by +**no** public plot namespace, yet: + +- `Scribbler.__init__` required a `Cmap`-shaped object for `cmap=`, so callers + had no public way to colour the GUI. +- `Clicker.start()` built `aplt.Cmap(...)` on `autoarray.plot` + *unconditionally* — reproduced on the installed stack as + `AttributeError: module 'autoarray.plot' has no attribute 'Cmap'`. That GUI + was dead for every caller. + +Fixed library-side because the only workspace alternative was a private-path +import — the "autoimmune reaction" the Bug Agent's fix-locus rule warns against. + +## The plan's worst assumption, caught before it shipped + +The approved plan said euclid's explicit `mask=` could simply drop out, since +`plot_array` auto-derives the outline. It cannot. `data` there comes from +`Array2D.from_fits` and is **unmasked**, so `auto_mask_edge(data)` returns +`None` — verified directly. Worse, the mask being drawn is a *separately +constructed* circular one whose radius is grown at line 160 to enclose the +clicked galaxies, so it is the entire subject of the figure. + +A literal reading would have silently deleted the mask radius from the PNG that +exists to show it, and nothing would have failed. Fixing it needed a second +library change: autogalaxy's `plot_array` wrapper delegates to autoarray's but +was dropping its `mask=` parameter. + +## Verification + +- PyAutoGalaxy CI green on **every leg**: `unittest (3.12)`, `unittest (3.13)`, + `unittest-nojax`, Docs. 1129 tests, 16 new across two files (`test_autogalaxy/gui/` + did not previously exist). +- Alias-aware AST re-scan — aliases resolved from each file's own imports, the + correction carried forward from HowToGalaxy#56 — **0 residual stale symbols** + in both repos. +- All 10 changed `aplt.*`/`al.*` calls bound against real signatures: 10 ok, 0 failures. +- Mask passthrough verified by **rendering**: 2436 pixels differ vs. the same + call without `mask=`, confirmed by pixel diff rather than file size. +- `compileall` clean; CRLF preserved uniformly (see below). + +## Not verified, stated plainly + +- **The two euclid GUIs were never run end-to-end.** They need TkAgg and FITS + data absent from the repo, and euclid has **no CI workflows at all**. The + merge was made with that stated and acknowledged. +- **`Scribbler.__init__` has no direct test** — `matplotlib.use("TkAgg")` and + `wm_geometry` cannot run headless. The extracted `norm_from` helper carries + the logic and is fully tested; the constructor is covered only by binding. + +## Behaviour change accepted + +Extra-galaxy centre markers were cyan via `MassProfileCentresScatter(c="cy")` +and are now the `plot_array` default. `autoarray/plot/array.py:258-262` +hardcodes the overlay colour cycle, and `line_colors` (265-273) applies to +`lines`, not `positions` — an early misreading of mine, corrected before it +reached the code. Restoring the colour needs a PyAutoArray change; markers +remain visible and distinguishable from the mask outline by size and z-order. + +## Process note + +An intermediate "suite green" reading was wrong twice and caught both times: +pytest had exited 4 on an unrecognised `--timeout` flag without running, and a +later run was corrupted when a `git stash` reverted the tree mid-run. Reported +results come from clean runs on the final tree. Separately, a stop-hook flagged +the PyAutoGalaxy branch as unpushed: the commit *was* on GitHub, but the +`--depth 1` clone's single-branch refspec meant no remote-tracking ref existed, +so `@{u}` could not resolve — repaired by widening the refspec. + +## Follow-ups filed, not fixed + +- `draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md` — the + 13 heritage files the `legacy/` sweep missed. +- `autoarray` duplicates this normalisation inline in `plot/array.py` and + `plot/inversion.py`; a shared helper there is the real fix. This task added + one copy in autogalaxy serving both GUIs rather than a third inline copy. +- euclid's three `tools/` files are **100% CRLF on `main`**, contradicting its + own AGENTS.md ("CRLF will break shell scripts on the HPC"). Preserved rather + than converted, to avoid whole-file diffs that would not fix the repo-wide + problem. + +## Original prompt + +# `aplt.Output` stale-API drift in the remaining workspace repos + +Type: bug +Target: workspaces +Repos: +- autocti_workspace_test +- euclid_strong_lens_modeling_pipeline +Difficulty: small +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-04 (backfilled from git) +Issued: 2026-08-24 + +Split out of `plot-array-stale-kwargs` (HowToGalaxy#56, 2026-08-04), which +repaired this same drift in `autolens_workspace_developer` but deliberately +stopped at that repo's boundary. + +## The drift + +`aplt.Output` no longer exists on the **autolens / autogalaxy** plot namespace — +verified: `hasattr(autolens.plot, "Output") == False`. It survives only as +`autoarray.plot.Output`. The removal was deliberate and is already documented in +`autolens_assistant/AGENTS.md:218` ("the `aplt.MatPlot2D` / `aplt.Output` objects +have been removed — do not use them"). + +Callers must move to the flat convention. Note the accepted kwargs differ per +callee — check each signature rather than blanket-renaming: + +```python +# plot_array takes all three +aplt.plot_array(array=..., output_path=P, output_filename=F, output_format="png") +# subplot_* take only path + format (no output_filename) +aplt.subplot_tracer(tracer=..., grid=..., output_path=P, output_format="png") +``` + +## Sites + +| Repo | Files | Status | +|------|-------|--------| +| `autocti_workspace_test` | 27 | **UNVERIFIED — check first** | +| `euclid_strong_lens_modeling_pipeline/tools/` | 2 (`psf_size.py`, `extra_galaxies_centres_gui.py`) | confirmed broken | + +**Do not assume the autocti files are broken.** Those import +`import autocti.plot as aplt` — a *different* library's plot namespace. +`autocti` was not installed in the 2026-08-04 session so it could not be +checked. PyAutoCTI may still export `Output`, in which case those 27 files are +correct as written and must be left alone. Verify with +`hasattr(autocti.plot, "Output")` before touching anything. + +Confirmed **not** bugs, do not "fix" them: +- `PyAutoArray/test_autoarray/plot/test_output.py` — there `aplt` *is* + `autoarray.plot`, which does export `Output`. +- `autolens_assistant` markdown — documents the removal. + +## Verification + +Re-run an alias-aware AST scan after the fix (the 2026-08-04 session's first +sweep hardcoded the alias `aplt` and **missed** a call site written as `aaplt`; +resolve aliases from each file's own imports). Then bind each changed call's +kwargs against the real callee signature via `inspect.signature`, since these +repos have little or no CI to catch a wrong kwarg name. diff --git a/complete/index.md b/complete/index.md index b0a02eff..8a687dae 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. -1125 records across 7 buckets. +1126 records across 7 buckets. ## Highlights @@ -20,6 +20,7 @@ _(curate hard-won records here — survives regeneration.)_ - [actionable-health-board](2026/08/actionable-health-board.md) — closed on ship - [active-prompt-orphan-triage](2026/08/active-prompt-orphan-triage.md) +- [aplt-output-drift-remaining-repos](2026/08/aplt-output-drift-remaining-repos.md) - [arcticpy-install-standardisation](2026/08/arcticpy-install-standardisation.md) - [arxiv-inbox-tier](2026/08/arxiv-inbox-tier.md) — the nightly strong-lensing digest no longer ends in a Slack paste-block the - [astropy-cap-bump](2026/08/astropy-cap-bump.md) — closed manually post-merge — "Part of" in the PR bodies does not auto-close diff --git a/dashboard.html b/dashboard.html index 2faad401..b3b4d314 100644 --- a/dashboard.html +++ b/dashboard.html @@ -185,7 +185,7 @@

PyAutoMindDashboard

Intent. Priority. Flow.

Every task the Mind is holding. Tap a task's 📋 and its /start_dev command is on your clipboard — paste it into a Claude Code chat to route Claude straight to that task. Recent is the same work by date — what has been happening rather than what to do next.

- +

Last updated 2026-08-24. This page is generated from active/, draft/ and the registry files, so it is only as current as they are. dashboard_refresh.yml re-renders it on every push to main — that heals a stale page, but not a stale prompt: a task that shipped without its prompt advancing to complete/ keeps rendering here as pickable backlog. Reconciling those is the refresh below.

latent-nan-guard-honest-run — planned 2026-07-22

Backlog markdown version

-

139 filed prompts, not started — sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.

+

141 filed prompts, not started — sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.

feature — 27 @@ -283,7 +283,7 @@

Backlog

Teach repos_sync --write to stamp organ config surfaces✨ featurepyautomindhardsupervisedlow

-bug — 23 +bug — 22

Fix release JAX runtime compatibility and likelihood parity🐛 bughealth_fixestoo-largesupervisedhigh

Fix JIT quick-update visualization output regressions🐛 bughealth_fixestoo-largesupervisedhigh

Fix release result/sample parameter-path regressions🐛 bughealth_fixestoo-largesupervisedhigh

@@ -292,7 +292,6 @@

Backlog

HowToGalaxy small API drifts: ellipse kwargs + plot_grid_lines (parked NEEDS_FIX)🐛 bughowtogalaxysmallsupervisednormal

generate.py deletes notebooks/ before rejecting an unknown project🐛 bugpyautohandssmallsupervisednormal

autoreduce 0.9 on PyPI never got the Python 3.12 floor🐛 bugpyautoreducesmallsupervisednormal

-

aplt.Output stale-API drift in the remaining workspace repos🐛 bugworkspacessmallsupervisednormal

@@ -309,13 +308,14 @@

Backlog

interferometer/start_here.py OOM in nightly release-validation integrate leg🐛 bugautolens

-maintenance — 23 +maintenance — 25

autocti_workspace has no Navigator Check, so its CI can never roll…🧹 maintenancecimediumsupervisedhigh

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

Defer the eager scipy.sparse import in derivative_util (~0.10 s of import)🧹 maintenancelibrariessmallsafenormal

Mirror drifted library config keys into the workspace configs🧹 maintenanceworkspacessmallsupervisednormal

+

euclid: CRLF has reached the HPC submit scripts AGENTS.md warns about🧹 maintenanceworkspacessmallsupervisednormal

Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges🧹 maintenanceworkspacessmallsupervisednormal

Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes🧹 maintenanceworkspacessmallsupervisednormal

autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)🧹 maintenanceautolens_workspace_developermediumsupervisednormal

@@ -329,6 +329,7 @@

Backlog

autolens_workspace🧹 maintenanceworkspacestoo-largesupervisednormal

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

+

Top-level imaging_ci/ is pre-resurrection heritage the legacy sweep missed🧹 maintenanceautocti_workspace_testsmallsupervisedlow

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

@@ -367,9 +368,10 @@

Backlog

plot coverage — follow-ups deferred from plot-coverage-gaps📖 docsworkspaces

-refactor — 5 +refactor — 6

einstein_radius_jit_from: replace static init_guess with a JAX-native seed finder♻️ refactorautogalaxytoo-largesupervisedhigh

Vendor bessel_kve into autoarray and drop the tensorflow-probability dependency♻️ refactorautoarraylargesupervisedmedium

+

One shared colour-norm helper — the three copies have already diverged♻️ refactorautoarraysmallsupervisednormal

Split Fitness.batch_size into lh_batch_size and latent_batch_size♻️ refactorautofitsmallsupervisednormal

Remove the dead EDEN packaging tooling from PyAutoFit♻️ refactorpyautofitmediumsupervisednormal

Deduplicate repos_sync.py's check/write pairs♻️ refactorpyautomindmediumsafelow

@@ -411,6 +413,12 @@

Backlog 2026-08-24 filed +euclid: CRLF has reached the HPC submit scripts AGENTS.md warns about + + + +2026-08-24 +filed autocti_workspace has no Navigator Check, so its CI can never roll… @@ -423,6 +431,12 @@

Backlog 2026-08-24 filed +Top-level imaging_ci/ is pre-resurrection heritage the legacy sweep… + + + +2026-08-24 +filed The weekly smoke run's timings land in results-* under no… @@ -435,22 +449,28 @@

Backlog 2026-08-24 filed +One shared colour-norm helper — the three copies have already diverged + + + +2026-08-24 +filed Heart's local smoke runner cannot run any CTI workspace — no autocti… - + 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 @@ -678,24 +698,6 @@

Backlog autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) - -2026-08-04 -filed -aplt.Output stale-API drift in the remaining workspace repos - - - -2026-08-04 -filed -Nightly release has been blocked 8 nights running — triage the streak - - - -2026-08-04 -filed -HowToLens ch4 tutorial 3: mask overlay is never actually drawn - -

Epics markdown version

diff --git a/dashboard.md b/dashboard.md index 65abe1c7..f2102e6d 100644 --- a/dashboard.md +++ b/dashboard.md @@ -45,7 +45,7 @@ anything you could not verify. | [In flight](#in-flight) (`active/`) | 1 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | -| [Backlog](#backlog) (`draft/`) | 139 | +| [Backlog](#backlog) (`draft/`) | 141 | ## Start here @@ -261,7 +261,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**139** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **25** of them belong to an epic and are listed only under [Epics](#epics) below. +**141** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **25** of them belong to an epic and are listed only under [Epics](#epics) below.
feature — 27 @@ -485,7 +485,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-bug — 23 +bug — 22
📋 Fix release JAX runtime compatibility and likelihood parity — health_fixes · too-large · supervised · high @@ -551,14 +551,6 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-
📋 aplt.Output stale-API drift in the remaining workspace repos — workspaces · small · supervised · normal - -``` -/start_dev draft/bug/workspaces/aplt_output_drift_remaining_repos.md -``` - -
-
📋 Three jax_likelihood pins are stale by ~1.24e-4 and fail the smoke gate… — workspaces · small · supervised · normal ``` @@ -674,7 +666,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-maintenance — 23 +maintenance — 25
📋 autocti_workspace has no Navigator Check, so its CI can never roll… — ci · medium · supervised · high @@ -724,6 +716,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 euclid: CRLF has reached the HPC submit scripts AGENTS.md warns about — workspaces · small · supervised · normal + +``` +/start_dev draft/maintenance/workspaces/euclid_crlf_line_endings.md +``` + +
+
📋 Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges — workspaces · small · supervised · normal ``` @@ -828,6 +828,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 Top-level imaging_ci/ is pre-resurrection heritage the legacy sweep missed — autocti_workspace_test · small · supervised · low + +``` +/start_dev draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md +``` + +
+
📋 dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it — autolens_profiling · small · supervised · low ``` @@ -1081,7 +1089,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-refactor — 5 +refactor — 6
📋 einstein_radius_jit_from: replace static init_guess with a JAX-native seed finder — autogalaxy · too-large · supervised · high @@ -1099,6 +1107,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 One shared colour-norm helper — the three copies have already diverged — autoarray · small · supervised · normal + +``` +/start_dev draft/refactor/autoarray/shared_log_norm_helper.md +``` + +
+
📋 Split Fitness.batch_size into lh_batch_size and latent_batch_size — autofit · small · supervised · normal ``` @@ -1228,19 +1244,22 @@ The 50 newest things to happen to the work in hand, newest first — issued, par |------|-------|------| | 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… | +| 2026-08-24 | filed | euclid: CRLF has reached the HPC submit scripts AGENTS.md warns about | | 2026-08-24 | filed | autocti_workspace has no Navigator Check, so its CI can never roll… | | 2026-08-24 | filed | Un-park multi_galaxy/features/scaling_relation/slam once a capped run… | +| 2026-08-24 | filed | Top-level imaging_ci/ is pre-resurrection heritage the legacy sweep… | | 2026-08-24 | filed | The weekly smoke run's timings land in results-* under no… | | 2026-08-24 | filed | Organ repo spellings split across two normalised keys | +| 2026-08-24 | filed | One shared colour-norm helper — the three copies have already diverged | | 2026-08-24 | filed | Heart's local smoke runner cannot run any CTI workspace — no autocti… | -| 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 |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| +| 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… | | 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… | @@ -1248,14 +1267,14 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-22 | filed | Is Intel macOS a supported platform, and what is the numpy-only… | | 2026-08-22 | filed | Defer the eager scipy.sparse import in derivative_util (~0.10 s of… | | 2026-08-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… | -| 2026-08-20 | filed | Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88%… | -| 2026-08-20 | filed | Numba CPU likelihood phase 1: batched MGE convolution +… | -| 2026-08-19 | filed | status.sh --repos sources a file that no longer exists |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| +| 2026-08-20 | filed | Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88%… | +| 2026-08-20 | filed | Numba CPU likelihood phase 1: batched MGE convolution +… | +| 2026-08-19 | filed | status.sh --repos sources a file that no longer exists | | 2026-08-19 | filed | jax 0.11 breaks beta/gamma message log_partition under jit… | | 2026-08-19 | filed | autolens_workspace_test jax_likelihood pins: 4 scripts fail smoke on… | | 2026-08-19 | filed | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… | @@ -1263,14 +1282,14 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-19 | issued | @PyAutoFit TransformedMessage.factor_gradient crashes on first… | | 2026-08-19 | filed | Release board: local run_logs enrichment | | 2026-08-19 | filed | RTD organism docs currency: Nerves page, organ-count drift, hands.md… | -| 2026-08-19 | filed | Deduplicate repos_sync.py's check/write pairs | -| 2026-08-19 | filed | Bug in autocti_workspace: the dataset_1d results/database example… | -| 2026-08-18 | parked | single-source-density-design |
… 10 more (20 left) | Date | Event | Task | |------|-------|------| +| 2026-08-19 | filed | Deduplicate repos_sync.py's check/write pairs | +| 2026-08-19 | filed | Bug in autocti_workspace: the dataset_1d results/database example… | +| 2026-08-18 | parked | single-source-density-design | | 2026-08-18 | parked | prior-message-collapse-design | | 2026-08-18 | filed | @PyAutoFit TransformedMessage.logpdf/pdf omit the transform… | | 2026-08-17 | filed | Which other searches need prior-support handling — coverage audit… | @@ -1278,14 +1297,14 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-16 | filed | LogGaussianPrior misreports its own support as (-inf, inf) | | 2026-08-14 | filed | Three jax_likelihood pins are stale by ~1.24e-4 and fail the smoke… | | 2026-08-09 | found | isothermal-ell-sph-oversampling-at-the-cusp | -| 2026-08-08 | parked | pyautoreduce-slacs1430-acs-comparison | -| 2026-08-08 | filed | Regenerate autolens_workspace markdown/ so the MGE pages show… | -| 2026-08-07 | filed | Regenerate setup_notebook-drifted notebooks in… |
… 10 more (10 left) | Date | Event | Task | |------|-------|------| +| 2026-08-08 | parked | pyautoreduce-slacs1430-acs-comparison | +| 2026-08-08 | filed | Regenerate autolens_workspace markdown/ so the MGE pages show… | +| 2026-08-07 | filed | Regenerate setup_notebook-drifted notebooks in… | | 2026-08-06 | filed | Triage: Convolver "No blurring_image provided" warning in canonical… | | 2026-08-06 | filed | Rewrite PyAutoCTI docs/api — 55 of 89 autosummary entries are dead | | 2026-08-06 | filed | Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two… | @@ -1293,9 +1312,6 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-04 | filed | dataset/imaging/jwst_lw is untracked because the gitignore was never… | | 2026-08-04 | filed | cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of… | | 2026-08-04 | filed | autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) | -| 2026-08-04 | filed | aplt.Output stale-API drift in the remaining workspace repos | -| 2026-08-04 | filed | Nightly release has been blocked 8 nights running — triage the streak | -| 2026-08-04 | filed | HowToLens ch4 tutorial 3: mask overlay is never actually drawn |
diff --git a/draft/bug/workspaces/aplt_output_drift_remaining_repos.md b/draft/bug/workspaces/aplt_output_drift_remaining_repos.md deleted file mode 100644 index 3f52eb86..00000000 --- a/draft/bug/workspaces/aplt_output_drift_remaining_repos.md +++ /dev/null @@ -1,61 +0,0 @@ -# `aplt.Output` stale-API drift in the remaining workspace repos - -Type: bug -Target: workspaces -Repos: -- autocti_workspace_test -- euclid_strong_lens_modeling_pipeline -Difficulty: small -Autonomy: supervised -Priority: normal -Status: formalised -Filed: 2026-08-04 (backfilled from git) - -Split out of `plot-array-stale-kwargs` (HowToGalaxy#56, 2026-08-04), which -repaired this same drift in `autolens_workspace_developer` but deliberately -stopped at that repo's boundary. - -## The drift - -`aplt.Output` no longer exists on the **autolens / autogalaxy** plot namespace — -verified: `hasattr(autolens.plot, "Output") == False`. It survives only as -`autoarray.plot.Output`. The removal was deliberate and is already documented in -`autolens_assistant/AGENTS.md:218` ("the `aplt.MatPlot2D` / `aplt.Output` objects -have been removed — do not use them"). - -Callers must move to the flat convention. Note the accepted kwargs differ per -callee — check each signature rather than blanket-renaming: - -```python -# plot_array takes all three -aplt.plot_array(array=..., output_path=P, output_filename=F, output_format="png") -# subplot_* take only path + format (no output_filename) -aplt.subplot_tracer(tracer=..., grid=..., output_path=P, output_format="png") -``` - -## Sites - -| Repo | Files | Status | -|------|-------|--------| -| `autocti_workspace_test` | 27 | **UNVERIFIED — check first** | -| `euclid_strong_lens_modeling_pipeline/tools/` | 2 (`psf_size.py`, `extra_galaxies_centres_gui.py`) | confirmed broken | - -**Do not assume the autocti files are broken.** Those import -`import autocti.plot as aplt` — a *different* library's plot namespace. -`autocti` was not installed in the 2026-08-04 session so it could not be -checked. PyAutoCTI may still export `Output`, in which case those 27 files are -correct as written and must be left alone. Verify with -`hasattr(autocti.plot, "Output")` before touching anything. - -Confirmed **not** bugs, do not "fix" them: -- `PyAutoArray/test_autoarray/plot/test_output.py` — there `aplt` *is* - `autoarray.plot`, which does export `Output`. -- `autolens_assistant` markdown — documents the removal. - -## Verification - -Re-run an alias-aware AST scan after the fix (the 2026-08-04 session's first -sweep hardcoded the alias `aplt` and **missed** a call site written as `aaplt`; -resolve aliases from each file's own imports). Then bind each changed call's -kwargs against the real callee signature via `inspect.signature`, since these -repos have little or no CI to catch a wrong kwarg name. diff --git a/draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md b/draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md new file mode 100644 index 00000000..5e21532c --- /dev/null +++ b/draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md @@ -0,0 +1,88 @@ +# Top-level `imaging_ci/` is pre-resurrection heritage the legacy sweep missed + +Type: maintenance +Target: autocti_workspace_test +Repos: +- autocti_workspace_test +Difficulty: small +Autonomy: supervised +Priority: low +Status: formalised +Filed: 2026-08-24 + +Split out of `aplt-output-drift-remaining-repos` (PyAutoGalaxy#585, 2026-08-24), +which scoped `autocti_workspace_test` out rather than modernising code that +looks dead. + +## The observation + +`autocti_workspace_test` has a top-level `imaging_ci/` directory — 41 Python +files — that behaves in every observable way like the `legacy/` tree beside it, +but is not in it: + +- **Not documented.** AGENTS.md's "Repository Structure" block lists `scripts/`, + `legacy/`, `config/` and `smoke_tests.txt`. Top-level `imaging_ci/` appears + nowhere in it. +- **Not exercised.** `smoke_tests.txt` lists three scripts + (`dataset_1d/model_fit.py`, `imaging_ci/model_fit.py`, `plot/subplots.py`) — + all of them under `scripts/`, none under top-level `imaging_ci/`. Nothing in + CI touches it. +- **Not maintained since 2023.** Its substantive history is `2023-02-07 add all + files` and `2023-02-13 temporal fit now runs`. Its only 2026 commits are + repo-wide mechanical sweeps (`remove the Finished./Finish. notebook-generation + crutch`, `remove legacy notebook bootstrap`) that also touched `legacy/`. +- **Broken against the current stack, in exactly the `legacy/` way.** 13 of its + files call the removed plotter-object API — `ImagingCIPlotter`, `MatPlot2D`, + `MatPlot1D`, `Output`, `Array2DPlotter`, `Cmap`, `Title`, `Axis` — none of + which `autocti.plot` exports (its `__init__.py` is 49 lines of flat functions). + `legacy/README.md` describes its own contents in the same terms: *"target the + pre-2025 PyAutoCTI API (the removed Plotter object stack, analysis summing, + etc.) and are not runnable against the current stack."* + +`legacy/` was created on 2026-07-17 by *"CTI resurrection Phase 5: rebuild as a +modern integration-test suite (#1)"*, which swept the pre-resurrection contents +into it. The reading this prompt proposes: `imaging_ci/` is part of that same +heritage and the sweep simply missed it. + +## Why it matters + +`AGENTS.md:52` says *"Never edit `legacy/` — it is preserved Euclid VIS +history."* That rule protects the tree it names. Because `imaging_ci/` sits +outside it, an API-drift sweep reads those 13 files as live breakage and +"fixes" them — modernising dead code against no CI and no dataset. That is the +mistake PyAutoGalaxy#585 stopped one step short of making. + +## What to decide + +Confirm the reading before acting — the point of this prompt is the question, +not a foregone move. Check `imaging_ci/` against the CTI resurrection epic +(PyAutoCTI#82): is any of it slated for modernisation, or is it all superseded +by `scripts/`? + +Then one of: + +1. **`git mv imaging_ci/ legacy/imaging_ci/`** and extend `legacy/README.md` + + AGENTS.md's structure block to cover it. Preserves the history, and puts it + behind the never-edit rule where a future sweep will leave it alone. +2. **Condemn it** via the Gut's transit-and-void lifecycle (see PyAutoGut), if + `legacy/` is meant to hold only the Euclid VIS material specifically and this + is something else. +3. **Keep and modernise** — only if the epic actually wants these 13 files + working. Then it is a real dev task, not maintenance, and wants its own + prompt with a plan for validating them (no CI, no committed dataset). + +Note `imaging_ci/profiling/` (17 files) and `imaging_ci/temporal/` are in the +directory too and are *not* part of the 13 broken ones — they need the same +decision but on their own evidence, not by association. + +## Evidence to re-derive + +```bash +git -C autocti_workspace_test log --format="%ad %s" --date=short -- imaging_ci | head +git -C autocti_workspace_test log --diff-filter=A --format="%ad %s" --date=short -- legacy/README.md +``` + +Alias-aware AST scan (resolve the plot alias from each file's own imports, then +diff attribute use against `autocti/plot/__init__.py`'s real export list) — +the scan written for PyAutoGalaxy#585 reports 31 broken files repo-wide, +18 under `legacy/` and 13 under top-level `imaging_ci/`. diff --git a/draft/maintenance/workspaces/euclid_crlf_line_endings.md b/draft/maintenance/workspaces/euclid_crlf_line_endings.md new file mode 100644 index 00000000..521b7e95 --- /dev/null +++ b/draft/maintenance/workspaces/euclid_crlf_line_endings.md @@ -0,0 +1,76 @@ +# euclid: CRLF has reached the HPC submit scripts AGENTS.md warns about + +Type: maintenance +Target: workspaces +Repos: +- euclid_strong_lens_modeling_pipeline +Difficulty: small +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-24 + +Noticed during `aplt-output-drift-remaining-repos` (PyAutoGalaxy#585, +2026-08-24), which preserved CRLF in the three files it edited rather than +bury a real fix inside whole-file diffs. + +## The state + +`euclid_strong_lens_modeling_pipeline/AGENTS.md` says: + +> All files must use Unix line endings (`\n`). CRLF will break shell scripts on +> the HPC. + +Measured on `main`: **20 of 126 tracked text files carry CRLF** — mixed, not +uniform, so this is drift rather than a deliberate convention. + +| Extension | CRLF / total | +|---|---| +| `.py` | 11 / 29 | +| `.yaml` | 8 / 79 | +| `.sh` | 1 / 1 | + +## Why this is not cosmetic + +The CRLF has reached exactly the files the rule exists to protect, **including +their shebang lines**: + +``` +hpc/sync #!/usr/bin/env bash^M +hpc/batch_gpu/submit_start_here #!/bin/bash -l^M +hpc/batch_cpu/submit_start_here #!/bin/bash -l^M +activate.sh BASE=/mnt/ral/jnightin/PyAuto^M +``` + +A trailing `\r` becomes part of the interpreter path, which is the documented +`bad interpreter` failure. Also affected: `hpc/batch_gpu/submit_full_model`, +`hpc/batch_cpu/template`, `hpc/sync.conf.example`, `hpc/.gitignore`. + +**Do not assume these are currently broken.** They are evidently in use for real +GPU runs, so either they are invoked in a way that tolerates it (`bash hpc/sync` +ignores the shebang), or SLURM is forgiving, or the CRLF is recent. **Establish +which before writing the PR** — `git log` the affected files to see when CRLF +appeared, and say plainly in the PR whether this was a live break or a latent +one. That distinction is the whole value of the task. + +`activate.sh` is the interesting case: it is `source`d, not executed, so its +`\r` lands inside a variable — `BASE` gains a trailing carriage return and every +path built from it is subtly wrong. That fails differently and more quietly than +a bad shebang. + +## Shape of the fix + +1. Convert all tracked text files to LF in one mechanical pass. +2. **Add a `.gitattributes`** — the repo has none, which is why this recurred. + Without it nothing stops the next contributor on Windows reintroducing it. + `* text=auto eol=lf`, with explicit entries for the `hpc/` scripts that carry + no extension. +3. Verify: no tracked text file contains `\r`; the `hpc/` scripts still parse + (`bash -n`); Python files still compile. + +## Scope note + +This is a whole-repo whitespace commit and will touch 20 files with no logical +change — that is the point, and it is why it was kept out of PyAutoGalaxy#585. +Land it on its own so the diff stays reviewable as "line endings only", and land +it when no other euclid branch is open, since it will conflict with everything. diff --git a/draft/refactor/autoarray/shared_log_norm_helper.md b/draft/refactor/autoarray/shared_log_norm_helper.md new file mode 100644 index 00000000..c8f41541 --- /dev/null +++ b/draft/refactor/autoarray/shared_log_norm_helper.md @@ -0,0 +1,80 @@ +# One shared colour-norm helper — the three copies have already diverged + +Type: refactor +Target: autoarray +Repos: +- PyAutoArray +- PyAutoGalaxy +Difficulty: small +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-24 + +Split out of `aplt-output-drift-remaining-repos` (PyAutoGalaxy#585, 2026-08-24), +which added the third copy rather than widen that task into a third repo. + +## The duplication + +Building the matplotlib colour norm from `use_log10` / `vmin` / `vmax` is written +out three times: + +| Where | Notes | +|---|---| +| `autoarray/plot/array.py:164-188` | the reference implementation | +| `autoarray/plot/inversion.py:92-107` | **already divergent — see below** | +| `autogalaxy/util/plot_utils.py::norm_from` | added by PyAutoGalaxy#586, faithful to `array.py` | + +## This is not a tidiness task — the copies disagree + +`array.py` reads the configured floor: + +```python +log10_min = _conf.instance["visualize"]["general"]["general"]["log10_min_value"] # fallback 1.0e-4 +clipped = np.clip(array, log10_min, None) +``` + +`inversion.py` **hardcodes `1e-4`** and never consults `autonerves` config, and +does not clip. So a user who changes `log10_min_value` gets it honoured on array +plots and silently ignored on inversion plots. That is a live behaviour bug, not +a style issue, and it is the thing to fix first — the deduplication is how you +stop it recurring. + +They differ in a second way worth preserving deliberately rather than by +accident: `array.py` derives `vmax` from the clipped array, `inversion.py` from +`pixel_values` and falls back to `vmin_log * 10.0` when there are none. And +`inversion.py`'s `vmax_log <= vmin_log` guard sits inside its `elif pixel_values` +branch, so an explicitly-passed degenerate `vmax` is *not* widened there but *is* +in `array.py`. + +**Decide which behaviour is correct for each difference before merging them** — +do not assume `array.py` wins on all three. Write the decision into the helper's +docstring. + +## Shape of the fix + +1. Add one helper in **PyAutoArray** — the lowest repo that owns this logic; + `autoarray/plot/utils.py` sits alongside `auto_mask_edge` and the other + shared plot helpers. Give it the `array`/`use_log10`/`vmin`/`vmax` signature + plus whatever parameter reconciles the `pixel_values` difference. +2. Call it from `array.py` and `inversion.py`. +3. Make `autogalaxy.util.plot_utils.norm_from` **delegate** to it rather than + reimplement — autogalaxy may import autoarray (dependency direction is fine; + the reverse is not). Keep `norm_from` as the autogalaxy-facing name so the + `Clicker`/`Scribbler` callers added in PyAutoGalaxy#586 keep working. + +## Constraints + +- **Behaviour-preserving except where you deliberately fix a divergence**, and + each such fix is named in the PR body. This is a plotting path with thin test + coverage, so an unnoticed change ships silently. +- Library-first: PyAutoArray merges before PyAutoGalaxy. +- `test_autogalaxy/gui/test_plot_norm.py` (added by #586) already pins the + autogalaxy behaviour — it must stay green, or its change must be justified. + +## Verification + +Add tests in PyAutoArray covering the config-floor path (`log10_min_value` set to +something other than `1e-4`, asserting *both* call sites honour it), the +explicit-limits path, the derived-`vmax` path, and the degenerate `vmax <= vmin` +case. Then the full suites in both repos, on 3.12 and 3.13. diff --git a/queue.md b/queue.md index e0c20bd7..0020f64e 100644 --- a/queue.md +++ b/queue.md @@ -2,5 +2,14 @@ Ordered input for `/register_and_iterate --queue`: one prompt path per line, processed top to bottom. Done entries are prepended with `# DONE ` rather -than deleted, preserving order history. Currently empty — the pytree-variant -queue that lived here was fully consumed on 2026-04-19 (see git history). +than deleted, preserving order history. + +## aplt-output-drift follow-ups (queued 2026-08-24) + +The three items `aplt-output-drift-remaining-repos` (PyAutoGalaxy#585) filed +rather than fixed. Independent of each other — different repos, different work +types — so they are three prompts and three PRs, ordered cheapest-risk first. + +draft/maintenance/autocti_workspace_test/imaging_ci_heritage_sweep.md +draft/refactor/autoarray/shared_log_norm_helper.md +draft/maintenance/workspaces/euclid_crlf_line_endings.md