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
12 changes: 12 additions & 0 deletions active.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,15 @@
- registered: 2026-08-19 by the wake_up session — the issuing session (claude/autofit-priors-messages-audit-ylvenv)
filed the prompt + issue but not this entry, tripping Lifecycle Drift on main.
- repos-none-claimed: this entry claims NO repos — one line deliberately, not 2-space bullets.

## jax-stall-shared-preloads-retime-refutation
- issue: https://github.com/PyAutoLabs/PyAutoMind/issues/328 (issued 2026-08-25)
- issued: 2026-08-25
- prompt: active/jax_stall_shared_preloads_retime_refutation.md
- epic: jax-compile-stall (evidence-recording only; not a phase)
- status: library-dev
- worktree: ~/Code/PyAutoLabs-wt/jax-stall-shared-preloads-retime-refutation
- repos:
- PyAutoMind (branch claude/weekly-smoke-timings-naming-012fuj)
- note: web-github session — no local worktree created. Mind-only record change; parks nothing.

119 changes: 119 additions & 0 deletions active/jax_stall_shared_preloads_retime_refutation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# The 2026-08-24 retime returned `shared_preloads.py` to coverage; it stalled the next day

Type: bug
Target: ci
Repos:
- @PyAutoMind
Epic: jax-compile-stall
Difficulty: small
Autonomy: safe
Priority: medium
Status: issued
Filed: 2026-08-25
Issued: 2026-08-25

Evidence-recording task against the jax-stall ledger
[`jax_vmap_jit_compile_stall.md`](jax_vmap_jit_compile_stall.md). Surfaced
2026-08-25 by the `weekly-smoke-timings-naming` verification sweep
(PyAutoHeart#182), which dispatched a full `workspace-smoke.yml` run and turned
up a stall the ledger does not know about.

## What was observed

PyAutoHeart `Workspace Smoke` run **32902243623** (2026-08-25, `workflow_dispatch`),
job `smoke / run_scripts (3.12, autolens_test, multi_dataset)` (97978549465).
16 of 17 scripts passed:

```
scripts/multi_dataset/jax_likelihood/shared_preloads.py ... TIMEOUT (300s)
```

Its siblings in the same job, same commit, same runner:

| Script | Result |
|---|---|
| `jax_likelihood/mge.py` | PASS 11.7s |
| `jax_likelihood/rectangular_mge.py` | PASS 20.7s |
| `jax_likelihood/mge_group.py` | PASS 49.3s |
| `jax_likelihood/delaunay_mge.py` | PASS 20.2s |
| `jax_likelihood/rectangular.py` | PASS 15.8s |
| `jax_likelihood/shared_preloads.py` | **TIMEOUT (300s)** |

A >6x outlier against the slowest sibling, with every other member of the family
completing comfortably — the bimodal signature the ledger already uses to
separate a stall from slowness.

## Why this is not just another occurrence

**The 2026-08-24 retime refuted this entry's SLOW marker and put it back in
coverage. It hung on the next weekly run.**

`shared_preloads.py` sat in the PyAutoHeart#74 "flakes at the 1800s cap" SLOW
family. On 2026-08-24 that family was retimed (5 repeats per Python leg, 300s
cap; runs 32741371308 + 32741386752) and eight entries "completed 5/5 on both
legs (slowest 54.5s) and were removed — marker refuted, scripts back in mega-run
coverage" (`autolens_workspace_test/config/build/no_run.yaml`, and
`complete/2026/08/smoke-surface-retime-sweep.md`).

Verified 2026-08-25 against `autolens_workspace_test` at `7fc497d`:

- `config/build/no_run.yaml` — **no `shared_preloads` entry**. It is in mega-run
and weekly coverage.
- `smoke_tests.txt` line 15 — still **commented out**, "disabled 2026-07-22:
exceeds the 300s smoke cap (measured 300s+ in CI, autolens_workspace_test#196)
… it is the heaviest entry here and does not belong in the fast PR gate."

So the two exclusion lists now disagree about this script, and the list that
readmitted it did so on ~10 executions at ≤54.5s. **A 10-execution sample at
~50s cannot exclude a low-probability hang** — which is exactly the claim the
retime's "marker refuted" conclusion rests on. The retime was right that the
script is not *slow*; it was not powered to see that it *stalls*.

That is the ledger's own phase-2 question (§ Task step 1: "a slow script has a
tight timing distribution, a stalling one is bimodal") landing on the other side
from where the retime put it.

## Also new: the channel

Every occurrence in the ledger comes from a workspace repo's own `Smoke Tests`
gate or from `release-integrate`. This is its **first from the weekly
`workspace-validation.yml` sweep** — a different harness (PyAutoHeart-owned,
`script_matrix.py`-driven, honouring `no_run.yaml` and *not* `smoke_tests.txt`)
reproducing the same signature. That is corroboration the stall is not an
artifact of one repo's runner configuration.

It also means the weekly channel runs scripts the PR gate deliberately excludes,
which is how a script disabled in `smoke_tests.txt` since July was still able to
burn a 300s cap in CI.

## Task

Record this in the ledger — do not park the script.

1. Append a `## New occurrence — 2026-08-25, multi_dataset/jax_likelihood/shared_preloads.py`
section to [`jax_vmap_jit_compile_stall.md`](jax_vmap_jit_compile_stall.md),
in the shape of the existing § "New occurrence — 2026-08-24" section: run and
job ids, the sibling timing table, and the affected-set consequence.
2. State the retime refutation explicitly, so phase 2's written answer is not
left contradicting the evidence: this entry was readmitted to coverage on a
sample too small to exclude a stall, and the readmission is now falsified.
3. Extend the ledger's affected-set shape to name `shared_preloads.py`, and note
the `smoke_tests.txt` / `no_run.yaml` disagreement about it.
4. Add the "first occurrence on the weekly `workspace-validation` channel" point,
with the cross-harness corroboration it gives.

**Deliberately out of scope:** re-adding `shared_preloads.py` to `no_run.yaml`.
The ledger's own § "This is why quarantining is the wrong end state" argues
against whack-a-mole parking that strips coverage of the heaviest JAX paths, and
the 2026-08-24 precedent for `multi_dataset/jax_likelihood/mge.py` was to record
and deliberately **not** park. Any re-marking is phase 3's call with a root cause
in hand, not this task's.

## Acceptance

- The ledger names `shared_preloads.py` in its affected set, with the run/job
evidence and the sibling timings.
- The 2026-08-24 retime refutation for this entry is recorded in writing, so a
reader of phase 2's conclusion sees the counter-evidence beside it.
- No script is parked, disabled, or re-marked by this task.
- `lifecycle.py check` clean; PyAutoMind is the only repo touched.
17 changes: 9 additions & 8 deletions dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@
</head>
<body>
<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>
<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>137</b><span>Backlog</span></li></ul>
<ul class="stats"><li><b>2</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>137</b><span>Backlog</span></li></ul>
<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>
<div class="task"><button class="copy" data-cmd="Bring the PyAutoMind dashboard up to date. Work in the PyAutoMind checkout:

Expand Down Expand Up @@ -233,6 +233,7 @@ <h3>Quick wins <span class="facets">(small enough, and safe enough to run unatte
<h2>In flight <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active.md">markdown version</a></h2>
<p class="muted">Issued — each has an open GitHub issue and usually a branch.</p>
<div class="task"><button class="copy" data-cmd="/start_dev active/16_transformed_message_factor_gradient_unpack.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/16_transformed_message_factor_gradient_unpack.md"><code>@PyAutoFit</code> <code>TransformedMessage.factor_gradient</code> crashes on first call</a> — <a href="https://github.com/PyAutoLabs/PyAutoFit/issues/1501">issue #1501</a><span class="facets"> — issued 2026-08-19</span> — <span class="facets">HOLD — do not start dev. Fix-or-delete hangs off the PyAutoFit#1498 logpdf-contract</span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev active/jax_stall_shared_preloads_retime_refutation.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/jax_stall_shared_preloads_retime_refutation.md">The 2026-08-24 retime returned <code>shared_preloads.py</code> to coverage; it stalled the next day</a> — <a href="https://github.com/PyAutoLabs/PyAutoMind/issues/328">issue #328</a><span class="facets"> — issued 2026-08-25</span> — <span class="facets">library-dev</span></p></div>
<h2>Parked <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/parked.md">markdown version</a></h2>
<details>
<summary>3 task(s)</summary>
Expand Down Expand Up @@ -394,6 +395,12 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<p class="muted">The 50 newest things to happen to the work in hand, newest first — issued, parked, filed. Every other section on this page is laid out by state, which is exactly why none of them can answer “what has been happening?”. Shipped work is not here: it is read from <code>complete/index.md</code>, and a thousand records deep it would crowd out everything anyone can still act on. Showing the newest 10; … opens the next 10.</p>
<table class="recent">
<tr>
<td class="when">2026-08-25</td>
<td class="what">issued</td>
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/jax_stall_shared_preloads_retime_refutation.md">The 2026-08-24 retime returned <code>shared_preloads.py</code> to coverage; it…</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev active/jax_stall_shared_preloads_retime_refutation.md" aria-label="Copy the Claude command">📋</button></td>
</tr>
<tr>
<td class="when">2026-08-24</td>
<td class="what">filed</td>
<td><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></td>
Expand Down Expand Up @@ -447,7 +454,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue.md">pynufft removal: unswept downstream residue (1 hard break + stale…</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md" aria-label="Copy the Claude command">📋</button></td>
</tr>
<tr>
<tr hidden>
<td class="when">2026-08-23</td>
<td class="what">filed</td>
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md">Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI…</a></td>
Expand Down Expand Up @@ -687,12 +694,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<td><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…</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev draft/bug/autolens/interferometer_release_leg_oom.md" aria-label="Copy the Claude command">📋</button></td>
</tr>
<tr hidden>
<td class="when">2026-07-31</td>
<td class="what">filed</td>
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/research/autolens/quick_update_plotting_cost.md">Quick-update plotting cost — minutes per update, and it is not JAX…</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev draft/research/autolens/quick_update_plotting_cost.md" aria-label="Copy the Claude command">📋</button></td>
</tr>
</table>
<button class="more" data-page="10">… 10 more (40 left)</button>
<h2>Epics <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/epics.md">markdown version</a></h2>
Expand Down
Loading
Loading