fix(ops): allowlist deliberately-absent llm-worker in compose-drift sweep (#3129) - #3165
Conversation
…weep (#3129) llm-worker is operator-gated down per #3023 for the #1947 cold benchmark run. The #3040 rule correctly alarms on a missing expected-persistent service even with no siblings to compare against, but that leaves no way to mark a known, reasoned absence. This adds an explicit allowlist-with-reason (EXPECTED_ABSENT_WHILE), checked in sweep() Gate 1, implementing the mechanism #3040 itself asked for rather than a blanket sibling-suppression. Refs #3129
Strix Security ReviewNo security issues found. Updated for Reviewed by Strix |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
There was a problem hiding this comment.
Reviewed the two changed files in full. The PR adds an EXPECTED_ABSENT_WHILE allowlist (keyed by project name with a documented reason) to the internal compose-drift-watch.py monitoring script, plus a Gate 1 check that skips alarming for the single named llm-worker project, and three corresponding unit tests. The allowlist key is a hardcoded string and the check performs a plain membership test on a directory name; no attacker-controlled input reaches any dangerous sink, and there are no secrets, auth, crypto, or injection changes. Bandit and semgrep found no issues in the changed lines (Bandit's low-severity subprocess notes are all pre-existing code outside the diff). The alarm-suppression is an explicitly documented, temporary operator decision and does not weaken access controls or expose data. No security vulnerabilities found.
Reviewed by Strix
Configure security review settings
Why
llm-worker is operator-gated down per #3023 for the #1947 cold benchmark run. The #3040 rule correctly alarms on a missing expected-persistent service even with no siblings to compare against — that's the exact shape that let llm-worker sit invisible for 11h. But #3040 gave no way to mark a known, reasoned absence, so it re-fires on the same intentional state (this PR closes #3129's re-fire).
Adds
EXPECTED_ABSENT_WHILEallowlist (name → reason string citing #3023), checked insweep()Gate 1. This implements the mechanism #3040 itself asked for, not a blanket sibling-suppression — every other missing-service case still alarms.Evidence
scripts/compose-drift-watch.py(+26/-0): allowlist + Gate 1 check, comment cites ops: nothing detects a declared-but-absent container, so a stack can lose exactly one service in a rebuild unnoticed #3040 authorization.scripts/tests/test_compose_drift_watch_sweep.py(+34/-3): 3 new tests — llm-worker quiet, ml-worker still alarms as control, general pin re-pointed at auth-events-worker.Refs #3129
🤖 Generated with Claude Code