R-270: the local_api drift detector also names a TOKEN-only divergence
A rotation that reached bootstrap.json but not controller.yaml left the agent channel at 401 across restarts while the endpoint-only detector stayed silent. The tokens are now compared (constant time, boolean only); the token case gets its own banner key and operator message. Still detection only - nothing is reconciled (R-78). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -2010,12 +2010,13 @@ func main() {
|
||||
// local_api endpoint drift (R-77, from the 2026-07-25 outage): controller.yaml and bootstrap.json
|
||||
// can disagree indefinitely and silently — the island migration rewrote the latter and the
|
||||
// controller kept dialling the former for 17.5 h, alerting only "agent unreachable". This NAMES
|
||||
// the fault; it deliberately does not reconcile the files (R-78 owns which one wins).
|
||||
// the fault; it deliberately does not reconcile the files (R-78 owns which one wins). Since R-270 it
|
||||
// also names a TOKEN-only divergence (a rotation that reached bootstrap.json only).
|
||||
//
|
||||
// Startup-only is sufficient and correct: both files are read at boot and neither changes under a
|
||||
// running controller, so a periodic re-check would add noise without adding signal.
|
||||
if d := bootstrap.DetectEndpointDrift(*configPath, cfg, logger); d != nil {
|
||||
alertMgr.SetEndpointDriftAlert(true, "alert.endpoint_drift", d.HungarianMessage())
|
||||
alertMgr.SetEndpointDriftAlert(true, d.AlertKey(), d.HungarianMessage())
|
||||
if notifier != nil {
|
||||
notifier.NotifyEndpointDrift(d.EnglishMessage(), d.FingerprintAgrees)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user