PyAutoHands · bug · supervised · parked
Release smoke ignores ENV declarations
PyAutoHands#274 (from the parked branch) · issue #272
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
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
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
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
| Spec item | Required | 340210_9 | Match |
|---|---|---|---|
| n_live | ≥ 2× fiducial (200) = 400 | 400 | yes |
| seed | 0 | 0 | yes |
| config name | hpc_a100_fp64_ref | hpc_a100_fp64_ref | yes |
| positions | on | on | yes |
| threshold | auto | auto (collapses to the 0.2 floor) | yes |
| factor | 1e8 | 1e8 | yes |
| priors_ref | current _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
| Metric | Value |
|---|---|
| maxLL | 31,786.7965 |
| logZ | 31,690.4174 |
| evals | 96,704 |
| Kish ESS | 7,586.1 |
| sampler_wall | 939.09 s |
| target_id | sha256: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/
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
| Spec item | Required | Adopted run | Match |
|---|---|---|---|
| n_live | 400 | 200 | no |
| seed | 0 | null | no |
| config name | hpc_a100_fp64_ref | hpc_a100_fp64 | no |
| priors_ref | current _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
| Metric | Value |
|---|---|
| maxLL | 31,786.6288 |
| logZ | 31,690.4965 |
| evals | 62,208 |
| sampler_wall | 706.50 s |
| version | 2026.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/
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
| Spec item | Required | Adopted run | Match |
|---|---|---|---|
| n_live | 300 (2× this cell's fiducial) | 150 | no |
| seed | 0 | null | no |
| priors_ref | current _targets.py | _targets.py@bf2c8742c334 (STALE) | no |
| quarantine side | legacy/ (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
| Metric | Value |
|---|---|
| maxLL | 30,623.1668 |
| logZ | 30,562.2402 |
| sampler_wall | 1,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
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
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
Your review
Est. 0 review-minutes · notify
PyAutoMemory · bug · delivered
Repair the queue-automation filing gate
PyAutoMemory#76 · validate green · mergeable clean
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
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
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
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
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
Question this member was dispatched to answer
Three, from the AM review’s accepted follow-up:
- The one that matters. Does
AdaptSplitatsource_pix[1]keep the compact outer source component thatConstantSplitappeared to smooth away, onpl_eff_1_outer? Nothing downstream moves until this is judged — it decides whetherpl_eff_1_outergets a full rerun and whether the default recipe’ssource_pix[1]regularization changes. - Does the
rectangular_adaptrecipe run end-to-end onpl_sersic_0(the mesh/regularization comparison column)? - Do the two
pl_effdelaunay chains produce clean witnesses — which would unblock the parked secondrectangular_adaptsubmission?
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 in1-21:10:24, ended 2026-09-01 00:04:55 BST, about 2 h 50 m inside the 2-day wall. Its log closesSearch complete, returning result→Evidence Increase: -0.24247446289882646→Results written to: …/pl_eff_0_no_subhalo.json→Finished sample: pl_eff_0.error.342027_1.erris 0 bytes.342027_2(pl_eff_1_outer) — COMPLETED 0:0 in1-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.err0 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:13elapsed of2-00:00:00at the read) oneuclid-ral-compute-10-2. It is past all five pixelized stages and now insidesubhalo[1]_[search_lens_plane]: two of the grid cells are finished and zipped, a third started at 10:52 BST, and itscheckpoint.hdf5(22.5 MB) carries a 13:57 BST mtime — current at the moment of reading. Sampling, not hung.error.342095_0.erris 0 bytes.342093_0/342094_0— unchanged since the 22:57Z refresh; bothCOMPLETED 0:0with 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
| Job | What it runs | sacct state | Elapsed / wall | Evidence |
|---|---|---|---|---|
| 342093_0 | pl_eff_1_outer source_pix[1] under AdaptSplit — recipe delaunay_adapt_split_fix, --stop_after source_pix_1 | COMPLETED 0:0 | 01:16:49 / 08:00:00 | .completed · 33,180 samples · acceptance 1.0 · model.info reads AdaptSplit (N=3) · all figures written |
| 342094_0 | pl_sersic_0 / rectangular_adapt job A — source_lp[1], JAX, 4 cores | COMPLETED 0:0 | 01:44:40 / 12:00:00 | ended 2026-08-31 23:52:17 BST; log closes Finished sample: pl_sersic_0 |
| 342095_0 | pl_sersic_0 / rectangular_adapt job B — the rest of the chain, 8 cores 96 gb, afterok:342094 | RUNNING | 14:03:13 / 2-00:00:00 | five 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_1 | pl_eff_0 — original delaunay chain, through subhalo[2]_[single_plane_refine] | COMPLETED 0:0 | 1-21:10:24 / 2-00:00:00 | ended 00:04:55 BST; witness pl_eff_0_no_subhalo.json written; .err empty |
| 342027_2 | pl_eff_1_outer — original delaunay chain, through subhalo[2] | COMPLETED 0:0 | 1-23:05:05 / 2-00:00:00 | ended 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
| Witness file | evidence_increase | log_likelihood_increase | subhalo M200 / centre | Verdict |
|---|---|---|---|---|
| delaunay_adapt_split/pl_sersic_0_no_subhalo.json | −0.3009 | +0.9668 | 1.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.6093 | 1.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.3716 | 8.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.
| Quantity | delaunay_adapt_split | rectangular_adapt | Difference |
|---|---|---|---|
| Mesh / regularization | Delaunay, 1,310 px · AdaptSplit (N=3) | RectangularBilinearAdaptImage 32×32 = 1,024 px · Adapt (N=3) | different mesh and pixel count |
| Free parameters | 3 | 5 | +2 |
| Bayesian evidence | 21,386.823 | 21,418.501 | +31.678 |
| Maximum log likelihood | 21,399.311 | 21,435.853 | +36.542 |
| Samples / runtime | 2,060 · 0:07:47 | 3,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)
| Quantity | BEFORE — baseline source_pix[1] | AFTER — 342093 rerun | Change |
|---|---|---|---|
| Regularization | ConstantSplit (N=1) | AdaptSplit (N=3) | the fix, confirmed in model.info |
| Bayesian evidence | 18,312.473 | 19,390.673 | +1,078.200 |
| Maximum log likelihood | 18,377.142 | 19,462.741 | +1,085.599 |
| Regularization coefficients | coefficient 1.321 (flat everywhere) | inner 1.0e−4 · outer 79.76 (3σ 44.3–113.6) · signal_scale 0.0164 | flat → spatially varying, 0.02 at the core to 23.19 in the outskirts |
| Einstein radius | 1.926 | 1.9245 (3σ 1.9242–1.9247) | unmoved |
| Chi-squared map max | 54.69 | 63.20 | +8.5 — see the residual caveat |
| Samples / runtime | 22,580 · 0:43:07 | 33,180 · 1:14:43 | +47% samples, +73% wall |
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.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
342027chains 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_effwitnesses predate thesubhalo_stageJSON 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.yamlliststotal_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 defaultdelaunay_adapt_splitrecipe, or stays a_fixvariant — and whetherpl_eff_1_outerearns 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.shfirst;hpc/sync jobs/hpc/sync pulldrive RAL.- The two new witnesses
results/delaunay_adapt_split/pl_eff_0_no_subhalo.jsonandresults/delaunay_adapt_split/pl_eff_1_outer_no_subhalo.json— both pulled to the mirror by this refresh, alongside thepl_sersic_0witness accepted yesterday.- Their chains, end to end
hpc/batch_cpu/output/output.342027_1.out(5.2 MB) andoutput.342027_2.out(5.7 MB) on the mirror — the last dozen lines carry the evidence-increase block andFinished sample:. Run directories underoutput/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(readsAdaptSplit),model.results(evidence 19,390.673),search.summary, andimage/fit.png+image/inversion_0_0.pngat 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 itsfiles/galaxy_images_snr.fits, so unzip the archive (or re-pull) to open the baseline’s ownfit.png.- The rectangular chain in flight
output/subhalo/detect/rectangular_adapt/pl_sersic_0_no_subhalo/— five zipped stages plussubhalo[1]_[search_lens_plane]/…/results.csv, which fills in one row per finished grid cell.source_pix[2]/…/model.infois where theRectangularBilinearAdaptImagemesh 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, orssh euclid_jumpthensacct -j 342027,342093,342094,342095. Do not read the batch.outlogs for progress — they are block-buffered and flush only on exit.- Project ledgers
wiki/project/state.md(head pointer) andwiki/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
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 version2026.8.17.1, each with atarget_idmatching its intended cell. .errclean — all ten error files are 222 bytes and contain only themask_2d_util.py:564 UserWarning: Mask padded from (141, 141) to (159, 159). NoTracebackin any error or output log.- Ended properly — every
.outcloses with the timing block, the results-JSON path,Finished.and a timestamp; ten.completedmarkers, one per run directory. - No resume, no overflow —
Fit Already Completedappears zero times across all ten logs (every search started cold), and nolog_lanywhere resembles the pre-fix3e+303signature. The only hit from aninf|nan|e+30sweep is the literal stringmodel.info.
Witness — per-task readout, all ten rows final
| Task | Target | sacct state | Elapsed | Delivered checks | maxLL / logZ | Δ vs truth | Flags |
|---|---|---|---|---|---|---|---|
| 0 | pixelization, pos off | COMPLETED 0:0 | 00: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.29 | none — finite, ~3e4 |
| 1 | delaunay_nn, pos off | COMPLETED 0:0 | 00: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.92 | none |
| 2 | delaunay_nn, pos on (fixed 0.3, f 1e8) | COMPLETED 0:0 | 00: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.35 | positions arm confirmed: 4 truth-derived points, threshold fixed 0.300000, factor 1e+08 |
| 3 | slam_source_pix, pos off | COMPLETED 0:0 | 01: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.11 | none |
| 4 | slam_source_pix, pos on (auto) | COMPLETED 0:0 | 01: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.50 | the only row above the truth likelihood |
| 5 | slam_source_pix_nn, pos off | COMPLETED 0:0 | 01: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 task | 30,750.9893 30,684.1146 | −770.75 | target sha256:ad291b57fc62 — the corrected AdaptSplitPower target, as intended |
| 6 | slam_source_pix_nn, pos on (auto) | COMPLETED 0:0 | 01: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.12 | target sha256:8021b4b697ff — the cell that had never previously been submitted |
| 7 | knn, pos off | COMPLETED 0:0 | 00: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.13 | the stale row is gone — see below |
| 8 | delaunay_matern, pos off | COMPLETED 0:0 | 00: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.77 | none |
| 10 | delaunay, pos on (auto) | COMPLETED 0:0 | 00: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.31 | none |
| 9 | mge, 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 pulldrive RAL;hpc/sync.confpoints 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*.jsonfor the ten rows,logs/output/output.342091_<task>.outandlogs/error/error.342091_<task>.errfor the logs,output/searches/…for the run directories and their.completedmarkers.- The two rows worth opening first
knn/hst/hpc_hpc_a100_fp64_ref.json(the replaced row) andslam_source_pix/hst/hpc_hpc_a100_fp64_ref_pos_tauto0.2_f1e8.json(the one above truth).- Live job state
ssh euclid_jumpthensacct -j 342091 --format=JobID,State,ExitCode,Elapsed,Start,End;squeue -u jnightinnow 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
knnrow 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).
Submit review
Copy always works — paste it into the orchestrator chat, or commit it yourself.
Commit opens a prefilled new-file editor at PyAutoMind/batches/reviews/2026-08-31-pm.md (you press the green commit button there).
Downloads are inert when this page is viewed as a Claude artifact — use Copy there; Download works from the archived copy.
Last step: tell the orchestrator chat “review submitted”.