feat: stamp the Memory inbox on quiet days, not just paper days - #320
Merged
Conversation
The board half of PyAutoMemory#58 reads a `last digest: <date>` line to tell a
quiet inbox from a broken one. That line is only worth anything if the digest
writes it on days with nothing to file — otherwise it goes stale on exactly the
days it exists to prove were quiet, and says "broken" about a working run.
So the inbox step loses its `count != 0` guard and runs every weekday. To keep
its preconditions honest, the empty-day heartbeat step now also writes
arxiv_survivors.json as {"papers": []} — the same file the Claude step already
writes on its own no-papers day. Every path produces one, so a MISSING
survivors file in the inbox step stays what it has always been: a real failure,
not an empty day.
The step's other invariants are untouched. It still runs after the Slack POST,
so a cross-repo auth or push failure cannot cost the morning's post; the
missing-survivors and unset-PAT preconditions still warn and exit 0; a denied
push still reddens the run (PR #317).
Two consequences worth naming:
- a quiet day is now a one-line commit to PyAutoMemory rather than silence,
which also re-renders the knowledge board daily. That is the point — it is
the board's version of the #papers empty-day heartbeat.
- the sweep now runs every weekday too, so a lapsed line no longer lingers
through a quiet stretch waiting for the next paper day to evict it.
Re-running the same day is still a no-op: the stamp is unchanged, the porcelain
check sees nothing, and the step exits without a commit.
Validated: YAML parses, every run block passes bash -n, and all four paths were
rehearsed against a real PyAutoMemory checkout with the two shell blocks
extracted verbatim from this file — quiet day same date (no commit), quiet day
new date (heartbeat commit), paper day (paper lands below the stamp), and a
quiet day sweeping lapsed papers. NOT fired live: claude-code-action refuses to
run when this file differs from the default branch's copy and then exits
success, so no branch dispatch can reach these steps. The scheduled run on main
is the first genuine exercise.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ex9YARe5kDjsT3Ug7LKQ1r
7b9ab3f moved this task's active.md entry to ready-to-ship without regenerating the generated pages, so dashboard_refresh.yml reddened the PR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ex9YARe5kDjsT3Ug7LKQ1r
Jammy2211
pushed a commit
that referenced
this pull request
Aug 25, 2026
PyAutoMemory#58 shipped — PyAutoMemory main 963388a (PR #60), PyAutoMind main a82b96f (PR #320). active/ prompt folded into the record, active.md entry released, complete/index.md and the dashboard pages regenerated in the same commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ex9YARe5kDjsT3Ug7LKQ1r
github-actions
Bot
deleted the
claude/inbox-board-staleness-signal-onzg34
branch
August 25, 2026 14:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Mind leg of PyAutoMemory#58. Depends on PyAutoLabs/PyAutoMemory#60 — merge that one first: this workflow calls
inbox_actions.py stamp, which does not exist until it lands.The board half reads a
last digest: <date>line to tell a quiet arXiv inbox from a broken one. That line is only worth anything if the digest writes it on days with nothing to file — otherwise it goes stale on exactly the days it exists to prove were quiet, and says "broken" about a working run.So the inbox step loses its
count != 0guard and runs every weekday. To keep its preconditions honest, the empty-day heartbeat step now also writesarxiv_survivors.jsonas{"papers": []}— the same file the Claude step already writes on its own no-papers day. Every path produces one, so a missing survivors file in the inbox step stays what it has always been: a real failure, not an empty day.The step's other invariants are untouched. It still runs after the Slack POST, so a cross-repo auth or push failure cannot cost the morning's post; the missing-survivors and unset-PAT preconditions still warn and exit 0; a denied push still reddens the run (#317).
Two consequences worth naming:
#papersempty-day heartbeat.Re-running the same day is still a no-op: the stamp is unchanged, the porcelain check sees nothing, and the step exits without a commit.
Also carries the Mind lifecycle for the task — the prompt advanced
draft/→active/,active.mdregistered, dashboard regenerated.API Changes
None — a workflow change plus Mind registry state. No Python surface touched.
Test Plan
lifecycle.py checkOK;intake dashboard --checkcurrentrun:block passesbash -nNot fired live, and cannot be.
claude-code-actionrefuses to run when this file differs from the default branch's copy — and then exits success, so a branch dispatch silently writes noslack_payload.jsonand skips every later step including this one. That trap is recorded incomplete/2026/08/arxiv-inbox-pat-scope.mdand already cost one wasted dispatch. The scheduled 02:00 UTC run onmainis the first genuine end-to-end exercise; the steps are plain bash with no dependency onclaude-code-action.Generated by the PyAutoLabs agent workflow.
Generated by Claude Code