heavy-duty-watcher/docs/ARCHITECTURE.md
grok-bot-andresmgsl 1d00544e86 Initial release: org-wide heavy-duty GitHub review watcher
Polls all heavy-duty/* repos every 15m for assignee/review-requested
work, reviews with clear Verdicts until agreement, and includes
tmux restore + hourly health self-heal. Fully documented.
2026-07-18 17:40:05 +00:00

3 KiB
Raw Blame History

Architecture

What this is

A durable, org-wide GitHub review agent for heavy-duty.

It polls GitHub for Issues/PRs where bot grok-bot-andresmgsl is:

  • requested as reviewer, or
  • assignee

…across every repository in the organization. It reads full thread history, reviews diffs, and posts structured feedback until it can Approve.

Components

┌─────────────────────────────────────────────────────────────┐
│  Grok durable scheduler (15m)  ──►  poll cycle (interactive) │
│  Grok durable scheduler (1h)   ──►  health watchdog           │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│  tmux session: heavy-duty-watcher                           │
│   ├─ poll-loop   (scripts/poll-loop.sh → poll-once.sh)      │
│   ├─ health-loop (scripts/health-loop.sh → health-check.sh) │
│   ├─ tools       (manual gh / logs)                         │
│   └─ grok        (optional interactive resume)              │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
                     GitHub org:heavy-duty
                     state.json + logs/

Why two poll paths?

Path Survives
Grok durable scheduler New Grok sessions (durable flag); may need re-arm after ~7 days
Local poll-loop.sh in tmux Box uptime; independent of Grok UI

After reboot: run scripts/restore.sh.

State model

state.json is the single source of truth for de-duplication:

{
  "scope": "org:heavy-duty",
  "items": {
    "heavy-duty/box#pr:79": {
      "last_head_sha": "abc…",
      "last_action": "reviewed",
      "review_event": "REQUEST_CHANGES"
    }
  }
}

Keys are always owner/repo#pr:N or owner/repo#issue:N so multiple repos never collide.

Review policy (summary)

Full rules live in ../POLL_INSTRUCTIONS.md.

  • Act only when assignee or review-requested
  • Read all comments before speaking
  • Clear Verdict / Status line first
  • Request changes until agreement; Approve when fully satisfied
  • Silent when nothing material changed

Security / safety

  • No merge / close / force-push / reassignment unless operator asks
  • Uses the bots GitHub token via gh / MCP
  • Does not store secrets in the repo (state is operational metadata only)