You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Port the simplicio-tasks watch lane + hooks/loop_stop.py re-feed pattern: a 24/7 watcher that keeps a campaign loop alive — re-feeding the frozen campaign goal (#65 anchor) each cycle, pulling metrics, reacting to events, and pacing itself via the host scheduler instead of busy-polling.
Journal the cycle and schedule the next wake (self-paced: shorter when pieces are in flight, longer when idle; hard cap on cycles per day).
Guardrails
The watcher never escalates its own permissions: DRY_RUN posture and human-approval requirements are identical to interactive runs.
Stall behavior: N consecutive no-progress cycles → single summarized escalation to human, then back off — no alert spam.
Every cycle appends to data/runs.jsonl with cycle id, actions taken, tokens/cost estimate.
Acceptance criteria
E2E test (mocked clock + mocked adapters): a full wake cycle runs all 6 steps and schedules the next wake.
E2E test: doctor failure → cycle logs blocked and does NOT touch pieces.
Cycle cap and back-off are configurable via env and enforced.
Runtime-agnostic: pacing binds to the host scheduler where available (Claude scheduler, cron, launchd/systemd via lib/schedule/*), with a documented manual fallback.
Parent epic: #64
Goal
Port the
simplicio-taskswatch lane +hooks/loop_stop.pyre-feed pattern: a 24/7 watcher that keeps a campaign loop alive — re-feeding the frozen campaign goal (#65 anchor) each cycle, pulling metrics, reacting to events, and pacing itself via the host scheduler instead of busy-polling.Cycle (each wake)
doctor --json(Doctor: preflight that verifies env, toolchains, and adapter reachability — BLOCKS, never fake-passes #71) — skip cycle toblockedstate if preflight fails.anchor check(Anchor: freeze campaign/piece acceptance criteria at intake and gate "done" on verified AC #65) — re-read the frozen goal; abort any drifted in-flight work.Guardrails
data/runs.jsonlwith cycle id, actions taken, tokens/cost estimate.Acceptance criteria
blockedand does NOT touch pieces.lib/schedule/*), with a documented manual fallback.