Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f8e6ddd
feat(supervision): GitHub events watcher (comments/CI/reviews) with C…
e-jung Jun 22, 2026
030ac71
fix(ghwatch): per-PR emission, atomic seen writes, usage + test coverage
e-jung Jun 22, 2026
85d1fd0
fix(ghwatch): respect merge filter, carry-forward CI sig, doc/test fixes
e-jung Jun 22, 2026
2993161
fix(ghwatch): empty-filters, contributor derivation, reviews filter, …
e-jung Jun 22, 2026
9e99407
fix(ghwatch): per_page=100 on list endpoints; accurate comment label
e-jung Jun 22, 2026
754fca4
fix(ghwatch): empty-contributor flood guard; isolate atomic_write temps
e-jung Jun 22, 2026
abc8c59
fix(ghwatch): --limit 1000 on PR search; document 100-item count cap
e-jung Jun 22, 2026
869882d
fix(ghwatch): treat CLOSED as non-terminal; exclude .tmp from status …
e-jung Jun 22, 2026
bd31272
fix(ghwatch): carry forward state across transient pr_state failures
e-jung Jun 22, 2026
a2dc84f
fix(ghwatch): bound CLOSED re-probes with a close->settle window
e-jung Jun 22, 2026
a7c1fd1
no-mistakes(document): docs(ghwatch): document FM_GH_CLOSE_REPROBE_SE…
e-jung Jun 22, 2026
7a8baa4
style(ghwatch): refactor A && B || C to if-statements for shellcheck …
e-jung Jun 22, 2026
0a2f5e4
perf(ghwatch): poll PRs concurrently to fit the 30s check-script budget
e-jung Jun 23, 2026
80429d7
fix(ghwatch): debounce CI filter to one event per overall-state trans…
e-jung Jun 24, 2026
9fe2029
fix(ghwatch): no-deploy flood + correct fork-PR CI roll-up for daemon…
e-jung Jun 24, 2026
8dbe603
fix(ghwatch): skip a PR on transient GitHub API errors instead of par…
e-jung Jun 24, 2026
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
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ state/ volatile runtime signals; gitignored
.watch.lock .wake-queue.lock watcher singleton and queue serialization locks
.hash-* .count-* .stale-* .seen-* .last-* .heartbeat-streak watcher internals; never touch
.last-watcher-beat watcher liveness beacon, touched every poll; fm-guard.sh reads it
.github-watch-config fm-github-watch.sh filter/contributor config (key=value); never touch unless driving that tool
.github-watch-seen/ fm-github-watch.sh per-PR seen state (high-water marks); owned by that script
.no-mistakes/ local validation state and evidence; gitignored
```

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ The first mate drives these; you rarely need to, but they work by hand too.
| `fm-merge-local.sh` | Fast-forward a `local-only` project's local default branch after approval |
| `fm-review-diff.sh` | Review a crewmate branch against the authoritative base, with optional `--stat` output |
| `fm-watch.sh` | Singleton-safe one-shot watcher; blocks until supervision work is due, queues it durably, then exits with one reason line |
| `fm-github-watch.sh` | Poll the contributor's open PRs for new comments/CI/reviews/merges; toggle filters via `filter <name> on\|off` |
| `fm-wake-drain.sh` | Atomically drain queued watcher wakes before handling supervision work |
| `fm-send.sh` | Send one literal line (or `--key Escape`) to a crewmate window |
| `fm-peek.sh` | Print a bounded tail of a crewmate pane |
Expand Down Expand Up @@ -168,6 +169,9 @@ FM_SIGNAL_GRACE=30 # seconds to coalesce nearby status and turn-end signals
FM_FLEET_SYNC_BOOTSTRAP_TIMEOUT=20 # seconds allowed for bootstrap's best-effort clone refresh
FM_FLEET_PRUNE=1 # set to 0 to skip pruning local branches whose upstream is gone
FM_BUSY_REGEX='esc (to )?interrupt|Working\.\.\.' # busy-pane signatures, extend per harness
FM_GH_CONTRIBUTOR= # GitHub user whose open PRs fm-github-watch.sh polls; unset = derive from `gh auth`
FM_GH_POLL_SECS=300 # seconds between polls when fm-github-watch.sh runs as --daemon
FM_GH_CLOSE_REPROBE_SECS=7200 # seconds after a PR closes to keep re-probing for a reopen->merge; bounds API cost
```

## Development
Expand Down
Loading