Skip to content

Commit 6d93c70

Browse files
authored
Merge pull request #316 from PyAutoLabs/claude/pyautoheart-stale-r4swxg
prompt: rescue run_smoke_copy_drift from a stale local main
2 parents 14d2f3d + 9098b2b commit 6d93c70

3 files changed

Lines changed: 112 additions & 6 deletions

File tree

dashboard.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@
185185
</head>
186186
<body>
187187
<header class="hero"><span class="orb"><svg class="mark" viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="24" cy="24" r="20.4"/><path d="M20.2,37.6 L20.2,33.6 C20.2,32.4 19.4,31.6 18.4,30.8 C16.8,29.6 15.8,28.2 15.6,26.6 C15.5,25.6 14.9,25.2 13.9,24.9 C12.6,24.5 12.3,23.7 13.0,22.7 C13.8,21.6 14.5,20.6 14.6,19.4 C15.0,15.4 18.2,12.2 22.4,11.8 C27.2,11.3 31.6,14.6 32.3,19.2 C32.8,22.4 31.6,25.0 30.6,27.0 C29.9,28.4 29.6,29.6 29.6,31.2 L29.6,37.6"/><circle cx="24.6" cy="19.6" r="4.4"/><path d="M22.5,19.7 L24.0,21.3 L26.8,18.1"/><path d="M34.2,16.5 L38.8,16.5 M35.2,21.0 L39.4,21.0 M33.6,25.5 L37.2,25.5"/><g fill="currentColor" stroke="none"><circle cx="40.1" cy="16.5" r="1.4"/><circle cx="40.7" cy="21.0" r="1.4"/><circle cx="38.5" cy="25.5" r="1.4"/></g></svg></span><h1>PyAuto<b>Mind</b><span class="kind">Dashboard</span></h1><div class="rule"></div><p class="tag">Intent. Priority. Flow.</p></header><p class="lede">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>
188-
<ul class="stats"><li><b>1</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>139</b><span>Backlog</span></li></ul>
188+
<ul class="stats"><li><b>1</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>140</b><span>Backlog</span></li></ul>
189189
<div class="fresh"><p><b>Last updated 2026-08-25.</b> This page is generated from <code>active/</code>, <code>draft/</code> and the registry files, so it is only as current as they are. <code>dashboard_refresh.yml</code> re-renders it on every push to <code>main</code> — that heals a stale page, but not a stale prompt: a task that shipped without its prompt advancing to <code>complete/</code> keeps rendering here as pickable backlog. Reconciling those is the refresh below.</p>
190190
<div class="task"><button class="copy" data-cmd="Bring the PyAutoMind dashboard up to date. Work in the PyAutoMind checkout:
191191
@@ -251,7 +251,7 @@ <h2>Planned <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob
251251
<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>
252252
</details>
253253
<h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree/main/draft">markdown version</a></h2>
254-
<p class="muted">139 filed prompts, not started — sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.</p>
254+
<p class="muted">140 filed prompts, not started — sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.</p>
255255
<details>
256256
<summary>feature — 27</summary>
257257
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autoarray/numba_cpu_likelihood_mge_convolution_and_caching.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autoarray/numba_cpu_likelihood_mge_convolution_and_caching.md">Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autoarray</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill r">high</span></span></p></div>
@@ -308,7 +308,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
308308
<div class="task"><button class="copy" data-cmd="/start_dev draft/bug/autolens/interferometer_release_leg_oom.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/bug/autolens/interferometer_release_leg_oom.md">interferometer/start_here.py OOM in nightly release-validation integrate leg</a><span class="tags"><span class="pill w">🐛 bug</span><span class="pill">autolens</span></span></p></div>
309309
</details>
310310
<details>
311-
<summary>maintenance — 24</summary>
311+
<summary>maintenance — 25</summary>
312312
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/autocti_workspace_navigator_check.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/autocti_workspace_navigator_check.md">autocti_workspace has no Navigator Check, so its CI can never roll…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill r">high</span></span></p></div>
313313
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md">Untrack the generated FITS test artifacts in autoarray</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">libraries</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
314314
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/smoke_install_stale_jax_pin.md">smoke_install.sh's stale <code>jax&lt;0.7</code> pin — CI is on the right jax…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">low</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
@@ -320,6 +320,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
320320
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md">Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
321321
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md">autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens_workspace_developer</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
322322
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/heart_smoke_table_autocti.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/heart_smoke_table_autocti.md">Heart's local smoke runner cannot run any CTI workspace — no autocti…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
323+
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/run_smoke_copy_drift.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/run_smoke_copy_drift.md">run_smoke.py: three runner variants across 10 repos, no sync mechanism</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
323324
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/wiki_currency_check_version_gate.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/wiki_currency_check_version_gate.md">wiki-currency's --check-version gate rots on every library main merge</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
324325
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/libraries/dep_cap_refresh_2026_08.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/libraries/dep_cap_refresh_2026_08.md">Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">libraries</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
325326
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/pyautomemory/canonical_key_todo_sweep.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/pyautomemory/canonical_key_todo_sweep.md">PyAutoMemory canonical-key TODO sweep</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">pyautomemory</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>

dashboard.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ anything you could not verify.
4545
| [In flight](#in-flight) (`active/`) | 1 |
4646
| [Parked](#parked) (`parked.md`) | 3 |
4747
| [Planned](#planned) (`planned.md`) | 5 |
48-
| [Backlog](#backlog) (`draft/`) | 139 |
48+
| [Backlog](#backlog) (`draft/`) | 140 |
4949

5050
## Start here
5151

@@ -261,7 +261,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
261261

262262
## Backlog
263263

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

266266
<details>
267267
<summary><b>feature</b> — 27</summary>
@@ -666,7 +666,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
666666
</details>
667667

668668
<details>
669-
<summary><b>maintenance</b> — 24</summary>
669+
<summary><b>maintenance</b> — 25</summary>
670670

671671
<details><summary>📋 <a href="draft/maintenance/ci/autocti_workspace_navigator_check.md">autocti_workspace has no Navigator Check, so its CI can never roll…</a> — ci · medium · supervised · high</summary>
672672

@@ -756,6 +756,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
756756

757757
</details>
758758

759+
<details><summary>📋 <a href="draft/maintenance/ci/run_smoke_copy_drift.md">run_smoke.py: three runner variants across 10 repos, no sync mechanism</a> — ci · medium · supervised · normal</summary>
760+
761+
```
762+
/start_dev draft/maintenance/ci/run_smoke_copy_drift.md
763+
```
764+
765+
</details>
766+
759767
<details><summary>📋 <a href="draft/maintenance/ci/wiki_currency_check_version_gate.md">wiki-currency's --check-version gate rots on every library main merge</a> — ci · medium · supervised · normal</summary>
760768

761769
```
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# run_smoke.py: three runner variants across 10 repos, no sync mechanism
2+
3+
Type: maintenance
4+
Target: ci
5+
Repos:
6+
- @PyAutoHands
7+
Difficulty: medium
8+
Autonomy: supervised
9+
Priority: normal
10+
Status: draft
11+
12+
> **Re-scoped 2026-08-05.** The original finding below is preserved for history
13+
> but its two headline claims are now measured to be wrong: step 1 is already
14+
> done, and "9 copies in 5 revisions" conflates three structurally different
15+
> programs. Read the correction block first — it is the current statement of
16+
> the task.
17+
18+
## Original finding (2026-07-25, during the notebook skip-guard fix)
19+
20+
Every workspace's PR smoke gate runs its own copy of
21+
`.github/scripts/run_smoke.py`. There are **9 copies across the workspace
22+
repos in 5 distinct revisions** — they have already drifted:
23+
autofit_workspace + autolens_workspace share one revision; HowToLens +
24+
HowToGalaxy + autofit_workspace_test share another; autogalaxy_workspace,
25+
autogalaxy_workspace_test, autolens_workspace_test and autocti_workspace_test
26+
are each unique. PyAutoHeart's reusable smoke-tests.yml deliberately leaves
27+
the runner in the workspace, but nothing keeps the copies aligned.
28+
29+
Immediate consequence: PyAutoHands#198 taught the authoritative executor
30+
(`autohands/build_util.py::execute_notebook`) to treat a clean `SystemExit: 0`
31+
notebook exit as a PASS (the optional-dep skip-guard idiom), but the 9 smoke
32+
copies still carry their own `execute_notebook` and keep reporting the
33+
spurious FAIL until each adopts it. Adoption is ~2 lines per repo (they
34+
already import `env_config` and `build_util.py_to_notebook` from PyAutoHands);
35+
the exact snippet + full copy inventory is documented in
36+
PyAutoHands `docs/internals.md`.
37+
38+
## Correction (2026-08-05, measured during the jupyter-guard fix)
39+
40+
Measured across the checkouts, not inferred. There are **10** copies, not 9,
41+
and they are **three different programs**, not five revisions of one:
42+
43+
| Variant | Repos | Lines | Notebook leg | `is_clean_skip_exit` |
44+
|---|---|---|---|---|
45+
| **workspace** | autofit_workspace, autogalaxy_workspace, autolens_workspace | ~266 | yes | **already adopted** |
46+
| **workspace_test** | autofit_workspace_test, autogalaxy_workspace_test, autocti_workspace_test | 113 | no | n/a |
47+
| **workspace_test + timeout** | autolens_workspace_test | 193 | no | n/a |
48+
| **HowTo** | HowToLens, HowToGalaxy, HowToFit | 75 | no | n/a |
49+
50+
Consequences for the original task, in order of how much they change it:
51+
52+
1. **Step 1 is done, and was never applicable beyond three repos.** The
53+
skip-guard is adopted in all three notebook-capable copies. The other seven
54+
have no `execute_notebook` at all — they never shell out to `jupyter`, so
55+
there is no spurious FAIL for them to fix. The acceptance criterion "a
56+
notebook exiting via the skip-guard passes every workspace's PR smoke gate"
57+
is already met, because only three gates run notebooks.
58+
2. **The variants differ by feature, not only by drift.** `workspace_test`
59+
exposes `load_smoke_scripts`/`run_one` and no notebook machinery;
60+
`autolens_workspace_test` additionally carries `TIMEOUT_SECS`
61+
(`BUILD_SCRIPT_TIMEOUT`) and a `_kill_group` process-group kill that no
62+
other copy has. That is a capability, not staleness — a naive
63+
"make them byte-identical" would delete it.
64+
3. **The HowTo tier is already the proposed end-state.** Those three are
65+
75-line delegators (`PROJECT = "howtolens"`, straight into PyAutoHands
66+
`build_util`) — the thin-wrapper design step 2 asks whether to build
67+
already exists in-tree as a working precedent to copy.
68+
4. Real remaining drift inside the workspace variant is now **two lines**:
69+
autofit_workspace and autolens_workspace are byte-identical; autogalaxy's
70+
only divergence is an unused `_BUILD_DIR` intermediate variable. The
71+
jupyter-guard fix (autolens_workspace#470) landed the identical patch in all
72+
three, so it did not widen this.
73+
74+
## Task (re-scoped)
75+
76+
1. ~~Roll the 2-line skip-guard adoption across the copies.~~ **Done** — verify
77+
and close out, do not redo.
78+
2. Decide the shared-module question **per variant**, not globally, using the
79+
HowTo delegator as the reference shape:
80+
- Is one PyAutoHands-owned runner with per-repo config the right target, or
81+
two (notebook-capable and script-only)?
82+
- Does `autolens_workspace_test`'s timeout/kill behaviour get promoted to
83+
everyone, or does that repo keep a documented divergence? **Answer this
84+
before writing any code** — it is the only place consolidation destroys
85+
behaviour.
86+
3. Implement whichever shape is chosen, one PR per repo.
87+
4. Drop the vestigial `_BUILD_DIR` line in autogalaxy_workspace if the
88+
workspace variant is not being replaced wholesale.
89+
90+
## Acceptance
91+
92+
- A stated, written decision on the timeout/kill divergence — promoted or
93+
documented-as-intentional — before any repo is touched.
94+
- Each variant is either a thin wrapper over a PyAutoHands-owned module, or
95+
carries a documented reason why it diverges.
96+
- No repo loses behaviour it has today; `autolens_workspace_test` still
97+
enforces its per-script timeout.

0 commit comments

Comments
 (0)