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
7 changes: 7 additions & 0 deletions .github/workflows/brain_board.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ on:
schedule:
- cron: "30 5 * * *"
workflow_dispatch:
# A dev-box publish (`pyauto-brain board publish`, usually morning.sh's
# last step) pushes state/devbox_board.json to main — republish so the
# board shows this morning's local observations a minute later.
push:
branches: [main]
paths:
- "state/devbox_board.json"

permissions:
contents: read
Expand Down
14 changes: 13 additions & 1 deletion bin/morning.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
# touch YOUR checkout — sync and clean-slate. This script is exactly those two
# steps, so the morning is: run this in a terminal, then open the board.
#
# bash PyAutoBrain/bin/morning.sh # sync + clean, then board URL
# bash PyAutoBrain/bin/morning.sh # sync + clean + publish,
# # then board URL
# bash PyAutoBrain/bin/morning.sh --digest # also print the board's
# # markdown digest (needs gh)
# bash PyAutoBrain/bin/morning.sh --no-publish # skip the dev-box publish
# DRY_RUN=1 bash PyAutoBrain/bin/morning.sh # preview clean-slate only
#
# Both steps are the recoverable, git-aware ones /wake_up auto-ran (its
Expand All @@ -30,6 +32,16 @@ echo
echo "== morning: clean slate (untracked regenerable artifacts + cruft) =="
bash "$HERE/clean_slate.sh"

if [ "${1:-}" != "--no-publish" ]; then
echo
echo "== morning: publish the dev-box observation (hygiene + worktrees) =="
# Best-effort: the board just shows an older stamp if this leg fails.
# The push itself triggers brain_board.yml, so the board refreshes with
# this morning's local observations a minute later.
bash "$HERE/../board/board.sh" publish \
|| echo "morning: dev-box publish skipped (see above) — the board keeps its last stamp"
fi

echo
echo "== morning: done — the rest of the routine is on the board =="
# Board URL from the checkout's own remote (no hardcoded org).
Expand Down
16 changes: 13 additions & 3 deletions board/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,20 @@ copy-for-Claude payload:
| Section | Signal owner | One-tap payload |
|---------|--------------|-----------------|
| ⌨ Morning sync | `bin/morning.sh` (local) | the terminal command itself |
| 🌙 Overnight | scheduled workflows (`config/policy.yaml board: overnight_jobs`) | `/bug … — <run url>` on failures |
| ❤️ Readiness | the Heart board's `badge.json` (cross-board contract) | `/health` |
| 🌙 Overnight | scheduled workflows (`config/policy.yaml board: overnight_jobs`); a ⏸ blocked gate's ::warning annotation is rendered inline | `/bug … — <run url>` on failures |
| ❤️ Readiness & release | the Heart board's `badge.json` + `board.json` (structured blockers, each carrying its OWN `/bug` prompt — rendered verbatim, never re-derived) and the Hands badge | `/health`, the blockers' own prompts |
| 🏷️ Version consistency | the coupled-set stamps (`board: version_stamps`) | `/bug version drift: …` |
| 💬 Community | the Ears (`community scan`, reused wholesale) | `/community`, `/community triage <ref>` |
| 💬 Community | the Ears (`community scan`, reused wholesale) — every open conversation gets a row | `/community`, `/community triage <ref>` |
| 🔄 Resume | the Mind's registry + generated counts; pending-release PRs | `/start_dev …`, `/prm <url>` |
| 🧹 Upkeep | open-issue count; the cleanup doors | `/issue_cleanup`, `/hygiene`, `/repo_cleanup` |
| 🖥️ Dev box | `state/devbox_board.json` — hygiene pre-scan rows + worktree state, pushed by `board publish` (morning.sh's last step); age-stamped, stale at 48h, dropped after 7d | each hygiene row's own delegate door |
| 🤖 Autonomous runs | the tail of the Mind's `autonomy_log.md`, verbatim | — |
| 🚪 All doors | `bin/pyauto-brain`'s own registry (never a second copy) | `/<verb>` |

The header also carries a **trend sparkline** — the "N need you" count per
day, handed forward through the published `board.json` itself (no commits, no
extra state: each render reads yesterday's page, appends today, caps at 30).

**Compose, don't recompute** — the board re-derives nothing. The community
section imports the community conductor's `build_scan()`; the resume counts
are parsed from the Mind's own generated `dashboard.md`; readiness comes from
Expand All @@ -41,6 +47,10 @@ bin/pyauto-brain board # markdown digest in the terminal
bin/pyauto-brain board --html # the one-tap page
bin/pyauto-brain board --badge # the cross-board headline contract
bin/pyauto-brain board --apply # write _site/ (what brain_board.yml serves)
bin/pyauto-brain board publish # dev-box leg: distill hygiene + worktree
# state into state/devbox_board.json and
# push (morning.sh runs this for you;
# --dry-run prints, --no-hygiene is fast)
```

Publishing is `.github/workflows/brain_board.yml`: a morning cron plus manual
Expand Down
Loading
Loading