Menu

#237 doberman monitor: the warm observe-only ambient daemon (FM.2)

open
nobody
2026-08-03
2026-08-03
Anonymous
No

Originally created by: fu351

The process on top of the ambient bus: doberman monitor run hosts the decision engine warm and turns non-inline activity into decision-log rows.

Build

  • monitor/daemon.py: build the engine stack once; each tick, poll registered collectors, drain the bus cursor, and score each event through the existing decide(), recording rows marked source_context="ambient:<collector>" with explanations prefixed observed (not enforced):. Per-event isolation: one poisoned event never kills the loop, and a scoring failure records a conservative row rather than silence.
  • doberman monitor run / doberman monitor status (Typer sub-app), a heartbeat file for liveness, and a single-instance guard (a fresh sibling heartbeat means exit with a message).

Hard rules (each one is a test)

  • Observe-only structurally: no prompter, no executor, no challenge is imported or constructed. An ambient AUTH/BLOCK-grade verdict is an alert row, nothing more. The inline gate remains the enforcement guarantee, and no output may read as "blocked".
  • No learning from ambient input: baselines update only on engine-allowed actions, and ambient events are unauthenticated local observations (a poisoning surface). Baseline stores must be byte-identical after a daemon run.
  • A dead daemon changes nothing about inline protection.

Blocked by [#236] (the bus and seam land first).

Related

Tickets: #142
Tickets: #236
Tickets: #238

Discussion


Log in to post a comment.