Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
<body>
<h1>📋 PyAutoMind Dashboard</h1>
<p>Every task the Mind is holding. Tap a task's 📋 and its <code>/start_dev</code> command is on your clipboard — paste it into a Claude Code chat to route Claude straight to that task. <a href="#recent">Recent</a> is the same work by date — what has been happening rather than what to do next.</p>
<p class="muted">In flight 1 · Parked 3 · Planned 6 · Backlog 150 · <a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/dashboard.md">markdown version</a></p>
<p class="muted">In flight 1 · Parked 3 · Planned 6 · Backlog 152 · <a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/dashboard.md">markdown version</a></p>
<h2>Start here</h2>
<h3>Highest priority <span class="facets">(filed as high) — showing 12 of 17</span></h3>
<div class="task"><button class="copy" data-cmd="/start_dev draft/triage/jax_zero_contour.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/triage/jax_zero_contour.md">TRIAGE: needs manual review before routing</a> — <span class="facets">medium · safe · high</span></p></div>
Expand Down Expand Up @@ -90,7 +90,7 @@ <h2>Planned <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob
<div class="task"><button class="copy" data-cmd="/route start the planned PyAutoMind task latent-nan-guard-honest-run — its record is in planned.md" aria-label="Copy the Claude command">📋</button><p><b>latent-nan-guard-honest-run</b><span class="facets"> — planned 2026-07-22</span></p></div>
</details>
<h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree/main/draft">markdown version</a></h2>
<p class="muted">150 filed prompts, not started — sorted most-pickable first (priority, then size). 23 of them belong to an epic and are listed only under Epics below.</p>
<p class="muted">152 filed prompts, not started — sorted most-pickable first (priority, then size). 23 of them belong to an epic and are listed only under Epics below.</p>
<details>
<summary>bug — 34</summary>
<div class="task"><button class="copy" data-cmd="/start_dev draft/bug/health_fixes/jax_runtime_and_parity.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/bug/health_fixes/jax_runtime_and_parity.md">Fix release JAX runtime compatibility and likelihood parity</a> — <span class="facets">health_fixes · too-large · supervised · high</span></p></div>
Expand Down Expand Up @@ -229,9 +229,11 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<div class="task"><button class="copy" data-cmd="/start_dev draft/refactor/pyautomind/repos_sync_check_dedup.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/refactor/pyautomind/repos_sync_check_dedup.md">Deduplicate repos_sync.py's check/write pairs</a> — <span class="facets">pyautomind · medium · safe · low</span></p></div>
</details>
<details>
<summary>test — 3</summary>
<summary>test — 5</summary>
<div class="task"><button class="copy" data-cmd="/start_dev draft/test/autolens_workspace_developer/mge_jit_regression_rebaseline.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/test/autolens_workspace_developer/mge_jit_regression_rebaseline.md">Re-baseline the MGE imaging JIT profiling regression value</a> — <span class="facets">autolens_workspace_developer · too-large · supervised · high</span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/test/workspaces/restore_workspace_test_likelihood_baselines.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/test/workspaces/restore_workspace_test_likelihood_baselines.md">Restore absolute NumPy likelihood regression baselines in the <code>_workspace_test</code></a> — <span class="facets">workspaces · too-large · supervised · high</span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/test/pyautoheart/smoke_relevance_gate.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/test/pyautoheart/smoke_relevance_gate.md">Relevance-gate the reusable smoke workflow so a PR only runs</a> — <span class="facets">pyautoheart · medium · supervised · normal</span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/test/workspaces/slowest_smoke_gate_scripts.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/test/workspaces/slowest_smoke_gate_scripts.md">Speed up the three slowest autolens_workspace_test smoke-gate scripts</a> — <span class="facets">workspaces · medium · supervised · normal</span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/test/workspaces/smoke_workspace_fixes.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/test/workspaces/smoke_workspace_fixes.md">The new workspace smoke-test GitHub Actions (added via feature/smoke-test-ci) surfaced</a> — <span class="facets">workspaces · too-large · supervised · normal</span></p></div>
</details>
<details>
Expand Down
22 changes: 19 additions & 3 deletions dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Every task the Mind is holding, on one page: what is in flight, what is parked,
| [In flight](#in-flight) (`active/`) | 1 |
| [Parked](#parked) (`parked.md`) | 3 |
| [Planned](#planned) (`planned.md`) | 6 |
| [Backlog](#backlog) (`draft/`) | 150 |
| [Backlog](#backlog) (`draft/`) | 152 |

## Start here

Expand Down Expand Up @@ -235,7 +235,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.

## Backlog

**150** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **23** of them belong to an epic and are listed only under [Epics](#epics) below.
**152** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **23** of them belong to an epic and are listed only under [Epics](#epics) below.

<details>
<summary><b>bug</b> — 34</summary>
Expand Down Expand Up @@ -1220,7 +1220,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
</details>

<details>
<summary><b>test</b> — 3</summary>
<summary><b>test</b> — 5</summary>

<details><summary>📋 <a href="draft/test/autolens_workspace_developer/mge_jit_regression_rebaseline.md">Re-baseline the MGE imaging JIT profiling regression value</a> — autolens_workspace_developer · too-large · supervised · high</summary>

Expand All @@ -1238,6 +1238,22 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.

</details>

<details><summary>📋 <a href="draft/test/pyautoheart/smoke_relevance_gate.md">Relevance-gate the reusable smoke workflow so a PR only runs</a> — pyautoheart · medium · supervised · normal</summary>

```
/start_dev draft/test/pyautoheart/smoke_relevance_gate.md
```

</details>

<details><summary>📋 <a href="draft/test/workspaces/slowest_smoke_gate_scripts.md">Speed up the three slowest autolens_workspace_test smoke-gate scripts</a> — workspaces · medium · supervised · normal</summary>

```
/start_dev draft/test/workspaces/slowest_smoke_gate_scripts.md
```

</details>

<details><summary>📋 <a href="draft/test/workspaces/smoke_workspace_fixes.md">The new workspace smoke-test GitHub Actions (added via feature/smoke-test-ci) surfaced</a> — workspaces · too-large · supervised · normal</summary>

```
Expand Down
130 changes: 130 additions & 0 deletions draft/test/pyautoheart/smoke_relevance_gate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Relevance-gate the reusable smoke workflow so a PR only runs what its diff can affect

Type: test
Target: PyAutoHeart
Repos:
- PyAutoHeart
- autolens_workspace_test
- autogalaxy_workspace_test
- autolens_workspace
Difficulty: medium
Autonomy: supervised
Priority: normal
Status: formalised

`PyAutoHeart/.github/workflows/smoke-tests.yml` — the reusable workflow every
workspace's `smoke_tests.yml` is a thin caller of — has exactly one skip
condition: a docs-only gate that skips the matrix when every changed file
matches `*.md`, `docs/`, `LICENSE` or `runtime.txt`. Anything else runs the
full curated smoke list, whatever it touched.

This prompt cuts how *often* the gate runs. Making the slow entries cheaper is
the sibling prompt `draft/test/workspaces/slowest_smoke_gate_scripts.md`; they
compound but are separate changes in separate repos.

## Why

- `autolens_workspace_test` smoke costs ~11m20s and fires on every PR event
plus every push to `main`. Run numbers put it at roughly 17 runs/week
(#555 on 2026-07-28 → #616 on 2026-08-22; approximate, since superseded PR
runs are cancelled).
- `autolens_workspace` costs ~8m40s over 37 entries, 5.8 runs/day in the week
to 2026-08-23.
- The failure mode is already recorded in the repo. `smoke_tests.txt`, on the
2026-08-22 disable of `multi_dataset/jax_likelihood/mge.py`: *"Hit 4/4 jobs
(3.12 and 3.13, twice each) on autolens_workspace_test#261, whose diff
touches no script this gate runs."*
- The two extremes already exist and are 80x apart: a docs-only PR finishes in
**8 seconds** (autolens_workspace_test run #605, autogalaxy_workspace #545);
a one-character change to any non-markdown file costs the full run.

## Task

Two tiers, shippable independently. Tier 1 alone is most of the win.

1. **Skip when no script can be affected.** Extend the existing `changes` job's
classification: if the diff touches nothing under `scripts/`, `config/`,
`smoke_tests.txt`, `smoke_notebooks.txt` or `.github/`, skip the matrix the
same way the docs-only path does. Same fail-closed shape, same
`docs_only`-style output, one more reason to skip.
2. **Narrow the entry list to the packages the diff touches, plus a fixed
core.** The smoke entries cluster cleanly by top-level package, so a
directory-level mapping is enough — no dependency analysis needed:

| package | autolens_ws_test | autogalaxy_ws_test | autolens_workspace |
|---|---:|---:|---:|
| `imaging/` | 232.8s (42%) | 175.8s (32%) | 63.6s (18%) |
| `multi_dataset/` | — | 177.1s (32%) | 13.5s (4%) |
| `misc/` | 154.6s (28%) | 37.6s (7%) | — |
| `interferometer/` | 92.1s (17%) | 150.6s (27%) | 54.6s (16%) |
| `point_source/` | 47.7s (9%) | — | 15.7s (4%) |
| `multi_galaxy/` | 25.8s (5%) | 11.8s (2%) | 166.4s (47%) |
| `group/` | — | — | 22.9s (7%) |
| `guides/` | — | — | 14.3s (4%) |
| `cluster/` | — | 4.2s (1%) | — |

A PR touching only `scripts/misc/` would run 155s instead of 553s; one
touching only `multi_galaxy/` in `_test` would run 26s. Tier 2 needs the
selected set passed down to `run_smoke.py` as an input, so it also touches
each workspace's vendored runner — scope it deliberately or defer it.

## autogalaxy_workspace_test is the same size and has no other lever

Measured after this prompt was first filed (run 32533004337, 2026-08-21, py3.12,
**557.1s across 37 entries** — within 4s of autolens_workspace_test's 553.0s,
and again reconciling exactly to the step wall-clock).

Unlike its autolens sibling it has **no hot spot at all**: slowest entry 40.0s,
median 13.5s, and the top three are only 21% of the run. There is nothing to
speed up, so the sibling prompt does not apply and this gate is the *only*
lever for that repo.

What it does have is a combinatorial matrix: 25 of its 37 entries are
`{imaging, interferometer, multi_dataset}/jax_{likelihood,grad}/{lp, mge,
mge_group, rectangular, rectangular_mge, delaunay, delaunay_mge}`, i.e. the
same handful of meshes crossed with three dataset types. Tier 2's
package-level narrowing maps onto that cleanly. A representative-subset
policy for the PR gate (full cross-product weekly) is worth considering
alongside it, but is a separate decision and belongs to that repo, not here.

Checked and NOT a factor: its six `jax_grad/` entries were the obvious
suspect, since Heart budgets that class at 1800s for running at full
resolution. Measured they are 86.4s total (15.5%), 10.8–21.8s each. The
expensive jax_grad scripts are the autolens ones, and those are not in any
smoke list.

## Hard constraints

- **Do not implement this with `on.pull_request.paths`.** A job skipped by a
path filter never reports a conclusion, so a required status check sits
pending forever and blocks the merge. The in-workflow `changes` job emits a
real `skipped`, which satisfies required-check semantics — the workflow's own
comment already says so. Keep the skip inside the workflow.
- **Fail closed**, matching the docs-only gate exactly: no base SHA, unfetchable
base, empty diff, or a single unclassifiable path ⇒ run everything. Only an
explicit every-file-matches verdict may skip. Keep the two-dot diff against
the base *tip* so upstream drift shows up as extra files.
- **Do not touch the push-to-`main` run.** `PyAutoHeart/config/repos.yaml` lists
`workspaces_test: ["Smoke Tests"]` and `workspaces: ["Smoke Tests",
"Navigator Check"]` under `required_workflows`; `ci_status` reads their
conclusion on the `main` HEAD commit and `readiness` gates RED on failure.
`cancelled` is in Heart's `FAILURE_CONCLUSIONS`, which is why the callers'
concurrency block only cancels non-`main` refs. Narrowing PR-side runs is
free — Heart never reads them — but a skipped or cancelled `main` run breaks
the readiness gate. If tier 1 would skip on a `main` push, gate it to
`pull_request` events only.
- The change is Heart-owned and lands once for every caller (both `_workspace`
and `_workspace_test` families, plus the HowTo repos). Verify against at
least one caller of each shape before merging.

## Acceptance

- A PR touching only `scripts/misc/` in `autolens_workspace_test` runs
materially less than the full 553s (tier 2), or a PR touching only
`README.md` + a config sidecar still skips (tier 1).
- A PR with an unresolvable base still runs the full matrix.
- The `Smoke Tests` check reports `skipped`, not pending, on every skip path.
- `main`-push runs are unchanged and Heart's `ci_status` still reads a real
conclusion.

<!-- formalised by the Intake (Conception) Agent on 2026-08-23 from user-intake -->
Loading
Loading