Skip to content

core: rate-limit anomaly reports with a 60s cooldown and collapse repeated dumps - #74

Open
iBobbyTS wants to merge 1 commit into
ProducerGuy:mainfrom
iBobbyTS:fix/anomaly-report-cooldown
Open

iBobbyTS wants to merge 1 commit into
ProducerGuy:mainfrom
iBobbyTS:fix/anomaly-report-cooldown

Conversation

@iBobbyTS

Copy link
Copy Markdown

Problem

The bare two-tier thresholds misfire continuously on Apple Silicon: P-core peak sensors oscillate ±5°C on a 2-4s scale under normal load, so the detector logs an "Instant spike/drop" event — plus a 15-line process-history dump — every few seconds. Measured on this hardware: 11,700+ events/day, roughly 200k log lines/day, burying the genuine thermal events the detector exists to surface.

Fix

  • Detection moves into a pure, hardware-free AnomalyGate: a genuine event still reports immediately, but samples inside the 60s cooldown feed the rolling history silently, filtering the threshold-edge oscillation echo. History stays warm through cooldown, so prev-tracking survives suppressed samples.
  • Calibration now suppresses only reporting — the gate is fed every sample, so the first post-calibration reading compares against a fresh previous instead of a stale pre-calibration one.
  • The pre-spike dump collapses consecutive identical snapshots to a single line (ts → ts: idle (×n)).

Testing

swift build + full swift test pass, including six new unit tests in AnomalyGateTests (thresholds are strict-greater, cooldown suppression, prev-tracking through suppressed samples, sustained-tier window reset, history cap).

…eated dumps

The bare two-tier thresholds misfire continuously on Apple Silicon: P-core
peak sensors oscillate ±5°C on a 2-4s scale under normal load, so the
detector logged an "Instant spike/drop" event — plus a 15-line
process-history dump — every few seconds: 11,700+ events/day in measured
logs, roughly 200k log lines/day, burying the real events.

The detection logic moves into a pure, hardware-free AnomalyGate: a
genuine event still reports immediately, but samples inside the 60s
cooldown feed the rolling history silently, filtering the threshold-edge
oscillation echo. Calibration now suppresses only reporting — the gate is
fed every sample, so the first post-calibration reading compares against
a fresh previous instead of a stale pre-calibration one. The pre-spike
dump collapses consecutive identical snapshots to a single line
("ts → ts: idle (×n)"). Six unit tests cover thresholds, cooldown,
prev-tracking through suppressed samples, and window reset.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant