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
31 changes: 27 additions & 4 deletions .github/workflows/arxiv_papers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ name: pyauto-arxiv-papers
# 4–5 sentence summary, then a compact list of the rest.
# Cadence: weekday mornings. Empty days STILL post a short "no new strong-
# lensing papers today" heartbeat (user, 2026-07-13) — so silence in #papers
# always means a broken run, never a genuinely empty one.
# always means a broken run, never a genuinely empty one. The Memory inbox step
# at the bottom carries the same invariant onto the knowledge board: it runs on
# every weekday and stamps `last digest: <date>` even with nothing to file, so
# an empty board is a quiet day and a stale one is a broken run
# (PyAutoMemory#58).
#
# Timing: arXiv announces new astro-ph at 20:00 US Eastern, Sun–Thu, which is
# ~01:00 UK (00:00 UTC in summer / 01:00 UTC in winter) — the papers are live in
Expand Down Expand Up @@ -101,6 +105,12 @@ jobs:
# spend no subscription usage, but still write the heartbeat payload so
# the POST step below has something to send. uk_date is read from
# arxiv_papers.json, which the fetch always writes even at count=0.
#
# It also writes an EMPTY arxiv_survivors.json — the same file the
# Claude step writes on its own no-papers day. Every path therefore
# produces one, so the inbox step below can run unconditionally and
# stamp the quiet day, and a MISSING survivors file there stays what it
# has always been: a real failure, not an empty day.
if: ${{ steps.fetch.outputs.count == '0' }}
run: |
set -euo pipefail
Expand All @@ -120,6 +130,8 @@ jobs:
}
with open("slack_payload.json", "w") as f:
json.dump(payload, f, indent=2)
with open("arxiv_survivors.json", "w") as f:
json.dump({"papers": []}, f)
print(f"Wrote no-papers heartbeat for {uk_date}.")
PY

Expand Down Expand Up @@ -291,6 +303,14 @@ jobs:
# knowledge board renders them with one-tap add / intake / cite / dismiss
# buttons and un-acted lines lapse after a week.
#
# It runs on EVERY weekday, including days with nothing to file, because
# it also writes the inbox's `last digest: <date>` stamp — the board's
# equivalent of the #papers empty-day heartbeat. Without a stamp on quiet
# days the board cannot tell "arXiv was quiet" from "the filing broke and
# the papers were lost", which is the exact ambiguity that hid the
# 2026-08-25 PAT failure (PyAutoMemory#58). A quiet day is therefore a
# one-line commit, not silence.
#
# This DELIBERATELY reverses the original "the digest never commits"
# constraint (PyAutoMemory#35): the human gate moved from "paste the
# block into a session" to "tap a button on the board", it did not go
Expand All @@ -306,7 +326,6 @@ jobs:
# all live in PyAutoMemory's scripts/inbox_actions.py — this step only
# supplies the papers, so the line format is never re-expressed here.
- name: File the survivors into the PyAutoMemory arXiv inbox
if: ${{ steps.fetch.outputs.count != '0' }}
env:
PAT: ${{ secrets.PAT_PYAUTOLABS }}
run: |
Expand All @@ -332,9 +351,13 @@ jobs:
# reading queue, so a re-run (or a paper announced twice) adds nothing.
added=$(python3 scripts/inbox_actions.py append \
--papers-file arxiv_survivors.json)
# Unconditional, and the whole reason this step no longer skips empty
# days: it records that the digest ran at all. inbox_actions.py owns
# the line, so the format is never re-expressed here.
stamped=$(python3 scripts/inbox_actions.py stamp)
swept=$(python3 scripts/inbox_actions.py sweep)
rm arxiv_survivors.json
echo "inbox: ${added}, ${swept}"
echo "inbox: ${added}, ${swept}, ${stamped}"

if [ -z "$(git status --porcelain -- arxiv-inbox.md)" ]; then
echo "inbox unchanged — nothing to commit."
Expand All @@ -343,7 +366,7 @@ jobs:
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add arxiv-inbox.md
git commit -m "inbox: ${added}, ${swept} (arXiv digest ${uk_date})"
git commit -m "inbox: ${added}, ${swept}, ${stamped} (arXiv digest ${uk_date})"
# The retry is for a concurrent-push race — the knowledge board and the
# queue-action workflows commit to this same repo — so a rejected push
# is worth a rebase and another go. An auth failure is NOT that: the
Expand Down
33 changes: 33 additions & 0 deletions active.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,36 @@
- 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.

## inbox-board-staleness-signal
- issue: https://github.com/PyAutoLabs/PyAutoMemory/issues/58
- issued: 2026-08-25
- prompt: active/inbox_board_staleness_signal.md
- status: ready-to-ship — both legs implemented, tested and pushed; no PR opened yet
- environment: web-github (no worktree — the session's clones: /home/user/pyautomemory,
/home/user/PyAutoMind)
- repos:
- PyAutoMemory: claude/inbox-board-staleness-signal-onzg34
- PyAutoMind: claude/inbox-board-staleness-signal-onzg34
- summary: |
Sixth in the paper-management line, split out of arxiv-inbox-pat-scope: the board's
empty arXiv inbox reads the same whether arXiv was quiet or the filing broke.
Fix is a `last digest: <date>` line in arxiv-inbox.md owned by inbox_actions.py
(no new state file), rendered on the board with the staleness warning computed
client-side — a render-time warning could never fire, since a broken digest means
no push and the published page freezes at its last good render.
PyAutoMind leg (beyond the prompt's stated scope, deliberate): arxiv_papers.yml must
stamp on quiet days too, or the stamp goes stale on exactly the days it should prove
were quiet.
Also clearing a pre-existing red on PyAutoMemory main — 498e1a8 added a tracked
.claude/ without adding it to ALLOWED_TOP_DIRS in validate_structure.py, so both
`make validate` and `make test` fail on arrival.
Done: PyAutoMemory 05aa803 (the allowlist red, separate commit) + a4c5b64 (stamp,
board, 23 new tests — 92 green, make validate green); PyAutoMind 1bc6a47a (the
workflow leg; YAML parses, every run block passes bash -n, 197 tests green).
All four digest paths rehearsed against a real PyAutoMemory checkout with the
shell blocks extracted verbatim from the workflow, and the shipped freshness JS
cross-checked against the Python over 30 consecutive stamp dates.
NOT fired live: claude-code-action refuses to run when arxiv_papers.yml differs
from the default branch's copy and then exits success, so no branch dispatch can
reach those steps — the scheduled run on main is the first genuine exercise.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Autonomy: supervised
Priority: normal
Status: formalised
Filed: 2026-08-25
Issued: 2026-08-25

Split out of `complete/2026/08/arxiv-inbox-pat-scope.md`, which fixed the filing
bug but deliberately left this open.
Expand Down
14 changes: 7 additions & 7 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>141</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>140</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 @@ -234,6 +234,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/inbox_board_staleness_signal.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/inbox_board_staleness_signal.md">The knowledge board's empty inbox should distinguish quiet from broken</a> — <a href="https://github.com/PyAutoLabs/PyAutoMemory/issues/58">issue #58</a><span class="facets"> — issued 2026-08-25</span> — <span class="facets">ready-to-ship — both legs implemented, tested and pushed; no PR opened yet</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 All @@ -251,16 +252,15 @@ <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">141 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>
<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>
<details>
<summary>feature — 28</summary>
<summary>feature — 27</summary>
<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>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autoarray/rectangular_bilinear_rtu_mesh_split.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autoarray/rectangular_bilinear_rtu_mesh_split.md">Rectangular mesh split: Bilinear (fast CPU default) vs RTU (advanced/GPU)</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>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autoarray/numba_cpu_likelihood_kernel_cdf_fast_path.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autoarray/numba_cpu_likelihood_kernel_cdf_fast_path.md">Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88% lever)</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autoarray</span><span class="pill y">large</span><span class="pill n">supervised</span><span class="pill r">high</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autofit/prior_exit_sampler_coverage.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autofit/prior_exit_sampler_coverage.md">Which other searches need prior-support handling — coverage audit after Prodigy</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autofit</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autofit/search_seed_reproducibility.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autofit/search_seed_reproducibility.md">Give PyAutoFit searches a <code>seed</code> — today no search can be made…</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autofit</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/pyautobrain/brain_board_follow_ups.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/pyautobrain/brain_board_follow_ups.md">Brain board follow-ups: what real mornings surface</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">pyautobrain</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/pyautomemory/inbox_board_staleness_signal.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/pyautomemory/inbox_board_staleness_signal.md">The knowledge board's empty inbox should distinguish quiet from broken</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">pyautomemory</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autoarray/multiwavelength_inversion.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autoarray/multiwavelength_inversion.md">Can create a list of InversionMatrix objects for each dataset</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 n">normal</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autolens_workspace/joss_cluster_benchmark_tuning.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autolens_workspace/joss_cluster_benchmark_tuning.md">Tune cluster-scale JOSS benchmarks toward their 5-minute targets</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autolens_workspace</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/pyautomind/complete_archive_wiki.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/pyautomind/complete_archive_wiki.md">Token-light wiki index over the complete/ archive</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">pyautomind</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
Expand Down Expand Up @@ -400,9 +400,9 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
<table class="recent">
<tr>
<td class="when">2026-08-25</td>
<td class="what">filed</td>
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/pyautomemory/inbox_board_staleness_signal.md">The knowledge board's empty inbox should distinguish quiet from broken</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev draft/feature/pyautomemory/inbox_board_staleness_signal.md" aria-label="Copy the Claude command">📋</button></td>
<td class="what">issued</td>
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/inbox_board_staleness_signal.md">The knowledge board's empty inbox should distinguish quiet from broken</a></td>
<td class="pick"><button class="copy" data-cmd="/start_dev active/inbox_board_staleness_signal.md" aria-label="Copy the Claude command">📋</button></td>
</tr>
<tr>
<td class="when">2026-08-24</td>
Expand Down
Loading
Loading