From ed638eadb22882a11ba952b0448e889616e8a31d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 19 May 2026 12:26:25 +0800 Subject: [PATCH] Stop respawning disabled-mode segment tasks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Supervisor filtered only on enabled, so disabled-mode segments (e.g. the OPS_SEED_TEMPLATES skeleton, which seeds mode='disabled' until an operator finishes wiring) got a task spawned every 10 s only to exit immediately on the task's own enable-check, spamming the log with "segment X disabled or removed, task exiting" every supervisor tick. Aligning the supervisor's filter with the task's exit condition lets disabled-mode segments stay quiescent. Flipping mode away from 'disabled' via the config UI now reaches the engine within one supervisor cycle (≤10 s), unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/app_operation_system/src/control/engine.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/app_operation_system/src/control/engine.rs b/crates/app_operation_system/src/control/engine.rs index 86d354f..3526c4d 100644 --- a/crates/app_operation_system/src/control/engine.rs +++ b/crates/app_operation_system/src/control/engine.rs @@ -53,7 +53,10 @@ async fn supervise(state: AppState, store: Arc) { interval.tick().await; match segment_service::list_segments(&state.platform.pool, None).await { Ok(segments) => { - for segment in segments.into_iter().filter(|s| s.enabled) { + for segment in segments + .into_iter() + .filter(|s| s.enabled && s.mode != "disabled") + { let needs_spawn = tasks .get(&segment.id) .is_none_or(|handle| handle.is_finished());