Context
After an orchestrator restart, the parent supervisor repeatedly emitted the same INFO line roughly every cooldown interval:
[ProcessSupervisor] lms server (LM Studio CLI) readiness hook completed successfully after liveness confirmation.
Child daemons may stay verbose, but the parent ProcessSupervisor log is the operator-facing signal stream. Repeating a stable success confirmation every poll makes real warnings and failures harder to spot.
Problem
ProcessSupervisorService.runLivenessReadinessHook() logs the successful liveness-confirmed readiness hook every time the fire-and-exit liveness path observes an already-up service. For stable readiness, that is state-level noise, not a new event.
Proposed Shape
- Keep the first successful readiness transition visible.
- Suppress duplicate INFO success lines while the same task remains healthy.
- Reset the suppression after degraded or failed readiness so a later recovery success is visible.
- Preserve WARN/ERROR visibility for degraded/failure paths.
- Keep the fix in
ProcessSupervisorService; the orchestrator remains a thin scheduler.
Acceptance Criteria
- Repeated successful
runLivenessReadinessHook() calls for the same healthy task do not flood parent supervisor logs.
- The first successful liveness-confirmed readiness hook still logs once.
- A degraded or failed readiness result resets the success guard so the next successful recovery logs once.
- Task health outcomes are still recorded for every readiness check.
- Unit coverage exercises the liveness-confirmed readiness hook success/degraded/recovery behavior.
Context
After an orchestrator restart, the parent supervisor repeatedly emitted the same INFO line roughly every cooldown interval:
Child daemons may stay verbose, but the parent
ProcessSupervisorlog is the operator-facing signal stream. Repeating a stable success confirmation every poll makes real warnings and failures harder to spot.Problem
ProcessSupervisorService.runLivenessReadinessHook()logs the successful liveness-confirmed readiness hook every time the fire-and-exit liveness path observes an already-up service. For stable readiness, that is state-level noise, not a new event.Proposed Shape
ProcessSupervisorService; the orchestrator remains a thin scheduler.Acceptance Criteria
runLivenessReadinessHook()calls for the same healthy task do not flood parent supervisor logs.