Skip to content

feat: stamp the Memory inbox on quiet days, not just paper days - #320

Merged
Jammy2211 merged 4 commits into
mainfrom
claude/inbox-board-staleness-signal-onzg34
Aug 25, 2026
Merged

feat: stamp the Memory inbox on quiet days, not just paper days#320
Jammy2211 merged 4 commits into
mainfrom
claude/inbox-board-staleness-signal-onzg34

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

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 != 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 (#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.

Also carries the Mind lifecycle for the task — the prompt advanced draft/active/, active.md registered, dashboard regenerated.

API Changes

None — a workflow change plus Mind registry state. No Python surface touched.

Test Plan

  • 197 tests passing
  • lifecycle.py check OK; intake dashboard --check current
  • YAML parses; every run: block passes bash -n
  • All four digest paths rehearsed against a real PyAutoMemory checkout, with both shell blocks extracted verbatim from this file rather than retyped: quiet day/same date (no commit), quiet day/new date (the heartbeat commit), paper day (paper lands below the stamp), and a quiet day sweeping lapsed papers

Not fired live, and cannot be. claude-code-action refuses to run when this file differs from the default branch's copy — and then exits success, so a branch dispatch silently writes no slack_payload.json and skips every later step including this one. That trap is recorded in complete/2026/08/arxiv-inbox-pat-scope.md and already cost one wasted dispatch. The scheduled 02:00 UTC run on main is the first genuine end-to-end exercise; the steps are plain bash with no dependency on claude-code-action.

Generated by the PyAutoLabs agent workflow.


Generated by Claude Code

claude added 4 commits August 25, 2026 13:17
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
Jammy2211 merged commit a82b96f into main Aug 25, 2026
4 checks passed
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
github-actions Bot deleted the claude/inbox-board-staleness-signal-onzg34 branch August 25, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants