Skip to content

mind: sweep draft/ for shipped work — 11 prompts recorded complete, 9 unblocked - #167

Merged
Jammy2211 merged 8 commits into
mainfrom
claude/draft-prompts-sweep-sopdvh
Aug 9, 2026
Merged

mind: sweep draft/ for shipped work — 11 prompts recorded complete, 9 unblocked#167
Jammy2211 merged 8 commits into
mainfrom
claude/draft-prompts-sweep-sopdvh

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Follows the 2026-08-08 planned.md prune, where 6 of 13 entries described work that had already shipped. draft/ was the larger exposure — 150 prompts graded by no check at all — and this sweep works through it.

Method throughout: never trust a prompt's own text about its state. Every grade reads the prompt's acceptance criteria against the target repo's main, via anonymous treeless clones and raw.githubusercontent.

Results

60 prompts deep-graded across five target clusters, plus cheap-signal coverage of the remaining 139.

Outcome Count
Recorded complete 11
Half / substantially shipped (re-scoped in place) 4
Unblocked by a since-closed gate 9
Stale-path / stale-index corrections 7
Unstartable (premise removed upstream) 1
Archived (self-declared withdrawn) 1
Mis-gradeable — annotated so it isn't 1

draft/ 150 → 141. lifecycle check / orphans / index --check OK and pytest tests/ 118 passed at every commit.

The larger finds

oversampling_kxs_coupling — the source prompt for the whole k×s series, which shipped over 2026-07-08/09 and closed PyAutoArray#362 as "series complete". Six phase records already sat in complete/2026/07/; only the prompt they came from never advanced.

jax_substructure prompts 1–4complete/2026/06/jax-substructure-simulator.md was itself written as a retroactive close-out and says plainly that "the 4 jax_substructure/ prompts shipped to main". All four then sat in draft/ for two more months. Re-verified across PyAutoLens, PyAutoGalaxy and autolens_workspace_test before retiring, and the archived epic tracker — which still listed them under "Outstanding" with live links into draft/ — was corrected.

rectangular_adapt_constant_split_guard — a duplicate of phase 1 of the @rhayes777 audit epic (PyAutoArray#417). The Mind already held the completion record, inside the sibling prompt.

latent_samples_none_on_resumed_fit — fixed by PyAutoFit#1418 the same day it was filed. No completion record for #1418 exists anywhere, so this shape is invisible to any ledger cross-reference.

Two findings that argue against over-trusting signals

A fix that reads like the prompt's, and isn't. test_mode_bypass_ordered_assertion_ties still reproduces, but main now catches exc.FitException in the TEST_MODE bypass — which looks exactly like the requested fix. The catch wraps only the likelihood call; model.instance_from_vector, where check_assertions actually raises on an ordering tie, sits on the line before the try. Annotated in place, because a future session grading against main would very plausibly mark it shipped. The upside: the fix is now a one-liner.

A green release run that means the opposite of what it looks like. In health_fixes, many named scripts are now parked in no_run.yaml — for cap timeouts, a different failure from the defects the prompts describe. The 2026-08-07 Stage 3 integrate reports 657p/0f/101s/0t, and those 101 skips are where this cluster went. Zero failures says nothing about whether these defects survive.

Tooling: intake reconcile measured

Rather than propose a new tool, the existing reconcile pass was scored against the pre-sweep tree (f25e154e) using findings later confirmed upstream:

  • 96 suspects of 148 scanned — a 65% flag rate
  • of 5 confirmed findings it flagged 2, one of them at low
  • it missed the three largest

~40% recall, and the one true high sits among 51 others. A precision problem, not a missing tool. draft/feature/pyautomind/draft_staleness_detection_signals.md records the three signals that did work, each grounded in a specific finding, plus the hard limit (one finding had no Mind-side signal at all) and the trap above. f25e154e now serves as a labelled set to re-rank against.

Recurring hazards recorded in the annotations

  • Path guessing was wrong four times while the code was present every time — three script relocations and the Preloads module. A 404 in this org means drift until proven otherwise; resolve via the import surface or a clone.
  • -W always::SyntaxWarning reports zero on Python < 3.12, where those escapes are a DeprecationWarning. That briefly produced a false "already fixed" during the autolens_workspace sweep.
  • Slug similarity is useless hereoversampling_kxs_coupling scores 0.25 Jaccard against kxs-core. Search record bodies for the prompt's identifiers, not record slugs for the prompt's slug.

Review notes

Everything retired carries a dated completion record with the verification evidence and the folded original prompt; nothing was deleted. Prompts that are merely unblocked stay in draft/ with the gate's resolution recorded. Where a leg could not be settled offline — anything needing a real run — that is stated rather than assumed.


Generated by Claude Code

claude added 8 commits August 9, 2026 13:02
… prompts

The 2026-08-08 planned.md prune found 6 of 13 entries describing work that had
already shipped. draft/ is 150 prompts graded by no check at all, so it was
always the larger exposure. This is the first target-repo pass: every prompt
under draft/{feature,bug,research,refactor}/autoarray graded by reading its
acceptance criteria against PyAutoArray main (efaf3041), not by trusting the
prompt's own text about its state.

3 of 18 described shipped work. 1 more was half-shipped, 1 unstartable.

RECORDED AS COMPLETE

oversampling_kxs_coupling.md is the source prompt for the whole k x s series,
which shipped over 2026-07-08/09 and closed PyAutoArray#362 as "series
complete". Six dated records for its individual phases already sat in
complete/2026/07 (kxs-design/core/cache/refactor/workspace-tests/
surface-refactor); only the prompt they all came from never advanced. Graded
against its own five-part Scope, all met on main: the divisibility rule in
_validate_convolve_over_sample_size, whose docstring names "the k x s
coupling" verbatim; the partial pre-bin as
over_sample_util.binned_to_convolve_size_from with uniform-k and adaptive-k
tests; PyAutoGalaxy callers via 486; the workspace_test adaptive + s=2 leg via
154. Its section 5 was deliberately re-scoped, not skipped — kxs-core records
the fork resolved as option (c) with option (a) split out as
oversampled_psf_dataset_adoption.md, which correctly remains a live draft.

rectangular_adapt_constant_split_guard.md is a duplicate of phase 1 of the
rhayes777 audit epic, shipped 2026-07-28 as PyAutoArray#417 + PyAutoLens#662.
The guard is at pixelization.py:154 raising PixelizationException off two
capability flags, with all 9 rectangular x split combinations covered by
test_split_regularization_support.py. The Mind already held this completion
record — inside the sibling prompt rhayes_audit_validation_and_crashes.md,
which planned.md tracks. One leg is recorded as NOT CONFIRMED: the prompt also
wanted the af.Model composition form to fail before Nautilus starts, and no
pre-fit model-inspection guard exists in PyAutoLens.

RE-SCOPED IN PLACE

nufft_simulator_chunking.md is overtaken. Its whole option-1 implementation is
on main from PyAutoArray#330, merged 2026-05-22 — seven weeks BEFORE the
Intake Agent retroactively formalised this prompt on 2026-07-08. It landed to
the letter: the chunk_size kwarg under the prompt's own suggested name and
default, jax.lax.scan rather than a Python loop, and the image_from adjoint the
prompt flagged as out of scope. Its named sibling blocker shipped too (#329).
What remains is one wiring leg, already recorded in interferometer-jax-jit.md:
SimulatorInterferometer never sets chunk_size, so the scan branch is
unreachable from the simulator. Difficulty too-large drops to small; priority
stays high because the profiling sweep is still blocked.

regularization_jax_gradient_gaps.md leg 3 marked DONE — the same #417 guard
covers it. Leg 2 is now its only open work, and the "merge at intake if so"
question it raises about the split-guard prompt is moot.

rectangular_multi_submesh.md marked STALE PREMISE. Path B is written to
subclass RectangularRotatedAdaptImage and build RectangularSplineAdaptImage
per mode; neither class exists on main after the #402/#403 consolidation. All
four research artefacts it says to read first do survive in files/, so the
science holds and only the code the plan attaches to moved.

ARCHIVED

reg_matrix_logdet_nonfinite_fix.md self-declares WITHDRAWN 2026-07-17, kept for
provenance, do NOT start. Moved to complete/archive/shelved/, which exists for
exactly that.

METHOD NOTE

A slug-similarity scan of all 148 drafts against all 934 records MISSED the k x
s finding entirely — that stem against kxs-core scores 0.25 Jaccard. Same
weakness as the ep-optimise-updater case. Both cheap scans (slug similarity,
and drafts cited by name inside record bodies) are pre-filters, not graders.
Two of the three hits were provable from PyAutoMind alone, since the records
were already in complete/. That pass is cheaper than cloning and should come
first on the remaining 132.

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ 150 to 147.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Follows the PyAutoArray pass in the previous commit. Same method: read each
prompt's acceptance criteria against PyAutoFit main (3b960609), never trust the
prompt's own text about its state. Covers draft/{bug,feature,refactor,research}/
autofit, maintenance+refactor/pyautofit, bug/priors and research/graphical_ep.

RECORDED AS COMPLETE

latent_samples_none_on_resumed_fit.md shipped as PyAutoFit#1418, merged
2026-07-25 — the SAME DAY the prompt records the finding from the full health
sweep. Option (b) of its own Task section is what landed: latent_samples_from
now opens with an explicit samples-is-None guard raising SamplesException, and
the message names the cause and both remedies. Its open sub-question is
answered by the guard being unconditional rather than test-mode-gated.

This is the class of drift the Mind cannot detect by itself. There is NO
completion record for #1418 anywhere in complete/, so no amount of
cross-referencing draft prompts against the ledger would surface it. Worth
knowing, because both PyAutoArray hits last commit WERE provable from the Mind
alone — the cheap pass is real but it is not sufficient.

test_mode_representative_outputs_size_realistic.md is an umbrella whose own
status block records phases 1 and 2 COMPLETE and phases 3 and 4 ABSORBED, then
states "EPIC CLOSES when #70 ships its recipe leg". autolens_profiling#70 is
closed, state_reason completed, closed 2026-07-17 — the same day that status
block was written. The condition was met within hours of the note and nothing
advanced the file. This one needed neither a clone nor a code read, just one
issue-state lookup.

SHARPENED — a fix that reads like the prompt's but is not

test_mode_bypass_ordered_assertion_ties.md still reproduces, and main now looks
like it does not. The bypass path DOES now catch FitException and continue with
the sentinel, which reads exactly like this prompt's suggested fix. But the
catch wraps only the likelihood call: model.instance_from_vector sits on the
line BEFORE the try, and that is where check_assertions raises FitException on
an ordering tie at the prior medians. ignore_assertions defaults False and the
bypass never passes it, so the assertion escapes the guard entirely.

Annotated in place with that trace, because a future session reading main would
very plausibly mark this shipped. The upside is that the fix is now a one-liner
rather than the catch-and-perturb design the prompt sketches — either move the
instantiation inside the existing try, or pass ignore_assertions at the bypass.
Recorded both with the semantic difference between them stated.

HALF SHIPPED

11_transformed_message_semantics_doc.md — the EP review's Phase 2 (PyAutoFit
1334) explicitly carried "incl. bug/priors/11 doc half", so which half mattered.
Edge 1, the asymmetric reversal convention, is DONE: _transform and
_inverse_transform both carry direction-naming docstrings calling the asymmetry
deliberate and load-bearing, and graphical/README.md points at it. Edge 2 is
NOT: LinearShiftTransform still has no docstring and the reciprocal call sits
bare. Difficulty large drops to small, scope narrows to edge 2 only.

remove_eden_packaging_tooling.md — autofit/tools/edenise is gone and a repo-wide
grep returns zero hits, which settles the prompt's own guardrail check. Root
eden.yaml remains. Also flagged that its follow-up names PyAutoConf, since
renamed PyAutoNerves. Difficulty medium drops to small.

UNBLOCKED, NOT SHIPPED

Prompts 12, 13 and 14 all sequence behind Phases 1-2 of the EP framework review
("do not open the design issue until Phases 1-2 land"). That review completed
2026-07-08, all 8 phases — Phase 1 complete with F1-F9 on PyAutoFit#1332, Phase
2 shipped as #1334. The design input they were waiting on exists. Annotated all
three as ready to plan. ep_analytic_updates WP1 says "land after PyAutoFit#1334"
— merged; annotated to rebase rather than wait. Same shape as the
canonical_key_todo_sweep case: a closed prerequisite means newly unblocked, not
finished.

VERIFIED GENUINELY OPEN

cli_noise_pyautofit_batch (items 1, 3 and 4 all still present verbatim — no
handler.close, evidence() at nautilus search.py:535, disp/iprint still passed),
plot_functions_discard_kwargs (all five still take kwargs and reference it
nowhere but the def lines), search_seed_reproducibility (no seed on
AbstractSearch; the covariance test still monkeypatches dynesty's
get_random_generator), messages_xp_stack_jax_trace (10 xp.array-of-list sites
across normal/truncated_normal/beta/gamma), split_fitness_batch_size, priors 09
plus the 12/13/14 anchors (composed_transform reversal, np.reciprocal at
transform.py:175, Prior.__getattr__ delegation — line numbers drifted, structures
intact), ep_hierarchical_scale_collapse (#1405 open, accurately tracked), the two
slope_hierarchy residues and ep_lbfgs_jax (external checkouts, laptop-only), and
the two graphical_ep scoping umbrellas.

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ 147 to 145.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
…he gap

Two sweeps in, the obvious question is why the existing reconcile pass had not
already caught this. Answer: it flags too much and misses the big ones.

MEASURED, not asserted. Ran `pyauto-brain intake reconcile` against the
pre-sweep tree (f25e154) so its ranking could be scored against findings later
confirmed by reading upstream source:

  96 suspects of 148 scanned -- 65% flag rate (52 high / 20 medium / 24 low)
  of the 5 confirmed findings it flagged 2: the test-mode umbrella (high) and
  the latent-samples bug (low, i.e. buried)
  it MISSED the three largest -- oversampling_kxs_coupling (a whole shipped
  five-phase series), rectangular_adapt_constant_split_guard (PyAutoArray#417),
  nufft_simulator_chunking (PyAutoArray#330)

So ~40% recall, and the one true positive at high sits among 51 other highs.
This is a precision problem, not a missing-tool problem: the current matchers
fire on prompts that merely reference each other, which is most of them. The
read-only contract is right and should stay -- retiring a prompt is human.

Filed draft/feature/pyautomind/draft_staleness_detection_signals.md with the
three signals that actually found things, each grounded in a specific finding
rather than speculated:

1. Machine-readable gates. The test-mode umbrella stated its own exit condition
   in prose ("EPIC CLOSES when #70") and #70 closed completed the same day that
   line was written. Proposes Closes-when: / Blocked-by: header keys, since the
   two readings are opposite -- gate closed means DONE, blocker closed means
   newly UNBLOCKED -- which is exactly the ambiguity that keeps `issues
   --drafts` advisory today. This sweep hand-annotated four unblocked cases
   (priors 12/13/14, ep_analytic_updates WP1); the key would have found them.

2. Prompt names an identifier that now exists upstream. The k x s prompt named
   _validate_convolve_over_sample_size, which is on main with the prompt's own
   phrase in its docstring; the nufft prompt asked for a chunk_size kwarg using
   lax.scan and got exactly that under its suggested name. Extract backticked
   identifiers, grep the target repo, rank on hits the prompt says should not
   exist. A treeless clone makes this cheap.

3. A completion record already names the deliverable. interferometer-jax-jit.md
   says outright that chunk_size is a TransformerNUFFT argument
   SimulatorInterferometer never sets -- that one sentence resolves the nufft
   prompt. Search record BODIES for the prompt's identifiers, not record slugs
   for the prompt's slug: slug similarity was measured here and is useless,
   scoring kxs_coupling against kxs-core at 0.25 Jaccard.

Records the hard limit too, because it bounds what any such tool can promise:
one of the five findings had NO signal in PyAutoMind at all. #1418 fixed the
latent bug the same day it was filed and left no completion record anywhere, so
the upstream read stays load-bearing and the Mind-only passes are a pre-filter.
The deeper fix is that work shipping without a Mind record is the root cause;
flagged as a separate question for the ship skills.

And records the trap: test_mode_bypass_ordered_assertion_ties reads as shipped
and is not, so an identifier-presence matcher would confidently mis-rank it.
Acceptance criteria therefore include that it is NOT reported shipped, using
f25e154 as the labelled set.

Also regenerates dashboard.md, stale since the four prompts recorded complete
in the previous two commits (148 to 144, still 6 hygiene flags).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Six of the eight prompts filed against autolens_workspace graded by reading
acceptance criteria against workspace main (9974f891). Two not re-graded:
markdown_regeneration_sigma_min (known laptop-only, needs real fits) and
joss_cluster_benchmark_tuning.

RECORDED AS COMPLETE

normalise_auto_simulate_guard_idiom.md — all four hand-rolled guard sites now
call al.util.dataset.should_simulate, and a repo-wide sweep finds zero remaining
hand-rolled data.fits-exists simulator guards against 492 files on the standard
idiom.

Its § Proposed work item 2 warned "do not silently drop" the mass.csv check in
cluster/likelihood_function.py. The shipped form keeps it AND fixes an ordering
subtlety the prompt did not raise: should_simulate is evaluated first, with a
comment saying so, because written the other way round a present mass.csv would
short-circuit past the PYAUTO_SMALL_DATASETS rebuild — exactly the failure the
conversion exists to prevent. Item 4 (an optional required_files= argument on
should_simulate) was not taken; it was explicitly optional and would have made
this library+workspace rather than workspace-only.

Two if-not-data_fits_path-exists sites survive and are correctly untouched:
they guard one-off urllib downloads of real HST data (RXJ1131, Abell 2744), not
simulator runs, so should_simulate's capped-rebuild semantics would delete a
downloaded file in order to re-download it. Converting them would regress.

Notable for the detection prompt filed last commit: this is the ONE finding
across three sweeps that intake reconcile ranked high for the right reason —
the auto-simulate-guard-targets record names the prompt's path in its body,
which is signal 3 working as intended. It still arrived among 51 other highs.

UNBLOCKED

sampler_cli_output_workspace_sweep.md says "Do not start until #1436 has
merged". PyAutoFit#1436 merged 2026-07-30. Ready to start, nothing shipped.
Refreshed its counts while there, since it estimated "14+": 19 .py scripts still
print the line, 16 still carry the "cell with progress" typo, and 54 notebooks
carry it. Flagged that the notebook count far exceeds the script count, so
whether all 54 regenerate from those 19 needs checking before assuming a
regeneration pass covers them.

That makes FIVE gate-closed-but-prompt-unaware cases across three sweeps, which
is the strongest evidence yet for the Closes-when:/Blocked-by: header keys
proposed in draft/feature/pyautomind/draft_staleness_detection_signals.md.

MEASURED, STILL OPEN

latex_docstrings_invalid_escape_warnings.md asks for a count before anyone
proposes a fix, so the count is now in the file: 80 warnings across 17 files in
autolens_workspace scripts/ alone — six times the "roughly a dozen per script
across the four" it was filed on, confirming its own instinct that this is not
confined to potential_correction. Recorded the per-escape breakdown and the
worst files, which are all likelihood_function.py, i.e. the LaTeX-heavy
derivations. Sibling workspaces and HowTo* repos remain uncounted.

Recorded a trap in the same block, because it bit during this sweep: the
prompt's own suggested command uses -W always::SyntaxWarning, and these escapes
are only a SyntaxWarning on Python 3.12+. On 3.11 they are a DeprecationWarning,
so that exact command reports ZERO and looks precisely like "already fixed".
Reading the source directly is what caught the mis-grade. Also needs -f, or
__pycache__ suppresses recompilation and the count silently drops.

VERIFIED GENUINELY OPEN

script_local_pixel_scale_vs_dataset_pixel_scales — the cited line still reads
image_half_width = 0.5 * min(dataset_full.shape_native) * pixel_scale with the
literal, and config/build/no_run.yaml's NEEDS_FIX reason still names only the
0.0-luminosity cause, exactly as the prompt says needs updating.
cosmos_web_ring_mask_dtype — all five mask_extra_galaxies.fits still BITPIX -64
(float64), dataset still 12 MB. oversampled_psf_dataset_adoption is the correct
live residue of the k x s series § 5, established two commits ago.

Also regenerates dashboard.md (144 to 143).

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ 145 to 144.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Six prompts from PyAutoHeart#27 release run 28784914443. Nothing graded shipped
this time, but the cluster was misleading in three ways that would have cost a
future session real time. All findings are offline-verifiable; the reproduction
legs need runs a cloud session cannot do.

THE README WAS WRONG BY ONE WHOLE PROMPT

It lists seven prompts. aggregator_output_contracts SHIPPED 2026-07-07 --
PyAutoFit#1324, with autogalaxy_workspace#122, autolens_workspace#229 and
autolens_workspace_test#146 all merged, record in complete/2026/07. Its file has
not been in the folder for a month; the table still advertised it as live work
covering 7 scripts. Struck through with the record cited.

EVERY SCRIPT PATH IN TWO PROMPTS IS STALE -- AND THAT NEARLY FOOLED ME

All 4 scripts in jit_visualization_outputs and all 6 in jax_runtime_and_parity
return 404 at the paths written in the prompts. Ten 404s out of ten is exactly
what "this was fixed by deleting the scripts" looks like. It is not: all ten
still exist under a renamed layout. Two systematic renames:

  scripts/jax_likelihood_functions/<dataset>/X.py -> scripts/<dataset>/jax_likelihood/X.py
  scripts/<dataset>/modeling_visualization_jit.py -> scripts/<dataset>/visualization/...
  scripts/multi/... -> scripts/multi_dataset/...

Verified in autolens_workspace_test (4cea3f8c, cloned) and
autogalaxy_workspace_test (raw; all six resolve 200). This is the SAME rename
family that cost a previous session time on the point-smoke prompt, so a 404 in
this cluster should be treated as drift until proven otherwise. Corrected
path tables written into both prompts.

Also worth recording: autogalaxy_workspace_test has no README.md, so the
handoff's "sanity-check with a path you know exists before trusting a 404"
initially suggested the whole repo was unreachable. AGENTS.md and
config/build/no_run.yaml both return 200. Pick the probe path per repo.

A GREEN RELEASE RUN IS NOT EVIDENCE THESE WERE FIXED

Many named scripts are now parked in their workspace's config/build/no_run.yaml
with dates AFTER these prompts were filed -- 4 of the 6 in jax_runtime_and_parity
(all SLOW 2026-07-14, citing PyAutoHeart#74 and the 1800s cap), 1 of the 4 in
jit_visualization_outputs (SLOW 2026-07-08, 300s cap).

That matters for how the 2026-08-07 release drive reads. Its Stage 3 integrate
reports 51/51 jobs green, 657p/0f/101s/0t -- and those 101 SKIPS are where this
cluster went. A parked script cannot fail validation, so zero failures says
nothing about whether these defects survive. The parkings also cite a DIFFERENT
failure (cap timeout) from the defects the prompts describe, which means
unparking is a precondition for reproducing any of them.

release_timeout_policy: 1 of its 5 has taken the prompt's own option 3b --
autolens_workspace cluster/start_here parked SLOW 2026-07-22 citing PyAutoHeart
run 29912642195. The other four are in neither no_run.yaml, which does NOT mean
they were optimized; that inference needs a benchmark and is the one the prompt's
item 4 warns against. Flagged that the caps themselves moved too: the prompt is
written against 300s, the 2026-07-22 parking cites 1800s mode=release.

VERIFIED PATHS STILL CORRECT

numerical_inversion_failures (2 scripts) and autofit_sampler_database (9) name
paths that all resolve 200 unchanged, and neither prompt's scripts are parked.

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ unchanged at 144 -- no prompt retired, four annotated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
…pts at once

The largest single find of the sweep, and the Mind had already written it down.

complete/2026/06/jax-substructure-simulator.md was itself authored as a
"retroactive close-out" on 2026-06-09 and says plainly that "the 4
jax_substructure/ prompts shipped to main". All four prompt files then sat in
draft/feature/jax_substructure/ for a further two months, indistinguishable
from unstarted work. Prompts 1 (vmap deflections), 2 (lax.scan multi-plane),
3 (e2e jit simulate) and 4 (vmap batched) are now folded into that record and
removed from draft/.

RE-VERIFIED UPSTREAM RATHER THAN TRUSTING THE RECORD

Given the whole point of this sweep is that prompts lie about their own state, a
record claiming shipped is not better evidence than a prompt claiming open.
Checked all three repos:

  PyAutoLens autolens/lens/substructure_util.py defines all six named
  deliverables -- precompute_scaling_matrix, galaxies_to_halo_arrays,
  traced_grids_via_scan, simulate_substructure, los_realizations_to_arrays,
  batched_simulate_substructure
  PyAutoGalaxy has vmapped_deflections_from on the abstract mass profile
  autolens_workspace_test has all three scripts

The workspace scripts 404'd on first lookup and are NOT under misc/ -- they live
at scripts/imaging/substructure/. That is the third time in two sweeps a 404 has
been path drift rather than absence, so it is now the default assumption.

THE TWO FOLLOW-UPS ARE GENUINELY OPEN -- CONFIRMED, NOT ASSUMED

The record queued prompts 5 and 6 as deferred sub-items. Both verified still
open rather than inherited on trust:

  5_prng_key_vmap_noise -- preprocess.poisson_noise_via_data_eps_from still has
  the signature (data_eps, exposure_time_map, seed=-1, xp=np) on PyAutoArray
  main. No prng_key parameter, so the OO SimulatorImaging path still cannot be
  vmapped over a batch of noise keys.
  6_deflection_equivalence_test -- no standalone equivalence script exists;
  scripts/imaging/substructure/ holds only the three e2e/scan/batched scripts
  plus subhalo.py, and no workspace script references vmapped_deflections_from.

Both stay in draft/. The prompt-4 stretch memory-estimator remains unbuilt and
was deliberately never requested, so it is not filed.

THE ARCHIVED EPIC TRACKER WAS ACTIVELY MISLEADING

complete/archive/epics/jax_substructure_simulator.md still listed items 1-4
under "__Outstanding__ (sequenced)" with live relative links into draft/. Anyone
navigating from the epic would have read four shipped tasks as the remaining
work, and the links are now dead. Corrected in place with a pointer to the
completion record and a note that only prompts 5 and 6 are live.

METHOD NOTE

This is the strongest case yet for signal 3 in
draft/feature/pyautomind/draft_staleness_detection_signals.md -- a completion
record naming the prompt's deliverable. Here the record names the prompts
themselves, by directory, in its first clause. Any grep of record bodies for
"jax_substructure" surfaces it instantly; slug similarity does not, because
1_vmap_subhalo_deflections shares no tokens with jax-substructure-simulator.

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ 144 to 141. Dashboard regenerated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
…backlog

Sweeps 1-5 deep-graded 60 prompts against upstream. Rather than deep-grade a
sixth cluster, this pass runs the three signals those sweeps validated across
all 139 remaining drafts, so the rest of the backlog gets the cheap coverage
even where nobody reads it line by line.

SIGNAL 3 (completion-record bodies naming a draft's stem): 14 of 139 flagged,
12 already known from earlier sweeps. Two genuinely new, both benign on
inspection -- group_subhalo_sensitivity is recorded as "deferred at the user's
discretion... remains for future revival", and complete_archive_wiki is cited as
a follow-up rather than as delivered. Two false positives worth noting for
anyone automating this: z_features and jax_zero_contour collide lexically with
the retired z_features/ folder name and with generic prose, so stem matching
needs a length or specificity floor.

SIGNAL 1 (gates): a URL-only extractor found just 2 refs, both self-references
in the detection prompt filed earlier -- because prompts cite issues as
Repo#NNN, not as URLs. Broadening to that form found 8 gate-shaped refs, of
which 3 were new. All 3 gates are closed:

  PyAutoArray#431   merged 2026-08-03
  PyAutoFit#1373    closed completed 2026-07-15
  PyAutoLens#565    closed completed 2026-07-10

#1373 turned out to be a FALSE POSITIVE on reading the sentence -- it is cited
descriptively ("is tiled by jax.lax.map(..., batch_size=)"), not as a
dependency. Recorded because it is the failure mode any automated gate detector
will hit: proximity to gate words is not a gate.

FOUR PROMPTS UNBLOCKED OR RE-SCOPED

unpark_imaging_scaling_relation_slam -- its gate has TWO clauses, "until
PyAutoArray PR#431 merges AND reaches the installed stack", and both are met:
#431 merged 2026-08-03 and shipped in the 2026-08-07 PyPI release at 2026.8.7.1
(PyAutoArray 828d5c13, downstream of the merge). The park is still in place at
no_run.yaml:46, so the work is genuinely outstanding. #431's own test plan says
the unpark "can be removed in a separate workspace PR" -- this prompt is that
PR. Also recorded the trap: do NOT unpark the multi_galaxy sibling at line 48,
which hits a separate latent bug this sweep confirmed unfixed.

preloads_advanced_workspace_guide -- verified the API rather than the issue,
which mattered: the gate is "the Preloads API landing in @PyAutoArray" while the
tracking issue is in PyAutoLens. PyAutoArray __init__.py exports
AbstractPreloads, PreloadsImaging and PreloadsInterferometer. Landed.

complete_archive_wiki -- SUBSTANTIALLY SHIPPED. complete/index.md already links
952 records, is generated by lifecycle.py index with index --check gating
staleness, carries the CURATED band, and its header states this prompt's lookup
protocol almost verbatim. What is left is the editorial curation: the Highlights
band is still the empty placeholder. Re-scoped in place -- drop the build legs,
keep the curate legs.

oversampled_psf_dataset_adoption -- noted that PyAutoArray#362 closed as "series
complete", so its "after the k x s series completes" condition is met, not just
the merges it already knew about.

A NOTE ON PATH GUESSING

Guessing module paths was wrong a fourth time here (autoarray/preloads.py and
two variants all 404 while the API is exported and real). Combined with the
three script-path drifts in earlier sweeps, the rule is now explicit in the
annotations: resolve via the import surface or a clone, never by constructing a
plausible path.

lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ unchanged at 141 -- nothing retired, four annotated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
main gained the point-source-light close-out (#561) while this branch was in
flight. The only conflict was complete/index.md, which BOTH sides had
regenerated.

Resolved by regenerating rather than hand-merging, since the file is generated:
`lifecycle.py index --apply` rebuilt it from the union of records. Result is 953
= 952 from this branch + 1 from main, and both sides' entries are present
(point-source-light, oversampling-kxs-coupling, jax-substructure-simulator).

Verified on the merged tree: lifecycle check / orphans / index --check all OK,
pytest tests/ 118 passed. draft/ 140 -- one below this branch's 141 because
main's point-source-light advanced its own prompt out of draft/ independently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
@Jammy2211
Jammy2211 merged commit b9f071e into main Aug 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants