31 Aug 2026 · pm · both lanes · first human-composed batch under the review workflow

Slot Review — PM

Eleven members, human-pasted from the dashboard and dispatched 18:40Z — nine cloud dev members and two laptop/RAL science members. This review covers the nine ready members: six delivered (five PR sets green + one research verdict) and three parked at ship. The two laptop members’ overnight results are now in — the jax-refs 342091 array is complete (10/10) and both subhalo pl_eff witnesses landed clean; they still carry into the next batch’s packet for their formal ruling (they have no review chip here), but the readouts below are final except for the one rectangular chain still running. The jax-refs leg also routed three legacy-reuse rulings into this slot, included below. Choose a decision and leave a note on each member, then Submit review at the bottom — the review lands in PyAutoMind/batches/reviews/ for the orchestrator chat to enact.

Science member outputs mirror to the laptop via each project’s hpc/sync pull at collect; dev members are reviewed on their PRs.

Generated 2026-08-31 18:40Z · refreshed 2026-09-01 13:01Z (overnight harvest: the whole 342091 array landed — 10 of 10 tasks ended clean on the A100, per-task table refilled with maxLL/logZ and the knn row finally replaced by a real run; subhalo — both pl_eff delaunay chains finished inside their wall and wrote clean witnesses, 342095 rectangular chain now in subhalo[1] — earlier refreshes: 22:57Z subhalo AdaptSplit figures, 22:53Z jax-refs table, 22:00Z CI green on all three opened PRs)

Permanent home: pyautolabs.github.io/PyAutoMind/packets/2026-08-31-pm.html

14Members
6Delivered
6Rulings (3 new PRs, all green)
2Carried to next batch
130 Est. review-minutes 20 + 3 + 20 + 0 + 0 + 3 + 3 + 3 + 30 + 5 + 4 + 4 (+ carried: 15 + 20) budget uncapped this slot (human at dispatch)

First timed batch: the minutes figure is the first real calibration point the review-cost estimate gets.

Most important finding

The prodigy-49 bug as reported does not exist: a MultiStart search cannot stop at a quick-update boundary (the cadence is inert for that family). The “49” was Total Samples = 49 — a construction-time count — misread as a step count because the summary never reported the run’s real length. PR #1555 makes the summary state steps and stop reason, and pins the non-interaction with a tripwire the sibling wiring branch must flip. Merge order for the PyAutoFit trio: #1554 → #1555 → the parked wiring branch.

Rulings needed

  1. release-smoke-env — now PR #274 — CI green (3/3) — merge / amend / reject.
  2. autofit-multistart-iterations — now PR #1556 — merges last of the trio; workspace phase-2 queues either way.
  3. euclid-3a-prose — now PR #48 — merge / amend / reject, noting the adversary leg was NOT run and judgment call 1 (AGENTS.md scope).
  4. numba-vs-jax-sparse — rule on the verdict (“keep both, port nothing”); optionally /intake its two scholar-mode candidates.
  5. autofit-prodigy-49 — accept the reframed root cause (reported bug does not exist; summary misread) before merging.
  6. memory-queue-filing-gate — after merging: re-drive #71/#72 (label off/on) and #69 — the witness completes post-merge.
  7. mge-pos-ref-reuse — adopt the quarantined-but-reusable 340210_9 run as the mge_pos_fp64 InferenceRefs_v1 reference, or reject it and queue array task 9 fresh.
  8. mge-fp64-retro-baseline — does the retro-adopted mge_fp64 baseline stand under the redo standard, or does it need a fresh _ref run (for which no array task exists)?
  9. delaunay-fp64-retro-baseline — the delaunay_fp64 baseline rests on legacy_wrong (never-cite) evidence and has no array vehicle: add array task 11 now, or defer until the 342091 wave lands?

PyAutoHands · bug · supervised · parked

Release smoke ignores ENV declarations

PyAutoHands#274 (from the parked branch) · issue #272

PR green · 3/3 checks

Question this member was dispatched to answer

The run_smoke_tests job in release.yml ignores per-script ENV: declarations (witt_wynne.py’s full_datasets), so PointSolver cases run under SMALL_DATASETS and return the fixed 2-image pair.

Witness

None declared — review is the diff plus a release-smoke run honouring the declaration.

Health evidence

Branch feature/release-smoke-env-declarations (head b7df526) pushed to PyAutoHands; no PR opened — the run parked at the ship checkpoint per its supervised autonomy, with the batched question on PyAutoHands#272. Verified against GitHub at collect: branch present, open-PR list does not contain it.

Ruling

PR opened at your request: PyAutoHands#274 — CI green (3/3) — merge / amend / reject.

Where to look

PyAutoHands#272 (plan + parked checkpoint) · the branch

Your review

Est. 20 review-minutes · judge

PyAutoFit · bug · supervised · parked · phase split

MultiStartGradient searches ignore iterations_per_quick_update

PyAutoFit#1556 (from the parked branch) · issue #1552

PR green · 4/4 checks

Question this member was dispatched to answer

Wire real quick updates into the multi-start step loop (the cadence is currently inert — announced in the log, never fired), honest startup message, EXEMPT-map removal, workspace AST guard.

Witness

One fit.png per cadence boundary (perform_quick_update call-count test); EXEMPT entry removed; workspace AST guard. The workspace half was declared phase 2 by the member — library first.

Health evidence

Branch feature/multistart-quick-update-wiring (head 94a658b) pushed; no PR — parked at ship (supervised) on PyAutoFit#1552 with the plan and unit decision (count per gradient step, not per batched evaluation). Session reports 2334 tests passing. Verified at collect: branch present, no PR from it.

Readout

Interacts with #1555: that PR adds a quick_update_count == 0 inertness tripwire this wiring change must flip to a “fired” assertion. Merge order: #1554 → #1555 → this branch’s PR (rebased over both).

Ruling

Approve opening the PR (merged last of the PyAutoFit trio, rebased) / request changes on #1552 / reject. The workspace phase-2 prompt goes to the queue either way.

Where to look

PyAutoFit#1552 (plan + park) · the branch

Your review

Est. 3 review-minutes · glance

euclid_strong_lens_modeling_pipeline · docs · supervised · parked

Euclid phase 3a — narrative prose restored, start_here.py end-to-end guide

euclid#48 (from the parked branch) · issue #47

PR green · 9/9 checks

Question this member was dispatched to answer

Restore the narrative lost at 355b309: start_here.py 63-line shim → documented end-to-end guide (keeping the delegation to initial_lens_model.fit), scripts/ as chapters, drift-verified prose, plus the batch-review addendum (README structural edits, scripts/tools/ move, AGENTS.md shortening).

Health evidence

Branch feature/restore-narrative-prose pushed, no PR — parked on euclid#47. Member-reported: pytest 61 passed (fast+slow), smoke 9/9 PASS incl. the moved tools path, prose-only AST proof (string-stripped ASTs identical to main except the forced move/path fixes), all drift greps zero, no empty section headers. Caveat: the independent adversary leg was NOT run (self-review only) — by doctrine a self-run leg is an absent leg; this park IS the review, so judge accordingly.

Readout

start_here.py 0 → 24 sections (~630 prose lines); initial_lens_model __Source Pix__ filled (9 sections); full_model 10 → 26, lens_model_waveband 0 → 22, mge_lens_only 0 → 27, sersic 2 → 9, simulator +3 filled headers; 6 catalogue producers 5–9 sections each; README addendum edits done; AGENTS.md 471 → 251 lines. Three judgment calls flagged in the park comment: (1) AGENTS.md shortening treated as in scope; (2) a batch_size=50 kwarg silently swallowed by af.Nautilus — prose corrected, bug filed as draft/bug/euclid/vis_lp_batch_size_kwarg_silently_ignored.md; (3) two small doc follow-ups surfaced, not acted on.

Ruling

PR opened at your request: euclid#48 — merge / amend / reject; rule also on judgment call 1 (AGENTS.md scope). Adversary leg was not run — weight your read accordingly.

Where to look

euclid#47 (plan + park with full evidence) · the branch

Your review

Est. 30 review-minutes · judge

autolens_profiling · InferenceRefs_v1 · from jax-inference-phase1-refs

mge_pos reference — reuse the legacy row, or run it again?

340210_9 (2026-08-25) · array task 9, deliberately excluded from 342091

Ruling required

Question

Adopt the 340210_9 legacy row as the mge_pos_fp64 InferenceRefs_v1 reference? The 2026-08-31 rewind's MGE reuse rule put this run on the reusable side of the quarantine (output/legacy/, not output/legacy_wrong/), so task 9 was held back from the 342091 array rather than resubmitted. Nothing has been adopted; the row is presented for your call.

Witness — refs spec vs the row

InferenceRefs_v1 reference standard against 340210_9
Spec itemRequired340210_9Match
n_live≥ 2× fiducial (200) = 400400yes
seed00yes
config namehpc_a100_fp64_refhpc_a100_fp64_refyes
positionsononyes
thresholdautoauto (collapses to the 0.2 floor)yes
factor1e81e8yes
priors_refcurrent _targets.py_targets.py@7f2f14765de7 (= current)yes

Every line of the standard is met — this is an exact match, not a near miss. It is the only one of the three rulings on this page where that is true.

Health evidence

.completed marker present; PyAuto version stamp 2026.8.17.1; sampler_wall 939.09 s, consistent with this cell's recorded cost (17:07 elapsed job time) and well inside budget; priors_ref resolves to the current _targets.py hash, so the row is not behind a target-stack boundary. RAL copy and the laptop mirror are identical.

Readout

340210_9 — mge, positions on, tauto 0.2, factor 1e8
MetricValue
maxLL31,786.7965
logZ31,690.4174
evals96,704
Kish ESS7,586.1
sampler_wall939.09 s
target_idsha256:6b93f0e52ecd

Ruling

Accept → cite the row, mv its run dir back out of output/legacy/ into the active tree, and adopt it into results/baselines/InferenceRefs_v1/mge_pos_fp64/. Reject → queue array task 9 fresh (one more A100 task on top of the running ten).

Your review

Where to look yourself

Local mirror (run dir)
/mnt/c/Users/Jammy/Science/inference_programme/output/legacy/searches/nautilus/imaging/mge/hst/pos_tauto0.2_f1e8/hpc_a100_fp64_ref_pos_tauto0.2_f1e8/dc42087fb0524e78fd43eced7706b365/
RAL (identical)
/mnt/ral/jnightin/autolens_profiling/output/legacy/searches/nautilus/imaging/mge/hst/pos_tauto0.2_f1e8/…/dc42087fb0524e78fd43eced7706b365/
Repo artifact
autolens_profiling/results/searches/nautilus/imaging/mge/hst/hpc_hpc_a100_fp64_ref_pos_tauto0.2_f1e8.json
Ruling lands in
…/results/baselines/InferenceRefs_v1/mge_pos_fp64/ (+ INDEX.json / INDEX.md, and the SUBMIT_LIST.md row)
Dispatch record
autolens_profiling#201 · PR #202 · SUBMIT_LIST.md § “2026-08-31 — Phase 1 redo dispatch”

Est. 5 review-minutes · judge

autolens_profiling · InferenceRefs_v1 · from jax-inference-phase1-refs

mge_fp64 retro baseline — off-spec under the redo standard

results/baselines/InferenceRefs_v1/mge_fp64/

Ruling required

Question

Does the retro-adopted mge_fp64 baseline still stand once the redo standard is applied to it? It was adopted retrospectively from an existing run, not produced by the refs array, and it does not meet the standard the ten fresh rows are being held to.

Witness — where it is off-spec

Refs standard vs the adopted mge_fp64 source run
Spec itemRequiredAdopted runMatch
n_live400200no
seed0nullno
config namehpc_a100_fp64_refhpc_a100_fp64no
priors_refcurrent _targets.py_targets.py@bf2c8742c334 (STALE)no

The stale priors_ref is the load-bearing one: the baseline's target.json pins a _targets.py that is no longer the current definition, so anything scored against it is scored across a target-stack boundary.

Health evidence

The run itself is healthy and on the reusable side of the quarantine — source run mge/hst/hpc_a100_fp64/181b13114ba3c2298191185ff74f90d8, now under output/legacy/. .completed present, version 2026.8.17.1. This is a spec question, not a soundness question.

Readout

mge_fp64 adopted baseline — metadata
MetricValue
maxLL31,786.6288
logZ31,690.4965
evals62,208
sampler_wall706.50 s
version2026.8.17.1

For scale: the positions-on row above (340210_9) reaches maxLL 31,786.7965 on the same cell — the two agree to ~0.17 nats despite the n_live and seed differences.

Ruling

Keep as-is — accept the spec deviation and re-cite the baseline from legacy/, recording the deviation in the registry. Or refresh — queue a fresh mge positions-off hpc_a100_fp64_ref run, which requires adding a new array task: no vehicle for this row exists in the submit script today.

Your review

Where to look yourself

Baseline
autolens_profiling/results/baselines/InferenceRefs_v1/mge_fp64/ (reference.json + target.json + README.md)
Local mirror (source run)
/mnt/c/Users/Jammy/Science/inference_programme/output/legacy/searches/nautilus/imaging/mge/hst/hpc_a100_fp64/181b13114ba3c2298191185ff74f90d8/
Vehicle question
…/hpc/batch_gpu/submit_search_nautilus_inference_refs_v1_array.sh — the 11 tasks are 0–10; an mge positions-off ref row is not one of them
Dispatch record
autolens_profiling#201 · PR #202

Est. 4 review-minutes · judge

autolens_profiling · InferenceRefs_v1 · from jax-inference-phase1-refs

delaunay_fp64 retro baseline — rests on rejected evidence

results/baselines/InferenceRefs_v1/delaunay_fp64/

Ruling required

Question

The delaunay_fp64 baseline is off-spec and its source run was quarantined to output/legacy_wrong/ by the rewind — the never-cite side. It therefore rests on evidence the rewind has already rejected. There is no array task for a delaunay positions-off reference run, so “just re-run it” is not available without changing the submit script.

Witness — two independent problems

Refs standard vs the adopted delaunay_fp64 source run
Spec itemRequiredAdopted runMatch
n_live300 (2× this cell's fiducial)150no
seed0nullno
priors_refcurrent _targets.py_targets.py@bf2c8742c334 (STALE)no
quarantine sidelegacy/ (reusable)legacy_wrong/ (NEVER CITE)no

The last row is the one that cannot be waived by accepting a deviation: the rewind's whole point is that legacy_wrong/ evidence is not cited again.

Readout

delaunay_fp64 adopted baseline — metadata
MetricValue
maxLL30,623.1668
logZ30,562.2402
sampler_wall1,891.32 s

Task-10 footnote — what the doctrine call costs

The sibling row 340210_10 (delaunay_pos_fp64) COMPLETED and is spec-conformant — n_live 300, seed 0, priors_ref current, maxLL 31,338.9667, logZ 31,264.8427, wall 3,206.5 s. It is nevertheless doctrine-blocked, because it too sits in legacy_wrong/. A fresh run was therefore dispatched as 342091_10, spending ~53 minutes of A100 time to reproduce a row that already exists in a form that would pass every check. Recorded here so the cost of the never-cite rule is visible and can be revisited deliberately rather than by accident.

Ruling

Queue a fresh run — add array task 11 (delaunay, positions off, hpc_a100_fp64_ref, n_live 300, seed 0) and submit it alongside the wave. Or defer — leave the baseline flagged and revisit once the 342091 wave lands, when the machine is free and the delaunay cells' true cost is measured.

Your review

Where to look yourself

Baseline
autolens_profiling/results/baselines/InferenceRefs_v1/delaunay_fp64/
Local mirror (source run, never-cite side)
/mnt/c/Users/Jammy/Science/inference_programme/output/legacy_wrong/searches/nautilus/imaging/delaunay/hst/hpc_a100_fp64/
Task-10 row (also legacy_wrong)
…/output/legacy_wrong/searches/nautilus/imaging/delaunay/hst/ — 340210_10, superseded in flight by 342091_10
Vehicle question
…/hpc/batch_gpu/submit_search_nautilus_inference_refs_v1_array.sh — adding task 11 is the change a “queue it” ruling implies
Dispatch record
autolens_profiling#201 · PR #202

Est. 4 review-minutes · judge

PyAutoArray · research · verdict awaiting ruling

numba solve vs JAX sparse operator

PyAutoArray#513 · Mind ledger 7385b138

Verdict delivered

Question this member was dispatched to answer

Is the numba CPU positive-only solve the same linear algebra as the JAX sparse-operator mode — and if not, is it GPU-portable or intrinsically CPU-suited? (Also stands in for the numba-cpu-likelihood epic’s next step.)

Readout — the verdict

Same linear algebra, deliberately different machines — keep both, port nothing. Identical formulation (regularised normal equations, W = HᵀN⁻¹H); every difference is hardware-deliberate: explicit 177 MB sparse preload + branchy active-set fnnls + cross-eval warm-start memo (CPU cache/state levers) vs matrix-free FFT operator + fixed-shape PDIP with differentiable relaxed-KKT VJP (GPU/vmap/grad levers). Each transplant was already measured and failed (warm-start hurts PDIP 17→38 iters; BPP/ADMM slower/fail). Two scholar-mode intake candidates offered (a design note recording the two-modes decision; landing/retiring the ledger’s pending A100 rows).

Health evidence

Full verdict posted as a comment on PyAutoArray#513 (verified at collect); no PR by design (no library changes); Mind ledger merged. Judge tier — parks for this ruling, no decide-and-flag.

Ruling

Accept the verdict (issue closes, prompt retires) / reject with reasoning; separately: /intake either scholar-mode candidate?

Where to look

PyAutoArray#513 — the verdict comment is the deliverable.

Your review

Est. 20 review-minutes · judge

PyAutoNerves · feature · delivered

Silence the non-Colab setup_colab message on CLI runs

PyAutoNerves#157 · 3/3 checks green · mergeable clean

PR green

Question this member was dispatched to answer

Plain CLI runs should not print the “You are not running in a Google Colab environment” block; notebooks keep it.

Witness

CLI run prints nothing; notebook path still surfaces it; asserted in test_setup_colab.py. Witness test present and green in CI (context-detection via live IPython shell; silent path demoted to logger.debug).

Health evidence

PyAutoNerves#157: 3/3 checks success (unittest 3.12/3.13/nojax), mergeable clean, 169/169 tests, adversary leg reported CLEAN (independent model, report in PR conversation). Verified against GitHub at collect.

Ruling

Merge (/prm 157) / tweak / reject. notify tier — witness-covered.

Where to look

PyAutoNerves#157

Your review

Est. 0 review-minutes · notify

PyAutoMemory · bug · delivered

Repair the queue-automation filing gate

PyAutoMemory#76 · validate green · mergeable clean

PR green · decision-taken

Question this member was dispatched to answer

queue_filing.yml red on every run since 2026-08-24; queue_actions.yml lost commits on push conflict and failed silently.

Witness

Post-merge only: re-apply queue-intake to #71 → green run + filing PR. Cannot execute pre-merge (label-triggered workflows run from main) — basis-cited instead (local red/green repro of the 30 theme-import failures; live-log confirmation of the diagnosed death step).

Health evidence

PyAutoMemory#76: validate green, mergeable clean. Three fixes (missing PyAutoBrain checkout in the gate; conflict-proof rebuild-retry replacing the discarding rebase; failure reporting). Adversary found 2 real issues, both fixed in b5bc248; finding 3 (same retry shape in two sibling workflows) recorded as follow-up. decide-and-flag: opened the PR rather than park (supervised cap) — the one flagged decision.

Ruling

Merge, then re-drive #71 and #72 (label off/on) and #69 — the witness completes post-merge (checklist in the PR). Queue the finding-3 follow-up?

Where to look

PyAutoMemory#76 (post-merge checklist at the bottom)

Your review

Est. 0 review-minutes · notify

PyAutoFit · bug · delivered · merge 1st of trio

search.summary: Resampling Info section at the bottom

PyAutoFit#1554 · 4/4 checks green · mergeable clean

PR green · decision-taken

Question this member was dispatched to answer

Move the resampling diagnostics from mid-file to a closing “Resampling Info” section of search.summary.

Witness

File ends: blank line after Visualization time → subheader → six lines. Observed on a real smoke run and asserted by a new ordering test; searches without counters write byte-identical files (differential check vs main).

Health evidence

PyAutoFit#1554: 4/4 checks success, mergeable clean; 2328 passed/44 skipped; adversary CLEAN. decide-and-flag: opened the PR rather than park (bug-cap supervised).

Ruling

Merge first of the three PyAutoFit PRs (/prm 1554).

Where to look

PyAutoFit#1554

Your review

Est. 3 review-minutes · glance

PyAutoFit · bug · delivered · merge 2nd of trio

MultiStartProdigy “stops at 49 steps” — root cause reframed

PyAutoFit#1555 · 4/4 checks green · mergeable clean

PR green · reframed

Question this member was dispatched to answer

MultiStartProdigy with iterations_per_quick_update=50 reportedly terminates at 49 steps.

Readout — the bug as reported does not exist

The search cannot stop at a quick-update boundary — the cadence is inert for this family (the sibling member’s EXEMPT entry). The “49” was Total Samples = 49 (1 best + 48 per-start final points, fixed at construction) misread as a step count, while the run’s real length appeared nowhere in the summary. Fix: the summary now labels the composition and reports Total Steps and Stop Reason; a new e2e regression runs a cadence mid-budget to completion and carries a quick_update_count == 0 tripwire the sibling wiring change must flip.

Health evidence

PyAutoFit#1555: 4/4 checks success, mergeable clean; witness reproduced at the reported configuration; adversary first pass found 2 issues (vacuously-green e2e; composition label false on reload paths), both fixed, re-review CLEAN.

Ruling

Accept the reframed root cause and merge second (/prm 1555).

Where to look

PyAutoFit#1555 — the investigation is on #1553.

Your review

Est. 3 review-minutes · glance

six organ repos · feature · delivered

GitHub Page link in every organ board

5 PRs: brain#326 · heart#194 · hands#273 · memory#77 · scientist#25

All PRs green

Question this member was dispatched to answer

Add a GitHub Page link to each of the six generated organ board HTML pages (witness: link asserted in each generator’s board test).

Status

Finished 20:51Z, 5 PRs green: PyAutoBrain#326, PyAutoHeart#194, PyAutoHands#273, PyAutoMemory#77, PyAutoScientist#25. Merge/tweak/reject as one ruling — six repos, one witness.

Your review

Est. 3 review-minutes · glance

subhalo_validation · research · LOCAL-DEV

Subhalo follow-up wave — adapt_split fix + RectangularBilinear

draft/research/subhalo_validation/follow_up_wave_adapt_split_and_rectangular.md

REFRESHED 14:00 BST — both pl_eff witnesses landed CLEAN · rectangular chain still running · carried

Question this member was dispatched to answer

Three, from the AM review’s accepted follow-up:

  1. The one that matters. Does AdaptSplit at source_pix[1] keep the compact outer source component that ConstantSplit appeared to smooth away, on pl_eff_1_outer? Nothing downstream moves until this is judged — it decides whether pl_eff_1_outer gets a full rerun and whether the default recipe’s source_pix[1] regularization changes.
  2. Does the rectangular_adapt recipe run end-to-end on pl_sersic_0 (the mesh/regularization comparison column)?
  3. Do the two pl_eff delaunay chains produce clean witnesses — which would unblock the parked second rectangular_adapt submission?

Witness

Validation witness — evidence_increase in results/<pipeline>/<lens>_no_subhalo.json. The data contains no subhalo, so a clean null is < 5; anything at or above 5 would conventionally read as a detection and would be a false positive.

AdaptSplit witness — the rerun’s source_pix[1]/model.info must actually read AdaptSplit (N=3) (not the baseline’s ConstantSplit (N=1)), and its Bayesian evidence is then compared like-for-like against the baseline stage: same lens, same 600-pixel Delaunay mesh, same areas_factor 0.5, same 10 free parameters, same dataset. Only the regularization differs.

Health evidence — read 2026-09-01 13:55–13:58 BST

Batch .out logs on this project are block-buffered and flush on exit, so none of the states below come from a log tail: they come from sacct, from each job’s own closing lines after exit, from the witness JSONs, and from a live checkpoint.hdf5 mtime.

  • 342027_1 (pl_eff_0) — COMPLETED 0:0 in 1-21:10:24, ended 2026-09-01 00:04:55 BST, about 2 h 50 m inside the 2-day wall. Its log closes Search complete, returning result → Evidence Increase: -0.24247446289882646 → Results written to: …/pl_eff_0_no_subhalo.json → Finished sample: pl_eff_0. error.342027_1.err is 0 bytes.
  • 342027_2 (pl_eff_1_outer) — COMPLETED 0:0 in 1-23:05:05, ended 01:59:36 BST — 55 minutes short of the 2-day wall. Same closing sequence, Evidence Increase: 2.7360672678223636, witness written, error.342027_2.err 0 bytes.
  • The wall-clock flag raised at 22:57Z did not materialise. Both chains wrote their witness JSONs; no chain was cut off, nothing needs a resume-from-checkpoint resubmit.
  • 342095_0 — still RUNNING (14:03:13 elapsed of 2-00:00:00 at the read) on euclid-ral-compute-10-2. It is past all five pixelized stages and now inside subhalo[1]_[search_lens_plane]: two of the grid cells are finished and zipped, a third started at 10:52 BST, and its checkpoint.hdf5 (22.5 MB) carries a 13:57 BST mtime — current at the moment of reading. Sampling, not hung. error.342095_0.err is 0 bytes.
  • 342093_0 / 342094_0 — unchanged since the 22:57Z refresh; both COMPLETED 0:0 with their evidence as recorded below.

One log-level flag, benign but repeated: 342095’s log emits latent.yaml lists 'total_galaxy_0_flux' but no such latent is registered; dropping on every update. It costs nothing in this run — the other eight latents register — but the recipe’s latent.yaml is asking for a latent that does not exist.

Readout — the three actions, RAL states read 2026-09-01 13:55 BST

Jobs dispatched by this member (sacct state is not health evidence; the right-hand column is)
JobWhat it runssacct stateElapsed / wallEvidence
342093_0pl_eff_1_outer source_pix[1] under AdaptSplit — recipe delaunay_adapt_split_fix, --stop_after source_pix_1COMPLETED 0:001:16:49 / 08:00:00.completed · 33,180 samples · acceptance 1.0 · model.info reads AdaptSplit (N=3) · all figures written
342094_0pl_sersic_0 / rectangular_adapt job A — source_lp[1], JAX, 4 coresCOMPLETED 0:001:44:40 / 12:00:00ended 2026-08-31 23:52:17 BST; log closes Finished sample: pl_sersic_0
342095_0pl_sersic_0 / rectangular_adapt job B — the rest of the chain, 8 cores 96 gb, afterok:342094RUNNING14:03:13 / 2-00:00:00five stages done and zipped; inside subhalo[1] grid (2 of 4 cells zipped, 3rd started 10:52 BST); checkpoint 22.5 MB mtime 13:57 BST
342027_1pl_eff_0 — original delaunay chain, through subhalo[2]_[single_plane_refine]COMPLETED 0:01-21:10:24 / 2-00:00:00ended 00:04:55 BST; witness pl_eff_0_no_subhalo.json written; .err empty
342027_2pl_eff_1_outer — original delaunay chain, through subhalo[2]COMPLETED 0:01-23:05:05 / 2-00:00:00ended 01:59:36 BST, 55 min short of wall; witness pl_eff_1_outer_no_subhalo.json written; .err empty

Readout — witness JSONs on the mirror after this hpc/sync pull

results/ after the pull — three witnesses now, two of them new overnight; a clean null is evidence_increase < 5
Witness fileevidence_increaselog_likelihood_increasesubhalo M200 / centreVerdict
delaunay_adapt_split/pl_sersic_0_no_subhalo.json−0.3009+0.96681.49e9 · (2.146, −0.241)CLEAN — already accepted 2026-08-31, not re-litigated here
delaunay_adapt_split/pl_eff_0_no_subhalo.json−0.2425+0.60931.21e8 · (−1.302, −2.513)CLEAN — new, written 00:04:55 BST by 342027_1
delaunay_adapt_split/pl_eff_1_outer_no_subhalo.json+2.7361+15.37168.20e8 · (1.412, 1.419)CLEAN (< 5) — new, written 01:59:36 BST by 342027_2; the largest of the three and the one to read carefully
rectangular_adapt/pl_sersic_0_no_subhalo.json———not written yet — 342095_0 is inside subhalo[1]

All three witnesses are nulls, as the data demands — no false positive anywhere in the delaunay column. Read pl_eff_1_outer with its two numbers together: the subhalo model buys +15.37 in maximum log likelihood but only +2.74 in evidence, i.e. the extra parameters very nearly pay for themselves at an 8.2e8 M⊙ perturber sitting 2.0″ from centre. It is comfortably under the conventional 5, but it is the one row where the null is not emphatic.

Note, as before, that none of the three JSONs carries the subhalo_stage key — all three chains predate it, so every number above is subhalo[2]/refine-derived and is not directly comparable with a post-key run. The 342093_0 rerun writes no witness by design (--stop_after source_pix_1).

Readout — does rectangular_adapt run end-to-end? (question 2)

On the evidence so far, yes through the pixelized stages: 342094+342095 have carried pl_sersic_0 through light[1], mass_total[1], source_lp[1], source_pix[1] and source_pix[2] — all five present and zipped on the mirror — and the run is now inside the subhalo[1] lens-plane grid. source_pix[2]/model.info reads RectangularBilinearAdaptImage (N=2) with Adapt (N=3) regularization, which is the recipe under test.

source_pix[2] on pl_sersic_0, the mesh comparison column — indicative only, not like-for-like (different mesh size and free-parameter count)
Quantitydelaunay_adapt_splitrectangular_adaptDifference
Mesh / regularizationDelaunay, 1,310 px · AdaptSplit (N=3)RectangularBilinearAdaptImage 32×32 = 1,024 px · Adapt (N=3)different mesh and pixel count
Free parameters35+2
Bayesian evidence21,386.82321,418.501+31.678
Maximum log likelihood21,399.31121,435.853+36.542
Samples / runtime2,060 · 0:07:473,140 · 0:10:07+52% samples, +30% wall

The rectangular column is ahead at this stage, but the two stages differ in more than the mesh, so this is a progress readout rather than a mesh verdict — the comparable number is the witness, which lands when 342095 finishes its grid and refine (about a day of wall left).

Readout — 342093, AdaptSplit at source_pix[1] (the thing to look at)

Like-for-like: same lens, same 600-pixel Delaunay mesh, same 10 free parameters, same dataset — only the regularization differs
QuantityBEFORE — baseline source_pix[1]AFTER — 342093 rerunChange
RegularizationConstantSplit (N=1)AdaptSplit (N=3)the fix, confirmed in model.info
Bayesian evidence18,312.47319,390.673+1,078.200
Maximum log likelihood18,377.14219,462.741+1,085.599
Regularization coefficientscoefficient 1.321 (flat everywhere)inner 1.0e−4 · outer 79.76 (3σ 44.3–113.6) · signal_scale 0.0164flat → spatially varying, 0.02 at the core to 23.19 in the outskirts
Einstein radius1.9261.9245 (3σ 1.9242–1.9247)unmoved
Chi-squared map max54.6963.20+8.5 — see the residual caveat
Samples / runtime22,580 · 0:43:0733,180 · 1:14:43+47% samples, +73% wall
Source-plane regularization map, ConstantSplit versus AdaptSplit
The mechanism, in one panel. BEFORE: a single flat coefficient 1.32 over the whole source plane. AFTER: AdaptSplit drops the coefficient to 0.02 on the bright source core (dark blue) and raises it to 23.19 in the empty outskirts (red) — it stops smoothing where there is signal and smooths hard where there is none. This is what the +1,078 nats of evidence buys.
Source-plane reconstruction, maximum zoom, ConstantSplit versus AdaptSplit
Source Plane (Zoom), same colour scale (0 – ~6.05 e⁻ s⁻¹). The compact source is not smoothed away by AdaptSplit — the bright core survives and the secondary knot up and to the left of it is rendered as a distinct, higher-contrast feature rather than the softer shoulder ConstantSplit gives it.
Source-plane reconstruction, mid zoom with tangential caustic, ConstantSplit versus AdaptSplit
Source Plane (Mid Zoom) with the tangential caustic drawn in white — the panel that answers the question. Under AdaptSplit the emission separates into a bright peak inside the caustic plus a resolved knot straddling and extending past its upper-left edge; under ConstantSplit that same region is one smoother blob with a low-contrast extension. Whether that knot is the seventh (outer) component of the ElsonFreeFall source or internal structure of the main clump is the judgement being asked for — the truth positions are in dataset/pl_eff_1_outer/no_subhalo/positions_outer.json.
Normalized residual map, ConstantSplit versus AdaptSplit
The honest caveat. Coherent arc-shaped residuals along the ring persist in both fits at comparable amplitude (colour range ±7.40 before, ±7.95 after; chi-squared max 54.69 → 63.20). The +1,078 nats therefore come from the adaptive smoothing prior fitting the source better, not from the ring residual structure being resolved away. If those arcs are the reason for suspecting the outer component was lost, AdaptSplit has not removed them.

Decision waiting on you — “submit rectangular for which pl_eff?”

The gate has opened overnight, and nothing was done about it. The parked second rectangular_adapt submission was gated on a clean evidence_increase < 5 witness from 342027_1 (pl_eff_0) or 342027_2 (pl_eff_1_outer). Both witnesses now exist and both are clean (−0.24 and +2.74). The choice of which pl_eff to submit is therefore live — and it is yours.

The command recorded in the project’s wiki/project/state.md is PIPELINE=rectangular_adapt ARRAY=<1|2> bash hpc/run_chain.sh (ARRAY: 0 pl_sersic_0, 1 pl_eff_0, 2 pl_eff_1_outer). It has not been run. This refresh is read-and-record only: no RAL job was submitted, cancelled or modified, and the parked submission stays PARKED until you rule. Worth weighing when you do: the one CPU chain already running (342095) still has about a day of wall to go on the same node.

Carried automatically, as before: this member stays in flight (one job running) and enters the next batch’s packet without re-specification. The 342093 AdaptSplit readout and both pl_eff witnesses are, however, complete and can be judged now.

Follow-ups this refresh proposes

  • [subhalo_validation] The wall-clock risk closed itself — both 342027 chains finished inside the 2-day wall (the tighter one by 55 minutes) and wrote their witnesses, so no resume-from-checkpoint resubmit is needed. The margin was thin enough to be worth remembering when sizing the next delaunay chain.
  • [subhalo_validation] Both pl_eff witnesses predate the subhalo_stage JSON key, so their numbers are refine-derived and not directly comparable with post-key runs. Decide whether the three delaunay witnesses get re-stamped or are simply annotated in the ledger.
  • [subhalo_validation] pl_eff_1_outer’s +15.37 log-likelihood increase against a +2.74 evidence increase is the least emphatic null in the set — worth a look at where its 8.2e8 M⊙ candidate sits relative to the arc before the recipe is called settled.
  • [subhalo_validation] latent.yaml lists total_galaxy_0_flux, which is not a registered latent; every update logs a drop warning. Harmless, but it should either be registered or removed.
  • [subhalo_validation] If the AdaptSplit reconstruction is accepted, the open question is whether source_pix[1]’s regularization changes in the default delaunay_adapt_split recipe, or stays a _fix variant — and whether pl_eff_1_outer earns a full rerun on it.
  • [subhalo_validation] The persisting coherent ring residuals in both fits are unexplained by the regularization change and may deserve their own look (mass model? PSF? over-sampling at pix[1]?).

Where to look yourself

Project root (laptop mirror)
/mnt/c/Users/Jammy/Science/subhalo_validation/ — source activate.sh first; hpc/sync jobs / hpc/sync pull drive RAL.
The two new witnesses
results/delaunay_adapt_split/pl_eff_0_no_subhalo.json and results/delaunay_adapt_split/pl_eff_1_outer_no_subhalo.json — both pulled to the mirror by this refresh, alongside the pl_sersic_0 witness accepted yesterday.
Their chains, end to end
hpc/batch_cpu/output/output.342027_1.out (5.2 MB) and output.342027_2.out (5.7 MB) on the mirror — the last dozen lines carry the evidence-increase block and Finished sample:. Run directories under output/subhalo/detect/delaunay_adapt_split/pl_eff_0_no_subhalo/ and …/pl_eff_1_outer_no_subhalo/.
The AdaptSplit rerun, in full
output/subhalo/detect/delaunay_adapt_split/pl_eff_1_outer_no_subhalo_adapt_split_fix/source_pix[1]/085f85ba6970436a1b8b115b6c9b3fbf/ — model.info (reads AdaptSplit), model.results (evidence 19,390.673), search.summary, and image/fit.png + image/inversion_0_0.png at full resolution.
The ConstantSplit baseline it is compared against
output/subhalo/detect/delaunay_adapt_split/pl_eff_1_outer_no_subhalo/source_pix[1]/27660ebc6b9f9ef5e4c48d393a628efd.zip — on RAL the stage is zipped; the mirror holds only its files/galaxy_images_snr.fits, so unzip the archive (or re-pull) to open the baseline’s own fit.png.
The rectangular chain in flight
output/subhalo/detect/rectangular_adapt/pl_sersic_0_no_subhalo/ — five zipped stages plus subhalo[1]_[search_lens_plane]/…/results.csv, which fills in one row per finished grid cell. source_pix[2]/…/model.info is where the RectangularBilinearAdaptImage mesh is confirmed.
The four figures above, at higher resolution
results/figures/adapt_split_fix_regularization_before_after.jpg, ..._source_plane_before_after.jpg, ..._source_plane_midzoom_before_after.jpg, ..._residuals_before_after.jpg (1000 px wide, committed to the project).
Live job state
hpc/sync jobs, or ssh euclid_jump then sacct -j 342027,342093,342094,342095. Do not read the batch .out logs for progress — they are block-buffered and flush only on exit.
Project ledgers
wiki/project/state.md (head pointer) and wiki/project/2026-08-31-adapt-split-fix-and-rectangular.md (yesterday’s journal entry).

Est. 15 review-minutes · judge

autolens_profiling · epic-slice · LOCAL-DEV

JAX inference Phase 1 redo — InferenceRefs_v1 baselines

PROGRAMME.md rewind restart · queue anchor autolens_profiling#200

WAVE COMPLETE — 10/10 tasks delivered clean · carried for ruling

Question this member was dispatched to answer

Certify the InferenceRefs_v1 rows: legacy-MGE reuse rulings first (surfaced as packet members), fresh RAL submissions for missing/rejected rows (incl. re-queued refs 5/6/7). Phase 2 stays queued behind these baselines.

Status — RAL job 342091, read 2026-09-01 12:55Z

Dispatched from the laptop 21:08Z: RAL job 342091 (sbatch --array=0-8,10 --requeue), config hpc_a100_fp64_ref, A100 80 GB, n_live 300 (2× fiducial), 6:00:00 wall per task. The array ran one task at a time on the single GPU and all ten finished overnight: first task started 2026-08-31 22:00:39 BST, last ended 2026-09-01 08:08:54 BST — 10 h 08 m of continuous GPU, every task COMPLETED 0:0 on euclid-ral-gpu-2, no requeue, no preemption, the queue now empty for this project. Task 9 (mge_pos) was held back under the MGE reuse rule — its ruling and the two retro-baseline rulings are the three members above. Recorded on autolens_profiling#201 with docs-only PR #202. Refreshed here by hpc/sync pull to /mnt/c/Users/Jammy/Science/inference_programme/.

Health evidence — classified from artefacts, not from sacct

Every one of the ten tasks clears all five checks, so the classification below is evidence-based rather than an ExitCode 0:0 reading:

  • Wall plausible — 00:36:21 to 01:24:16, i.e. 10–23% of the 6 h budget. Nothing near the wall, nothing suspiciously instant.
  • Result row written — ten result JSONs under results/searches/nautilus/imaging/…/hst/, each stamping version 2026.8.17.1, each with a target_id matching its intended cell.
  • .err clean — all ten error files are 222 bytes and contain only the mask_2d_util.py:564 UserWarning: Mask padded from (141, 141) to (159, 159). No Traceback in any error or output log.
  • Ended properly — every .out closes with the timing block, the results-JSON path, Finished. and a timestamp; ten .completed markers, one per run directory.
  • No resume, no overflow — Fit Already Completed appears zero times across all ten logs (every search started cold), and no log_l anywhere resembles the pre-fix 3e+303 signature. The only hit from an inf|nan|e+30 sweep is the literal string model.info.

Witness — per-task readout, all ten rows final

342091 array tasks — truth log likelihood for this dataset is 31,521.744; Δ is maxLL minus truth
TaskTargetsacct stateElapsedDelivered checksmaxLL / logZΔ vs truthFlags
0pixelization, pos offCOMPLETED 0:000:36:21.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 2,093.03 s (10% of 6 h)29,835.4509
29,778.0569
−1,686.29none — finite, ~3e4
1delaunay_nn, pos offCOMPLETED 0:000:52:55.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,110.97 s (14%)30,650.8283
30,591.1280
−870.92none
2delaunay_nn, pos on (fixed 0.3, f 1e8)COMPLETED 0:000:53:03.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,113.59 s (14%)31,351.3909
31,275.2300
−170.35positions arm confirmed: 4 truth-derived points, threshold fixed 0.300000, factor 1e+08
3slam_source_pix, pos offCOMPLETED 0:001:13:34.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 4,336.11 s (20%)31,026.6354
30,951.7885
−495.11none
4slam_source_pix, pos on (auto)COMPLETED 0:001:07:56.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,982.84 s (18%)31,547.2396
31,452.0997
+25.50the only row above the truth likelihood
5slam_source_pix_nn, pos offCOMPLETED 0:001:24:16.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 4,986.87 s (23%) — longest task30,750.9893
30,684.1146
−770.75target sha256:ad291b57fc62 — the corrected AdaptSplitPower target, as intended
6slam_source_pix_nn, pos on (auto)COMPLETED 0:001:13:18.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 4,330.27 s (20%)31,405.6282
31,324.8382
−116.12target sha256:8021b4b697ff — the cell that had never previously been submitted
7knn, pos offCOMPLETED 0:000:58:02.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,415.75 s (16%)30,062.6117
29,995.6676
−1,459.13the stale row is gone — see below
8delaunay_matern, pos offCOMPLETED 0:000:55:13.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,246.46 s (15%)30,675.9711
30,615.1603
−845.77none
10delaunay, pos on (auto)COMPLETED 0:000:53:29.err clean (mask-padding UserWarning only) · Finished. printed · .completed present · version 2026.8.17.1 · no Fit Already Completed · sampler wall 3,141.26 s (15%)31,338.4344
31,264.8345
−183.31none
9mge, pos on (auto)not submitted—deliberately excluded from the array under the MGE legacy-reuse ruling — see mge-pos-ref-reuse above

The knn row is now a real run. At the 22:53Z refresh the mirror’s knn/hst/hpc_hpc_a100_fp64_ref.json still read the pre-fix 30,077.028 — a git stash artefact, not a result. Task 7 has now replaced it with a genuine 342091 row at 30,062.612 (logZ 29,995.668), which is 14.4 nats lower still and sits ~494 nats below the Prodigy arm bar 30,557.03. The stale-row explanation is therefore closed, and the knn cell’s underperformance is real rather than an artefact — a result for the programme to absorb, not a defect in this wave.

Shape of the wave, offered as observation only. The four positions-on arms (tasks 2, 4, 6, 10) all land within 25–183 nats of truth, with task 4 (slam_source_pix, auto threshold) the only row above it at +25.50. The positions-off pixelized rows sit 495–1,686 nats below truth, pixelization lowest. Each pos-on log carries the arm banner — POSITIONS ARM (target_class 3), Idealised: truth-derived positions, not re-solved from a completed search, PositionsLH ACTIVE — so the arms are idealised by construction and the gap to the pos-off rows should be read with that in mind.

Relevant to a ruling already on this page, stated as fact and nothing more: the delaunay-fp64 retro-baseline question was framed as “add array task 11 now, or defer until the 342091 wave lands?”. The wave has landed and the GPU queue for this project is empty.

Where to look yourself

Local checkout
/home/jammy/Code/PyAutoLabs/autolens_profiling — hpc/sync jobs / hpc/sync pull drive RAL; hpc/sync.conf points pulls at the mirror below rather than at the checkout.
Laptop mirror (everything pulled by this refresh)
/mnt/c/Users/Jammy/Science/inference_programme/ — results/searches/nautilus/imaging/<cell>/hst/hpc_hpc_a100_fp64_ref*.json for the ten rows, logs/output/output.342091_<task>.out and logs/error/error.342091_<task>.err for the logs, output/searches/… for the run directories and their .completed markers.
The two rows worth opening first
knn/hst/hpc_hpc_a100_fp64_ref.json (the replaced row) and slam_source_pix/hst/hpc_hpc_a100_fp64_ref_pos_tauto0.2_f1e8.json (the one above truth).
Live job state
ssh euclid_jump then sacct -j 342091 --format=JobID,State,ExitCode,Elapsed,Start,End; squeue -u jnightin now shows nothing for this project.
Programme record
autolens_profiling#201 (queue anchor #200) and docs-only PR #202.

No ruling chip on this page

This member carried into the slot without a review control and keeps it that way — under carry-forward it is formally ruled in the next batch. What has changed is that there is nothing left to wait for: the wave is complete, all ten rows are certified-clean by the checks above, and the readout can be judged whenever you want to. The three legacy-reuse rulings it routed into this slot (mge-pos-ref-reuse, mge-fp64-retro-baseline, delaunay-fp64-retro-baseline) do carry their own chips and are yours to rule now.

Follow-ups this refresh proposes

  • [autolens_profiling] Fold the ten certified rows into the InferenceRefs_v1 table and close out #201; the knn row now needs a note that its low value is a measured result, not the old stash artefact.
  • [autolens_profiling] Phase 2 was queued behind these baselines (ordered phases). With Phase 1 complete, it is dispatchable at the next slot.
  • [autolens_profiling] The wave used 10 h of a single A100 for 10 tasks at 10–23% of a 6 h wall each — the per-task wall can be cut substantially, which matters if Phase 2 queues a wider array.

Est. 20 review-minutes · judge

Packet-building notes

Carry-forward adopted mid-slot at the human's direction: unfinished long-running members are reviewed in the batch where their results land, entering the next packet automatically; this packet's review therefore counts 9 members, not 11.

Written at dispatch (18:40Z), all members PENDING per the evening-dispatch flow; the collect regenerates member sections in place and bumps the refreshed stamp. Deviation from TEMPLATE.md: pending members carry their review controls already, so early notes persist through the refresh. Composition was human-pasted (the planner proposal was not used); constraint report and expected-effects live in batches/2026-08-31-pm.md. Heart YELLOW acknowledged in-chat at dispatch (manifest drift + web-container CI blindness). Epic resolutions at plan time: numba-cpu → deduped into the numba-vs-jax-sparse member; jax-inference → Phase 1 only, Phase 2 queued (ordered phases); euclid → phase 3a with the start_here.py ruling already resolved by the human (Mind 32c639e5).

Ruled 0 of 12 · decisions 0 of 12