From d604fd7b4d773f2e914b932fff7190995772d237 Mon Sep 17 00:00:00 2001 From: librelad Date: Sun, 31 May 2026 02:04:24 +0100 Subject: [PATCH] fix(task): make the regen-poll throttle stamp actually writable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit maybeRegenPoll truncates $REGEN_POLL_STAMP (.regen_poll_at) to throttle the self-heal 'regen webui' poll, but the stamp lives in the docker-install-owned TASK_DIR — the manager-run processor can't write there, so the truncate EACCES'd every poll (swallowed by || true). The stamp never updated, so the throttle read last=0 forever and 'regen webui' ran on every idle tick (and spammed the journal ~16x/min). Fix: pre-create the stamp world-writable in setupTaskDir, exactly like the lock file and FIFO already are (runFileOp install -m 666). Truncate then lands, the mtime advances, and the poll throttles to REGEN_POLL_INTERVAL. Co-Authored-By: Claude Opus 4.8 Signed-off-by: librelad --- scripts/task/crontab_task_processor.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/task/crontab_task_processor.sh b/scripts/task/crontab_task_processor.sh index 4a9d24e..61fbf32 100755 --- a/scripts/task/crontab_task_processor.sh +++ b/scripts/task/crontab_task_processor.sh @@ -157,6 +157,13 @@ setupTaskDir() { # it. Create-if-absent to keep a stable inode for flock across restarts. [[ -e "$LOCK_FILE" ]] || runFileOp install -m 666 /dev/null "$LOCK_FILE" 2>/dev/null runFileOp chmod 666 "$LOCK_FILE" 2>/dev/null + # Same story for the regen-poll throttle stamp: pre-create it world-writable so + # maybeRegenPoll's `: > "$REGEN_POLL_STAMP"` truncate (run as the manager) lands + # instead of EACCES'ing in this docker-install-owned dir. Without it the stamp + # never updates, the throttle reads last=0 forever, and `regen webui` fires on + # every idle poll instead of once per REGEN_POLL_INTERVAL. + [[ -e "$REGEN_POLL_STAMP" ]] || runFileOp install -m 666 /dev/null "$REGEN_POLL_STAMP" 2>/dev/null + runFileOp chmod 666 "$REGEN_POLL_STAMP" 2>/dev/null # Establish ownership via the root-owned helper: the unprivileged dir owner # can't reclaim files an earlier run left root/manager-owned (e.g. a root-owned # task_processor.log), which would then block the daemon's log appends.