From fda707134da4b901e1bee24e06ba787ecc30580b Mon Sep 17 00:00:00 2001 From: ProtocolWarden <32967198+ProtocolWarden@users.noreply.github.com> Date: Thu, 21 May 2026 07:13:10 -0400 Subject: [PATCH] add loop-start/stop/status to operations-center.sh Wraps tools/loop/controller.py with three subcommands: loop-start start controller in background, show status after 1s loop-stop write stop flag (current session finishes cleanly) loop-status show controller lock state and last schedule All three skip the janitor. Mirrors existing watchdog-loop-* pattern. Co-Authored-By: Claude Sonnet 4.6 --- .console/log.md | 6 ++++++ scripts/operations-center.sh | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.console/log.md b/.console/log.md index 22fd1be1..a6f7e59e 100644 --- a/.console/log.md +++ b/.console/log.md @@ -1,5 +1,11 @@ # Log +## 2026-05-21 — Add loop-start/stop/status to operations-center.sh + +Added loop_start, loop_stop, loop_status functions and case entries to +scripts/operations-center.sh. loop-start/stop/status skip the janitor. +Mirrors existing watchdog-loop-* pattern. + ## 2026-05-21 — Add loop controller (replace /loop + ScheduleWakeup) tools/loop/controller.py spawns a fresh claude -p session per watchdog cycle. diff --git a/scripts/operations-center.sh b/scripts/operations-center.sh index 487dcd29..19730307 100755 --- a/scripts/operations-center.sh +++ b/scripts/operations-center.sh @@ -160,6 +160,9 @@ Usage: scripts/operations-center.sh watchdog-loop-acquire scripts/operations-center.sh watchdog-loop-release scripts/operations-center.sh watchdog-loop-status + scripts/operations-center.sh loop-start + scripts/operations-center.sh loop-stop + scripts/operations-center.sh loop-status Environment: OPERATIONS_CENTER_CONFIG Override config path (default: ${CONFIG_PATH}) @@ -232,6 +235,26 @@ check_watchdog_loop_lock() { fi } +LOOP_CONTROLLER_LOCK="${LOG_DIR}/loop_controller.lock" +LOOP_STOP_FLAG="${LOG_DIR}/loop_stop.flag" +LOOP_LOG="${LOG_DIR}/loop_controller.log" + +loop_start() { + rm -f "${LOOP_STOP_FLAG}" + nohup python3 "${ROOT_DIR}/tools/loop/controller.py" > /dev/null 2>&1 & + sleep 1 + python3 "${ROOT_DIR}/tools/loop/controller.py" --status + echo "Log: ${LOOP_LOG}" +} + +loop_stop() { + python3 "${ROOT_DIR}/tools/loop/controller.py" --stop +} + +loop_status() { + python3 "${ROOT_DIR}/tools/loop/controller.py" --status +} + watch_pid_file() { local role="$1" echo "${WATCH_DIR}/${role}.pid" @@ -561,7 +584,7 @@ shift || true cd "${ROOT_DIR}" # Skip janitor for read-only / stop commands — they're fast and don't need it. case "${cmd}" in - watch-all-status|dev-status|watch-all-stop|watch-stop|watchdog-stop|plane-status|providers-status|doctor|status) ;; + watch-all-status|dev-status|watch-all-stop|watch-stop|watchdog-stop|plane-status|providers-status|doctor|status|loop-start|loop-stop|loop-status) ;; *) run_janitor ;; esac @@ -877,6 +900,15 @@ PYEOF watchdog-loop-status) check_watchdog_loop_lock ;; + loop-start) + loop_start + ;; + loop-stop) + loop_stop + ;; + loop-status) + loop_status + ;; *) usage exit 1