From f28412a16228fb1fc2c24adbbe4a526cac5086aa Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Fri, 4 Sep 2026 13:35:25 -0400 Subject: [PATCH] cortex: checkin.yaml replaces epics.md; board regenerated projects-first The dashboard now opens with the check-in prompt, a last-check-in stamp and the projects (PyAutoBrain#354 / https://github.com/PyAutoLabs/PyAutoBrain/pull/355). This side of it: - checkin.yaml is the new ledger file: `refreshed: `, written by `cortex checkin` before it renders and pushed with the phase moves. The page reads it back as "Last check-in" and the Pages twin turns it red after an hour. - epics.md is gone. Science projects are long exploratory programmes; epics stay a Mind concept. The `Epic:` phase header is an optional join key to a Mind epic, as REFERENCE.md now says. - ledger_merge.py, the three workflows and the ledger tests swap epics.md for checkin.yaml. - dashboard.md / dashboard.html regenerated with the new renderer. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FDMikgtrzGV799S5WXPpFq --- .github/workflows/cortex_check.yml | 4 +- .github/workflows/dashboard_refresh.yml | 9 +- .github/workflows/ledger_merge.yml | 2 +- AGENTS.md | 9 +- REFERENCE.md | 25 +- checkin.yaml | 1 + dashboard.html | 239 ++++----------- dashboard.md | 387 ++++-------------------- epics.md | 78 ----- scripts/ledger_merge.py | 7 +- tests/test_ledger_merge.py | 14 +- 11 files changed, 160 insertions(+), 615 deletions(-) create mode 100644 checkin.yaml delete mode 100644 epics.md diff --git a/.github/workflows/cortex_check.yml b/.github/workflows/cortex_check.yml index 4f5e2c7..44cd29c 100644 --- a/.github/workflows/cortex_check.yml +++ b/.github/workflows/cortex_check.yml @@ -17,7 +17,7 @@ on: - "rulings/**" - "batches/**" - "projects.yaml" - - "epics.md" + - "checkin.yaml" - "dashboard.md" - "dashboard.html" - "scripts/**" @@ -29,7 +29,7 @@ on: - "rulings/**" - "batches/**" - "projects.yaml" - - "epics.md" + - "checkin.yaml" - "dashboard.md" - "dashboard.html" - "scripts/**" diff --git a/.github/workflows/dashboard_refresh.yml b/.github/workflows/dashboard_refresh.yml index 76c9913..6e65cd5 100644 --- a/.github/workflows/dashboard_refresh.yml +++ b/.github/workflows/dashboard_refresh.yml @@ -3,8 +3,9 @@ name: Dashboard Refresh # Keeps the generated Cortex pages (`dashboard.md`, linked from the README, and # `dashboard.html`, the Pages index) in step with the registry they describe. # The pages are rendered by PyAutoBrain's cortex conductor from `phases/`, -# `rulings/`, `batches/`, `projects.yaml` and `epics.md`, so any push that files -# a phase, moves it, records a run or lands a ruling makes them stale. +# `rulings/`, `batches/`, `projects.yaml` and `checkin.yaml`, so any push that +# files a phase, moves it, records a run, lands a ruling or stamps a check-in +# makes them stale. # # Same shape as the Mind's dashboard_refresh.yml, and for the same reason: on # pull requests a stale page is an error the author fixes on the branch; on @@ -33,7 +34,7 @@ on: - "rulings/**" - "batches/**" - "projects.yaml" - - "epics.md" + - "checkin.yaml" - "dashboard.md" - "dashboard.html" pull_request: @@ -42,7 +43,7 @@ on: - "rulings/**" - "batches/**" - "projects.yaml" - - "epics.md" + - "checkin.yaml" - "dashboard.md" - "dashboard.html" workflow_dispatch: diff --git a/.github/workflows/ledger_merge.yml b/.github/workflows/ledger_merge.yml index 7f7938b..8061320 100644 --- a/.github/workflows/ledger_merge.yml +++ b/.github/workflows/ledger_merge.yml @@ -15,7 +15,7 @@ name: Cortex Ledger Merge # pushed it ever comes back. # # WHAT IT WILL AND WILL NOT MERGE. Only a branch whose whole diff is *ledger*: -# `phases/`, `rulings/`, `batches/`, `epics.md`. The line is drawn by +# `phases/`, `rulings/`, `batches/`, `checkin.yaml`. The line is drawn by # scripts/ledger_merge.py — a script, so it is testable and a session can # predict the verdict — and it is DEFAULT DENY: anything under `scripts/`, # `tests/`, `.github/`, `policy/`, `docs/`, `projects.yaml`, the prose pages, diff --git a/AGENTS.md b/AGENTS.md index 0211267..7002d36 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -77,8 +77,11 @@ human's turn. Full rules in [rulings/AGENTS.md](rulings/AGENTS.md). human's verbatim reviews under `reviews/`, kept because 13 rulings cite them and append-only for the merge gate: never modified, only added. Nothing writes new ones (the review-slot apparatus was retired 2026-09-03). -- **`epics.md`** — the Cortex half of every split epic; `- mind-half:` names - the Mind entry by slug. +- **`checkin.yaml`** — one key, `refreshed: `: when the science + state was last actually checked in, written by `pyauto-brain cortex checkin + --apply` and read back by the board. It means *last check-in*, never last + render, so a doc-only push cannot fake freshness; the HTML board reddens it + on the reader's own clock once it is more than an hour old. - **`scripts/cortex.py`** — the one lifecycle script (stdlib only): - `check` — every structural rule, hermetic; `cortex check: OK` or `DRIFT` with one ` - …` line per finding, exit 1. @@ -97,7 +100,7 @@ human's turn. Full rules in [rulings/AGENTS.md](rulings/AGENTS.md). (see "Driving the Cortex" below). They are ledger for the merge gate. - **`scripts/ledger_merge.py`** — the default-deny classifier behind `.github/workflows/ledger_merge.yml`: a `claude/**` push whose whole diff is - ledger (`phases/`, `rulings/`, `batches/`, `epics.md`, the two generated + ledger (`phases/`, `rulings/`, `batches/`, `checkin.yaml`, the two generated dashboards) lands on `main` by itself; anything else waits for a human — and that "anything else" includes an `AGENTS.md` or `TEMPLATE.md` *inside* a ledger dir, which is doctrine, not an entry. `python3 diff --git a/REFERENCE.md b/REFERENCE.md index ae83a19..999418a 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -86,7 +86,7 @@ GitHub ref — whatever a human would open. | `Runs:` | comma-separated job **stems** | the index of the `## Runs` body; equal to the set of body stems | | `Ruling:` | ruling id | the chain head (see "Rulings") | | `Review-minutes:` | integer | a seed, not a measurement | -| `Epic:` | slug | shared with the Mind — the join key across the two dashboards | +| `Epic:` | slug | OPTIONAL join key to a **Mind** epic; the Cortex keeps no epics file of its own | | `Filed:` | `YYYY-MM-DD` | | | `Migrated-from:` | source path or ledger anchor | the Mind prompt, review file or project-ledger entry this phase was transcribed from (phase 4 of the birth epic) | @@ -174,7 +174,7 @@ PyAutoCortex/ ├── LICENSE .gitignore │ ├── projects.yaml ← the science body map — CODE, not ledger (read with PyYAML) -├── epics.md ← the Cortex half of each split epic (`- mind-half:`) +├── checkin.yaml ← `refreshed: ` — the last check-in stamp; LEDGER ├── dashboard.md ← GENERATED board — cortex conductor (`dashboard --apply`); LEDGER ├── dashboard.html ← GENERATED board, the Pages index; LEDGER │ @@ -409,7 +409,7 @@ deny**: | Ledger — merged automatically | Code — always a human | |---|---| | `phases/**`, `rulings/**`, `batches/**` | `scripts/`, `tests/`, `.github/`, `policy/`, `docs/` | -| `epics.md` | `projects.yaml`, `README.md`, `AGENTS.md`, `REFERENCE.md`, … | +| `checkin.yaml` | `projects.yaml`, `README.md`, `AGENTS.md`, `REFERENCE.md`, … | | `dashboard.md`, `dashboard.html` (generated) | **`AGENTS.md` / `TEMPLATE.md` inside a ledger dir** | | | anything unclassified — a new root file, a new top-level folder | | | **any modification or deletion under `rulings/` or `batches/`** (append-only) | @@ -518,6 +518,23 @@ phase (the six legs below), moves `running → pulled → awaiting-ruling`, re-renders `dashboard.md` + `dashboard.html`, and prints a summary keyed **by project** — the last thing on screen, so a chat sees it first. +### `checkin.yaml` — the last-check-in stamp + +One key, one line, committed and pushed with the ledger: + +```yaml +refreshed: 2026-09-04T14:03:00Z +``` + +It records the last **check-in**, not the last render: `checkin --apply` (and +`collect --apply`) writes it from the same stamp it scored against, before the +pages are rendered, so a doc-only push that re-renders the board cannot fake +freshness. The board reads it back as "Last check-in"; the HTML twin computes +the age on the *viewer's* clock and reddens it past sixty minutes, because a +static page cannot know when it is being read. Absent, the board says "never +checked in". The file is stable between renders, so `dashboard --check` needs +no rule for it. + ### The by-project view The summary is a tree, and it is the same tree in three places: the @@ -667,7 +684,7 @@ for exactly that reason. | Workflow | Trigger | Writes | |---|---|---| -| `cortex_check.yml` | push/PR on `phases/ rulings/ batches/ projects.yaml epics.md dashboard.* scripts/ tests/` | nothing (`cortex.py check` + pytest) | +| `cortex_check.yml` | push/PR on `phases/ rulings/ batches/ projects.yaml checkin.yaml dashboard.* scripts/ tests/` | nothing (`cortex.py check` + pytest) | | `dashboard_refresh.yml` | push to main + PR on the ledger paths and the two pages, nightly **03:35 UTC**, dispatch | `dashboard.md`, `dashboard.html` on main (3-attempt fetch/reset/render/commit/push); a PR run errors instead of healing | | `pages_dashboard.yml` | push to `dashboard.html`, dispatch | nothing in git — publishes `dashboard.html` as the Pages index | | `ledger_merge.yml` | push to `claude/**`, dispatch | merges a ledger-only branch into main | diff --git a/checkin.yaml b/checkin.yaml new file mode 100644 index 0000000..4f07a84 --- /dev/null +++ b/checkin.yaml @@ -0,0 +1 @@ +refreshed: 2026-09-04T17:18Z diff --git a/dashboard.html b/dashboard.html index d286764..ac4266a 100644 --- a/dashboard.html +++ b/dashboard.html @@ -219,200 +219,82 @@ a.go:hover{opacity:.9;text-decoration:none} .mdsrc{font-size:.85em} .boards a[data-organ="brain"]{color:#2159c9}@media(prefers-color-scheme:dark){.boards a[data-organ="brain"]{color:#6f9dff}}.boards a[data-organ="mind"]{color:#0a7d72}@media(prefers-color-scheme:dark){.boards a[data-organ="mind"]{color:#2ee6cf}}.boards a[data-organ="cortex"]{color:#a5177d}@media(prefers-color-scheme:dark){.boards a[data-organ="cortex"]{color:#ff7ad9}}.boards a[data-organ="memory"]{color:#6b34d6}@media(prefers-color-scheme:dark){.boards a[data-organ="memory"]{color:#b37eff}}.boards a[data-organ="heart"]{color:#b50f1a}@media(prefers-color-scheme:dark){.boards a[data-organ="heart"]{color:#ff6b73}}.boards a[data-organ="hands"]{color:#9a5400}@media(prefers-color-scheme:dark){.boards a[data-organ="hands"]{color:#ffa733}}.boards a[data-organ="organism"]{color:#0b6fa4}@media(prefers-color-scheme:dark){.boards a[data-organ="organism"]{color:#5ec7f5}} -.fresh{border-left:3px solid var(--edge);padding:.1rem .9rem;margin:1.2rem 0;background:var(--tint)}.fresh p{margin:.5rem 0}table.map{width:100%;border-collapse:collapse;font-size:.95em}table.map th{text-align:left;color:var(--muted);font-weight:600}table.map td,table.map th{border-bottom:1px solid var(--line);padding:.4rem .5rem .4rem 0;vertical-align:top} +.fresh{border-left:3px solid var(--edge);padding:.1rem .9rem;margin:1.2rem 0;background:var(--tint)}.fresh p{margin:.5rem 0}table.map{width:100%;border-collapse:collapse;font-size:.95em}table.map th{text-align:left;color:var(--muted);font-weight:600}table.map td,table.map th{border-bottom:1px solid var(--line);padding:.4rem .5rem .4rem 0;vertical-align:top}.checkin{margin:.2rem 0 1.4rem}.paths{margin:.2rem 0}.paths b{display:inline-block;min-width:3.6rem}.stale{color:var(--bad);font-weight:600}

PyAutoCortexDashboard

Question. Run. Rule.

Every science phase the Cortex is holding. Tap a phase's 📋 and its next command is on your clipboard. The verdict is always yours — this page hands you the command, never the ruling.

  • 0Awaiting ruling
  • 2Running / submitted
  • 5Ready
  • 1Gated
  • 27Recent rulings
-

Last updated 2026-09-04. This page is generated from phases/, rulings/, epics.md and projects.yaml, so it is only as current as they are. dashboard_refresh.yml re-renders it on every push to main.

+

Last updated 2026-09-04. This page is generated from phases/, rulings/ and projects.yaml, so it is only as current as they are. dashboard_refresh.yml re-renders it on every push to main.

markdown version · GitHub Page

-

By project markdown version

Where every project is: the folders it lives in, every phase of it that is still open, the locations its ## Where to look names, and the prompt for each thing that phase could become. This is the check-in view — pyauto-brain cortex checkin and census --by-project print the same tree.

+

check in since last time

+

Last check-in:

+

Summary

+

One row per active project — the next thing, what it is holding, and when it last ruled.

+ + + + + +
ProjectNext phaseAwaitingRunningReadyLast ruling
euclid4 ready001-
inference_programme21 gated0002026-09-04
subhalo_validation5 running0242026-09-02
+

Projects markdown version

The science body map, active first: where each project lives, what it is holding, and the one phase of it to act on next. The plans and the issues are one click away — this page routes to them rather than reprinting them; census --by-project and the check-in printout keep the full per-phase tree.

euclid

-

local /mnt/c/Users/Jammy/Science/euclid · RAL /mnt/ral/jnightin/euclid_strong_lens_modeling_pipeline — phases: planned 3 · ready 1

-

Ready to submit

-

Euclid — phase 4: DR1 prelim science run — 10 real Euclid lenses in euclid_dr1_prelim on RALready — euclid phase 4 · budget 48:00 · 25 review-min

-
    -
  • euclid_dr1_prelim (project row euclid_dr1_prelim): the new project tree, once created
  • -
  • euclid (project row euclid): catalogue/catalogue/dr1_prelim_grade_ab_catalogue_csvs_20260623/
  • -
  • autolens_assistant/skills/euclid_{prepare_data,setup_pipeline,model_lens,hpc_runs}.md
  • -
  • euclid_strong_lens_modeling_pipeline: catalogue/scripts/, hpc/batch_cpu/
  • -
+

Local /mnt/c/Users/Jammy/Science/euclid

+

RAL /mnt/ral/jnightin/euclid_strong_lens_modeling_pipeline

+

active · both partition · phases: planned 3 · ready 1

submit it

-

Planned

-

Euclid — phase 5: resimulate a fitted Euclid lens, and resimulate the 10 prelim lenses with true magnifications recordedplanned — euclid phase 5 · budget 24:00 · 20 review-min

-
    -
  • euclid_strong_lens_modeling_pipeline: scripts/simulator.py, smoke_tests.txt
  • -
  • euclid_dr1_prelim (project row): the 10 simulated datasets and their truth table
  • -
  • phases/euclid/dr1_prelim_10_lens_science_run.md — the fits these resimulations start from
  • -
-

open it

-

Euclid — phase 6: do we recover Sersic indices? 10 simulated Euclid lenses vs the real prior-edge pile-upplanned — euclid phase 6 · budget 24:00 · 20 review-min

-
    -
  • euclid (project row): catalogue/scripts/plot_lens_sersic_index.py — already plots this
  • -
  • euclid_dr1_prelim (project row): the phase-5 simulated datasets and their truth table
  • -
  • euclid_strong_lens_modeling_pipeline: the sersic_lens_model.py family used on the real data
  • -
-

open it

-

Euclid — phase 7: how robust are magnification estimates? model-match vs mismatch across the 10 Euclid lensesplanned — euclid phase 7 · budget 24:00 · 20 review-min

-
    -
  • euclid_dr1_prelim (project row): the phase-5 simulations and their recorded true magnifications
  • -
  • Mind draft/bug/autoarray/delaunay_area_magnification_audit.md — the source-code half (6c),
  • -
  • Mind draft/test/workspaces/mesh_magnification_correctness.md — the cluster epic's
  • -
-

open it

+python3 scripts/cortex.py move phases/euclid/dr1_prelim_10_lens_science_run.md submitted --run <jobid>" aria-label="Copy the Claude command">📋

Euclid — phase 4: DR1 prelim science run — 10 real Euclid lenses in euclid_dr1_prelim on RALready — euclid phase 4 · budget 48:00 · 25 review-min

+
3 more open phase(s) · plans and issues

phases/euclid/

inference_programme

-

local /home/jammy/Code/PyAutoLabs/autolens_profiling · mirror /mnt/c/Users/Jammy/Science/inference_programme · RAL /mnt/ral/jnightin/autolens_profiling — phases: accepted 7 · dropped 11 · gated 1 · planned 4

-

Gated

-

Inference_programme — phase 21: the Nautilus bar on mass_pix — f1e8 (refs convention) and f1e5 (like-for-like)gated — inference_programme phase 21 · budget 4:00 · 15 review-min

-
    -
  • autolens_profiling/results/notes/gradient_slam/LEDGER.md — the mass_pix target definition and the provenance of every fixed value
  • -
  • autolens_profiling/scripts/imaging/searches/nautilus/mass_pix.py — the driver (written by the dev leg)
  • -
  • autolens_profiling/hpc/batch_gpu/ — the two-arm submit script and its WALL-BASIS block
  • -
  • inference_programme (project row): output/searches/nautilus/imaging/mass_pix/hst/pos_tauto0.2_f1e8/ and .../pos_tauto0.2_f1e5/ — the two run trees, each with positions.info
  • -
  • autolens_profiling/results/searches/nautilus/imaging/mass_pix/hst/ — the result rows
  • -
  • logs/output/ and logs/error/ on the mirror
  • -
  • autolens_profiling/results/baselines/InferenceRefs_v1/pixelization_pos_fp64/ — the nearest certified neighbour (12 free parameters vs this cell's 7)
  • -
+

Local /home/jammy/Code/PyAutoLabs/autolens_profiling

+

Mirror /mnt/c/Users/Jammy/Science/inference_programme

+

RAL /mnt/ral/jnightin/autolens_profiling

+

active · both partition · phases: accepted 7 · dropped 11 · gated 1 · planned 4

its gates

-

Planned

-

Inference_programme — phase 11: cluster extended-source inference — gradient-based fitting building on JAX knowledgeplanned — inference_programme phase 11 · budget 24:00 · 25 review-min

-
    -
  • Mind draft/feature/autolens/source_cluster_arc.md — the arc ledger (this is its line 11)
  • -
  • Mind draft/feature/workspaces/cluster_pixelized_analysisfactor.md — cluster phase 10, the gate
  • -
  • inference_programme (project row): output/searches/*/cluster/ — the cluster trees the
  • -
-

open it

-

Inference_programme — phase 19: sweep the point-source families out of the RAL active output/ tree into output/legacy_point/planned — inference_programme phase 19 · budget 2:00 · 5 review-min

-
    -
  • /mnt/ral/jnightin/autolens_profiling/output/ — the three point-source
  • -
  • /mnt/c/Users/Jammy/Science/inference_programme/
  • -
  • autolens_profiling/results/notes/inference/DECISIONS.md (2026-09-01 entry —
  • -
  • autolens_profiling/results/baselines/InferenceRefs_v1/SUBMIT_LIST.md — the
  • -
  • rulings/2026/09/R-20260902-01.md, rulings/2026/09/R-20260904-01.md
  • -
-

open it

-

Inference_programme — phase 22: MultiStartProdigy on mass_pix — does a gradient search beat Nautilus in a SLaM mass[1] shape?planned — inference_programme phase 22 · budget 4:00 · 25 review-min

-
    -
  • autolens_profiling/results/notes/gradient_slam/LEDGER.md — the question, the inherited MGE Prodigy evidence and the engine-split positions rule
  • -
  • autolens_profiling/scripts/imaging/searches/multi_start_prodigy_autoconv/mass_pix.py — the driver (written by the dev leg)
  • -
  • autolens_profiling/scripts/misc/searches/_samplers.py — the per-cell imaging:mass_pix rows (n_starts 16, batch 4, n_steps 3000)
  • -
  • autolens_profiling/hpc/batch_gpu/ — the seeds 0–4 array submit and its WALL-BASIS block
  • -
  • inference_programme (project row): output/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/pos_tauto0.2_f1e5/ — the five run trees, each with positions.info
  • -
  • autolens_profiling/results/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/ — the result rows
  • -
  • logs/output/ and logs/error/ on the mirror
  • -
  • phase 21 (nautilus_mass_pix_baseline) — the bar this is scored against
  • -
-

open it

-

Inference_programme — phase 23: likelihood-term levers on mass_pix — slogdet vs cholesky, relative jitter on reg.Adaptplanned — inference_programme phase 23 · budget 4:00 · 20 review-min

-
    -
  • autolens_profiling/results/notes/gradient_slam/LEDGER.md — the phase table and the inherited rules
  • -
  • phase 22 (prodigy_mass_pix) — the control this phase is paired against; its ruling decides whether this arms at all
  • -
  • autolens_profiling#166 — the slogdet-as-PyAutoArray-default reminder this lever folds
  • -
  • autolens_profiling/results/notes/inference/phase_08_regularization/RESULTS.md — the retired programme's slogdet A/B, for what was already learned
  • -
  • PyAutoArray constant.py:53 and the adapt.py regularization schemes — the absolute 1e-8 lift vs jitter_relative
  • -
  • inference_programme (project row): output/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/ — the lever arms land beside the phase 22 control
  • -
  • logs/output/ and logs/error/ on the mirror
  • -
-

open it

+# gates: autolens_profiling#218" aria-label="Copy the Claude command">📋

Inference_programme — phase 21: the Nautilus bar on mass_pix — f1e8 (refs convention) and f1e5 (like-for-like)gated — inference_programme phase 21 · budget 4:00 · 15 review-min

+
4 more open phase(s) · plans and issues

phases/inference_programme/ · issues

subhalo_validation

-

local /mnt/c/Users/Jammy/Science/subhalo_validation · RAL /mnt/ral/jnightin/subhalo_validation — phases: ready 4 · running 2

-

Still out there

-

Subhalo_validation — phase 5: rectangular_adapt on pl_eff_0 — the clumpy-source lens on the RectangularBilinear comparisonrunning — subhalo_validation phase 5 · budget 48:00 · 8 review-min · runs 342237_1, 342240_1 — ⚠️ failed runs: 342240_1 — wall 0:00 of 48:00 (0%)

-
    -
  • subhalo_validation (project row): output/subhalo/detect/rectangular_adapt/pl_eff_0_no_subhalo/
  • -
  • results/rectangular_adapt/pl_eff_0_no_subhalo.json — the witness (untracked in git by the human's ruling; laptop only)
  • -
  • wiki/project/results_summary.md, wiki/project/state.md
  • -
-

where the jobs stand

-

run it again

-

Subhalo_validation — phase 6: rectangular_adapt on pl_eff_1_outer — the outer-component lens on the RectangularBilinear comparisonrunning — subhalo_validation phase 6 · budget 48:00 · 8 review-min · runs 342237_2, 342240_2 — ⚠️ failed runs: 342240_2 — wall 0:00 of 48:00 (0%)

-
    -
  • subhalo_validation (project row): output/subhalo/detect/rectangular_adapt/pl_eff_1_outer_no_subhalo/
  • -
  • results/rectangular_adapt/pl_eff_1_outer_no_subhalo.json — the witness (untracked in git by the human's ruling; laptop only)
  • -
  • wiki/project/results_summary.md, wiki/project/state.md
  • -
-

where the jobs stand

-

run it again

-

Ready to submit

-

Subhalo_validation — phase 2: delaunay_adapt_split on pl_eff_0 — the clumpy-source lensready — subhalo_validation phase 2 · budget 48:00 · 8 review-min · runs 342027_1, 342231_1, 342234_1 — ⚠️ failed runs: 342234_1

-
    -
  • subhalo_validation (project row): output/subhalo/detect/delaunay_adapt_split/pl_eff_0_no_subhalo/
  • -
  • results/delaunay_adapt_split/pl_eff_0_no_subhalo.json — the witness
  • -
  • wiki/project/results_summary.md, wiki/project/state.md
  • -
-

submit it

-

Subhalo_validation — phase 3: delaunay_adapt_split on pl_eff_1_outer — the outer-component lens, plus the AdaptSplit fix rerunready — subhalo_validation phase 3 · budget 48:00 · 8 review-min · runs 342027_2, 342093_0, 342231_2, 342234_2 — ⚠️ failed runs: 342234_2

-
    -
  • subhalo_validation (project row): output/subhalo/detect/delaunay_adapt_split/pl_eff_1_outer_no_subhalo/
  • -
  • output/subhalo/detect/delaunay_adapt_split/pl_eff_1_outer_no_subhalo_adapt_split_fix/source_pix[1]/085f85ba6970436a1b8b115b6c9b3fbf
  • -
  • results/delaunay_adapt_split/pl_eff_1_outer_no_subhalo.json — the witness
  • -
  • results/figures/adapt_split_fix_{regularization,source_plane,residuals}_before_after.jpg
  • -
  • wiki/project/2026-08-31-adapt-split-fix-and-rectangular.md, wiki/project/state.md
  • -
-

submit it

-

Subhalo_validation — phase 1: delaunay_adapt_split on pl_sersic_0 — the false-positive nullready — subhalo_validation phase 1 · budget 48:00 · 10 review-min · runs 342027_0, 342231_0, 342234_0 — ⚠️ failed runs: 342234_0

-
    -
  • subhalo_validation (project row): output/subhalo/detect/delaunay_adapt_split/pl_sersic_0_no_subhalo/
  • -
  • results/delaunay_adapt_split/pl_sersic_0_no_subhalo.json — the witness
  • -
  • wiki/project/results_summary.md — the scientific commentary and the provenance row
  • -
-

submit it

-

Subhalo_validation — phase 4: rectangular_adapt on pl_sersic_0 — the RectangularBilinear comparisonready — subhalo_validation phase 4 · budget 48:00 · 15 review-min · runs 342094_0, 342095_0, 342237_0, 342240_0 — ⚠️ failed runs: 342240_0

-
    -
  • subhalo_validation (project row): output/subhalo/detect/rectangular_adapt/pl_sersic_0_no_subhalo/
  • -
  • output/subhalo/detect/rectangular_adapt/pl_sersic_0_no_subhalo/source_lp[1]/3e9ced20d8180a15d972b1874636c5c1 — job A
  • -
  • results/rectangular_adapt/pl_sersic_0_no_subhalo.json — the witness (untracked; laptop only)
  • -
  • wiki/project/2026-08-31-adapt-split-fix-and-rectangular.md, wiki/project/results_summary.md
  • -
-

submit it

-

8 dormant project(s) with nothing open: concr (none) · cowls_diana (none) · euclid_dr1_prelim (none) · ic50_workspace (planned 1) · pj011646 (none) · profiling (none) · slope_hierarchy (planned 2) · subhalo_simulations (none)

+

Local /mnt/c/Users/Jammy/Science/subhalo_validation

+

RAL /mnt/ral/jnightin/subhalo_validation

+

active · ral partition · phases: ready 4 · running 2

+

Subhalo_validation — phase 5: rectangular_adapt on pl_eff_0 — the clumpy-source lens on the RectangularBilinear comparisonrunning — subhalo_validation phase 5 · budget 48:00 · 8 review-min · runs 342237_1, 342240_1 — ⚠️ failed runs: 342240_1

+
5 more open phase(s) · plans and issues

phases/subhalo_validation/ · issues

+

8 project(s) with nothing open: euclid_dr1_prelim (planned · none) · concr (dormant · none) · cowls_diana (dormant · none) · ic50_workspace (dormant · planned 1) · pj011646 (dormant · none) · profiling (dormant · none) · slope_hierarchy (dormant · planned 2) · subhalo_simulations (dormant · none)

Awaiting ruling markdown version

Results are in and nothing is running — the human's verdict is the only thing outstanding. Ordered failures first, then the phases a ruling is required for, then the clean ones.

(nothing awaiting a ruling)

Running / submitted markdown version

On the queue or on the machine. Wall is what the run lines record at the last refresh, against the phase's own budget.

Subhalo_validation — phase 5: rectangular_adapt on pl_eff_0 — the clumpy-source lens on the RectangularBilinear comparisonrunning — subhalo_validation phase 5 · budget 48:00 · 8 review-min · runs 342237_1, 342240_1 — wall 0:00 of 48:00 (0%)

-

↳ run it again

Subhalo_validation — phase 6: rectangular_adapt on pl_eff_1_outer — the outer-component lens on the RectangularBilinear comparisonrunning — subhalo_validation phase 6 · budget 48:00 · 8 review-min · runs 342237_2, 342240_2 — wall 0:00 of 48:00 (0%)

-

↳ run it again

Ready markdown version

Gate cleared, witness registered — everything that could be submitted today.

+

Subhalo_validation — phase 1: delaunay_adapt_split on pl_sersic_0 — the false-positive nullready — subhalo_validation phase 1 · budget 48:00 · 10 review-min · runs 342027_0, 342231_0, 342234_0

+
3 more ready

Subhalo_validation — phase 2: delaunay_adapt_split on pl_eff_0 — the clumpy-source lensready — subhalo_validation phase 2 · budget 48:00 · 8 review-min · runs 342027_1, 342231_1, 342234_1

Subhalo_validation — phase 3: delaunay_adapt_split on pl_eff_1_outer — the outer-component lens, plus the AdaptSplit fix rerunready — subhalo_validation phase 3 · budget 48:00 · 8 review-min · runs 342027_2, 342093_0, 342231_2, 342234_2

-

Subhalo_validation — phase 1: delaunay_adapt_split on pl_sersic_0 — the false-positive nullready — subhalo_validation phase 1 · budget 48:00 · 10 review-min · runs 342027_0, 342231_0, 342234_0

Subhalo_validation — phase 4: rectangular_adapt on pl_sersic_0 — the RectangularBilinear comparisonready — subhalo_validation phase 4 · budget 48:00 · 15 review-min · runs 342094_0, 342095_0, 342237_0, 342240_0

+
@@ -435,26 +317,6 @@

subhalo_validation

R-20260902-05rerunphases/subhalo_validation/delaunay_adapt_split_pl_eff_0.md- R-20260902-04rerunphases/subhalo_validation/delaunay_adapt_split_pl_eff_1_outer.md- -

Epics markdown version

Long-running programmes whose science half lives here; each card links its development half in the Mind.

-

prepare the Euclid DR1 modelling pipeline, then prove it on real DR1 lenses — Mind half: PyAutoMind/epics.md#euclid-dr1-prep — ledger: phases/euclid/ — science half opens at phase 4, gated on the 3a PR and the 3b issue; 5–7 planned behind it

-

would a gradient search dropped into a SLaM mass[1] search beat Nautilus? — Mind half: draft/feature/autolens_profiling/gradient_slam_mass_pix_target.md (dev leg; Cortex phase 21 is gated on its issue autolens_profiling#218) — ledger: autolens_profiling/results/notes/gradient_slam/LEDGER.md — BORN 2026-09-04 from the retired jax-inference-profiling; phase 21 (Nautilus baseline) gated on the dev leg autolens_profiling#218; phase 20 (cost probe) dropped the same day — the epic measures steps, not gradient cost

-

expectation propagation as the scalable alternative to graphical joint fits — Mind half: PyAutoMind/epics.md#graphical-ep — ledger: PyAutoMind/draft/research/graphical_ep/ep_campaign.md — both science phases planned; the projects are dormant and the campaign's

-

the Source & Cluster arc — cluster mass modelling and pixelized source inference — Mind half: PyAutoMind/epics.md#cluster-strong-lensing — ledger: PyAutoMind/draft/feature/autolens/source_cluster_arc.md — one science phase (arc phase 11), planned behind the arc's phase 10

-

Projects markdown version

The science body map — where each project lives, what syncs it and where its witness lands.

- - - - - - - - - - - - - -
ProjectStatusPartitionSyncWitness
concrdormantbothhpc/syncresults/**/*.json
cowls_dianadormantbothhpc/syncresults/**/*.json
euclidactivebothhpc/synccatalogue/**/*.csv
euclid_dr1_prelimplannedbothhpc/syncresults/**/*.json
ic50_workspacedormantbothhpc/syncresults/**/*.json
inference_programmeactivebothhpc/syncresults/searches/**/*.json
pj011646dormantbothhpc/syncresults/**/*.json
profilingdormantbothhpc/syncresults/**/*.json
slope_hierarchydormantbothhpc/syncresults/**/*.json
subhalo_simulationsdormantbothhpc/syncresults/**/*.json
subhalo_validationactiveralhpc/syncresults/**/*.json
+ diff --git a/dashboard.md b/dashboard.md index 6285fc5..a845cc2 100644 --- a/dashboard.md +++ b/dashboard.md @@ -6,7 +6,7 @@ This is the markdown version of the [PyAutoCortex Dashboard](https://pyautolabs. Every science phase the Cortex is holding, on one page: what is waiting on your verdict, what is running, what could be launched next and what is still gated on development work. The verdict is always yours — this page hands you the command, never the ruling. -> **Last updated 2026-09-04.** This page is generated from `phases/`, `rulings/`, `epics.md` and `projects.yaml`, so it is only as current as they are. `dashboard_refresh.yml` re-renders it on every push to `main`. +> **Last updated 2026-09-04.** This page is generated from `phases/`, `rulings/` and `projects.yaml`, so it is only as current as they are. `dashboard_refresh.yml` re-renders it on every push to `main`. | Where | Count | |-------|------:| @@ -16,96 +16,69 @@ Every science phase the Cortex is holding, on one page: what is waiting on your | [Gated](#gated) | 1 | | [Recent rulings](#recent-rulings) | 27 | -## By project - -[markdown version](https://github.com/PyAutoLabs/PyAutoCortex/blob/main/projects.yaml) — Where every project is: the folders it lives in, every phase of it that is still open, the locations its `## Where to look` names, and the prompt for each thing that phase could become. This is the check-in view — `pyauto-brain cortex checkin` and `census --by-project` print the same tree. - -### euclid - -- local `/mnt/c/Users/Jammy/Science/euclid` · RAL `/mnt/ral/jnightin/euclid_strong_lens_modeling_pipeline` -- phases: planned 3 · ready 1 - -**Ready to submit** - -Euclid — phase 4: DR1 prelim science run — 10 real Euclid lenses in euclid_dr1_prelim on RAL — euclid phase 4 · budget 48:00 · 25 review-min — **ready** - -- where to look: `euclid_dr1_prelim` (project row `euclid_dr1_prelim`): the new project tree, once created -- where to look: `euclid` (project row `euclid`): `catalogue/catalogue/dr1_prelim_grade_ab_catalogue_csvs_20260623/` -- where to look: `autolens_assistant/skills/euclid_{prepare_data,setup_pipeline,model_lens,hpc_runs}.md` -- where to look: `euclid_strong_lens_modeling_pipeline`: `catalogue/scripts/`, `hpc/batch_cpu/` - -
📋 submit it +
📋 check in since last time ``` -phases/euclid/dr1_prelim_10_lens_science_run.md -# project euclid: no `submit` verb in projects.yaml — submit by hand -python3 scripts/cortex.py move phases/euclid/dr1_prelim_10_lens_science_run.md submitted --run +/cortex — check in on every active science project since the last check-in (2026-09-04T17:18Z): pull each project through its sync CLI, score every live run against its pre-registered witness, move what came back, re-render and push the board, then read me the by-project summary with the prompt each phase needs next. ```
-**Planned** +**Last check-in:** 2026-09-04T17:18Z -Euclid — phase 5: resimulate a fitted Euclid lens, and resimulate the 10 prelim lenses with true magnifications recorded — euclid phase 5 · budget 24:00 · 20 review-min — **planned** +## Summary -- where to look: `euclid_strong_lens_modeling_pipeline`: `scripts/simulator.py`, `smoke_tests.txt` -- where to look: `euclid_dr1_prelim` (project row): the 10 simulated datasets and their truth table -- where to look: `phases/euclid/dr1_prelim_10_lens_science_run.md` — the fits these resimulations start from +One row per active project — the next thing, what it is holding, and when it last ruled. -
📋 open it +| Project | Next phase | Awaiting | Running | Ready | Last ruling | +|---|---|---:|---:|---:|---| +| euclid | 4 ready | 0 | 0 | 1 | - | +| inference_programme | 21 gated | 0 | 0 | 0 | 2026-09-04 | +| subhalo_validation | 5 running | 0 | 2 | 4 | 2026-09-02 | -``` -python3 scripts/cortex.py move phases/euclid/resimulate_fitted_lens_simulator.md ready # when the `Ready when:` clause in its `## Question` is met -``` +## Projects -
+[markdown version](https://github.com/PyAutoLabs/PyAutoCortex/blob/main/projects.yaml) — The science body map, active first: where each project lives, what it is holding, and the one phase of it to act on next. The plans and the issues are one click away — this page routes to them rather than reprinting them; `census --by-project` and the check-in printout keep the full per-phase tree. + +### euclid -Euclid — phase 6: do we recover Sersic indices? 10 simulated Euclid lenses vs the real prior-edge pile-up — euclid phase 6 · budget 24:00 · 20 review-min — **planned** +**Local** `/mnt/c/Users/Jammy/Science/euclid` -- where to look: `euclid` (project row): `catalogue/scripts/plot_lens_sersic_index.py` — already plots this -- where to look: `euclid_dr1_prelim` (project row): the phase-5 simulated datasets and their truth table -- where to look: `euclid_strong_lens_modeling_pipeline`: the `sersic_lens_model.py` family used on the real data +**RAL** `/mnt/ral/jnightin/euclid_strong_lens_modeling_pipeline` -
📋 open it +active · both partition · phases: planned 3 · ready 1 + +
📋 Euclid — phase 4: DR1 prelim science run — 10 real Euclid lenses in euclid_dr1_prelim on RAL — euclid phase 4 · budget 48:00 · 25 review-min — ready ``` -python3 scripts/cortex.py move phases/euclid/sersic_index_recovery.md ready # when the `Ready when:` clause in its `## Question` is met +phases/euclid/dr1_prelim_10_lens_science_run.md +# project euclid: no `submit` verb in projects.yaml — submit by hand +python3 scripts/cortex.py move phases/euclid/dr1_prelim_10_lens_science_run.md submitted --run ```
-Euclid — phase 7: how robust are magnification estimates? model-match vs mismatch across the 10 Euclid lenses — euclid phase 7 · budget 24:00 · 20 review-min — **planned** - -- where to look: `euclid_dr1_prelim` (project row): the phase-5 simulations and their recorded true magnifications -- where to look: Mind `draft/bug/autoarray/delaunay_area_magnification_audit.md` — the source-code half (6c), -- where to look: Mind `draft/test/workspaces/mesh_magnification_correctness.md` — the cluster epic's +
3 more open phase(s) · plans and issues -
📋 open it +- [Euclid — phase 5: resimulate a fitted Euclid lens, and resimulate the 10 prelim lenses with true magnifications recorded](phases/euclid/resimulate_fitted_lens_simulator.md) — planned +- [Euclid — phase 6: do we recover Sersic indices? 10 simulated Euclid lenses vs the real prior-edge pile-up](phases/euclid/sersic_index_recovery.md) — planned +- [Euclid — phase 7: how robust are magnification estimates? model-match vs mismatch across the 10 Euclid lenses](phases/euclid/magnification_robustness.md) — planned -``` -python3 scripts/cortex.py move phases/euclid/magnification_robustness.md ready # when the `Ready when:` clause in its `## Question` is met -``` +[phases/euclid/](https://github.com/PyAutoLabs/PyAutoCortex/tree/main/phases/euclid/)
### inference_programme -- local `/home/jammy/Code/PyAutoLabs/autolens_profiling` · mirror `/mnt/c/Users/Jammy/Science/inference_programme` · RAL `/mnt/ral/jnightin/autolens_profiling` -- phases: accepted 7 · dropped 11 · gated 1 · planned 4 +**Local** `/home/jammy/Code/PyAutoLabs/autolens_profiling` -**Gated** +**Mirror** `/mnt/c/Users/Jammy/Science/inference_programme` -Inference_programme — phase 21: the Nautilus bar on mass_pix — f1e8 (refs convention) and f1e5 (like-for-like) — inference_programme phase 21 · budget 4:00 · 15 review-min — **gated** +**RAL** `/mnt/ral/jnightin/autolens_profiling` -- where to look: `autolens_profiling/results/notes/gradient_slam/LEDGER.md` — the `mass_pix` target definition and the provenance of every fixed value -- where to look: `autolens_profiling/scripts/imaging/searches/nautilus/mass_pix.py` — the driver (written by the dev leg) -- where to look: `autolens_profiling/hpc/batch_gpu/` — the two-arm submit script and its `WALL-BASIS` block -- where to look: `inference_programme` (project row): `output/searches/nautilus/imaging/mass_pix/hst/pos_tauto0.2_f1e8/` and `.../pos_tauto0.2_f1e5/` — the two run trees, each with `positions.info` -- where to look: `autolens_profiling/results/searches/nautilus/imaging/mass_pix/hst/` — the result rows -- where to look: `logs/output/` and `logs/error/` on the mirror -- where to look: `autolens_profiling/results/baselines/InferenceRefs_v1/pixelization_pos_fp64/` — the nearest certified neighbour (12 free parameters vs this cell's 7) +active · both partition · phases: accepted 7 · dropped 11 · gated 1 · planned 4 -
📋 its gates +
📋 Inference_programme — phase 21: the Nautilus bar on mass_pix — f1e8 (refs convention) and f1e5 (like-for-like) — inference_programme phase 21 · budget 4:00 · 15 review-min — gated ``` python3 scripts/cortex.py gates # then, once they have closed: move phases/inference_programme/nautilus_mass_pix_baseline.md ready @@ -114,119 +87,26 @@ python3 scripts/cortex.py gates # then, once they have closed: move phases/inf
-**Planned** - -Inference_programme — phase 11: cluster extended-source inference — gradient-based fitting building on JAX knowledge — inference_programme phase 11 · budget 24:00 · 25 review-min — **planned** - -- where to look: Mind `draft/feature/autolens/source_cluster_arc.md` — the arc ledger (this is its line 11) -- where to look: Mind `draft/feature/workspaces/cluster_pixelized_analysisfactor.md` — cluster phase 10, the gate -- where to look: `inference_programme` (project row): `output/searches/*/cluster/` — the cluster trees the - -
📋 open it - -``` -python3 scripts/cortex.py move phases/inference_programme/cluster_extended_source_inference.md ready # when the `Ready when:` clause in its `## Question` is met -``` - -
- -Inference_programme — phase 19: sweep the point-source families out of the RAL active output/ tree into output/legacy_point/ — inference_programme phase 19 · budget 2:00 · 5 review-min — **planned** - -- where to look: `/mnt/ral/jnightin/autolens_profiling/output/` — the three point-source -- where to look: `/mnt/c/Users/Jammy/Science/inference_programme/` -- where to look: `autolens_profiling/results/notes/inference/DECISIONS.md` (2026-09-01 entry — -- where to look: `autolens_profiling/results/baselines/InferenceRefs_v1/SUBMIT_LIST.md` — the -- where to look: `rulings/2026/09/R-20260902-01.md`, `rulings/2026/09/R-20260904-01.md` - -
📋 open it - -``` -python3 scripts/cortex.py move phases/inference_programme/legacy_point_output_sweep.md ready # when the `Ready when:` clause in its `## Question` is met -``` - -
- -Inference_programme — phase 22: MultiStartProdigy on mass_pix — does a gradient search beat Nautilus in a SLaM mass[1] shape? — inference_programme phase 22 · budget 4:00 · 25 review-min — **planned** - -- where to look: `autolens_profiling/results/notes/gradient_slam/LEDGER.md` — the question, the inherited MGE Prodigy evidence and the engine-split positions rule -- where to look: `autolens_profiling/scripts/imaging/searches/multi_start_prodigy_autoconv/mass_pix.py` — the driver (written by the dev leg) -- where to look: `autolens_profiling/scripts/misc/searches/_samplers.py` — the per-cell `imaging:mass_pix` rows (n_starts 16, batch 4, n_steps 3000) -- where to look: `autolens_profiling/hpc/batch_gpu/` — the seeds 0–4 array submit and its `WALL-BASIS` block -- where to look: `inference_programme` (project row): `output/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/pos_tauto0.2_f1e5/` — the five run trees, each with `positions.info` -- where to look: `autolens_profiling/results/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/` — the result rows -- where to look: `logs/output/` and `logs/error/` on the mirror -- where to look: phase 21 (`nautilus_mass_pix_baseline`) — the bar this is scored against - -
📋 open it - -``` -python3 scripts/cortex.py move phases/inference_programme/prodigy_mass_pix.md ready # when the `Ready when:` clause in its `## Question` is met -``` - -
- -Inference_programme — phase 23: likelihood-term levers on mass_pix — slogdet vs cholesky, relative jitter on reg.Adapt — inference_programme phase 23 · budget 4:00 · 20 review-min — **planned** +
4 more open phase(s) · plans and issues -- where to look: `autolens_profiling/results/notes/gradient_slam/LEDGER.md` — the phase table and the inherited rules -- where to look: phase 22 (`prodigy_mass_pix`) — the control this phase is paired against; its ruling decides whether this arms at all -- where to look: `autolens_profiling#166` — the slogdet-as-PyAutoArray-default reminder this lever folds -- where to look: `autolens_profiling/results/notes/inference/phase_08_regularization/RESULTS.md` — the retired programme's slogdet A/B, for what was already learned -- where to look: `PyAutoArray` `constant.py:53` and the `adapt.py` regularization schemes — the absolute `1e-8` lift vs `jitter_relative` -- where to look: `inference_programme` (project row): `output/searches/multi_start_prodigy_autoconv/imaging/mass_pix/hst/` — the lever arms land beside the phase 22 control -- where to look: `logs/output/` and `logs/error/` on the mirror +- [Inference_programme — phase 11: cluster extended-source inference — gradient-based fitting building on JAX knowledge](phases/inference_programme/cluster_extended_source_inference.md) — planned +- [Inference_programme — phase 19: sweep the point-source families out of the RAL active output/ tree into output/legacy_point/](phases/inference_programme/legacy_point_output_sweep.md) — planned +- [Inference_programme — phase 22: MultiStartProdigy on mass_pix — does a gradient search beat Nautilus in a SLaM mass[1] shape?](phases/inference_programme/prodigy_mass_pix.md) — planned +- [Inference_programme — phase 23: likelihood-term levers on mass_pix — slogdet vs cholesky, relative jitter on reg.Adapt](phases/inference_programme/likelihood_term_levers.md) — planned -
📋 open it - -``` -python3 scripts/cortex.py move phases/inference_programme/likelihood_term_levers.md ready # when the `Ready when:` clause in its `## Question` is met -``` +[phases/inference_programme/](https://github.com/PyAutoLabs/PyAutoCortex/tree/main/phases/inference_programme/) · [issues](https://github.com/PyAutoLabs/autolens_profiling/issues)
### subhalo_validation -- local `/mnt/c/Users/Jammy/Science/subhalo_validation` · RAL `/mnt/ral/jnightin/subhalo_validation` -- phases: ready 4 · running 2 - -**Still out there** - -Subhalo_validation — phase 5: rectangular_adapt on pl_eff_0 — the clumpy-source lens on the RectangularBilinear comparison — subhalo_validation phase 5 · budget 48:00 · 8 review-min · runs 342237_1, 342240_1 — **running** — ⚠️ failed runs: 342240_1 - -- wall 0:00 of 48:00 (0%) - -- where to look: `subhalo_validation` (project row): `output/subhalo/detect/rectangular_adapt/pl_eff_0_no_subhalo/` -- where to look: `results/rectangular_adapt/pl_eff_0_no_subhalo.json` — the witness (untracked in git by the human's ruling; laptop only) -- where to look: `wiki/project/results_summary.md`, `wiki/project/state.md` - -
📋 where the jobs stand - -``` -cd /mnt/c/Users/Jammy/Science/subhalo_validation && hpc/sync jobs -``` - -
- -
📋 run it again - -``` -The PyAutoCortex phase phases/subhalo_validation/rectangular_adapt_pl_eff_0.md needs running again. Draft the rerun body — what came back, and what changes — for my approval, then file it and relaunch: -python3 scripts/cortex.py rule phases/subhalo_validation/rectangular_adapt_pl_eff_0.md rerun --body -python3 scripts/cortex.py move phases/subhalo_validation/rectangular_adapt_pl_eff_0.md ready -cd /mnt/c/Users/Jammy/Science/subhalo_validation && hpc/sync submit