Detecting drift every night is not the same as fixing it
For 21 straight nights Janus re-flagged the identical roadmap drift it had no way to fix, re-confirming its own prior finding and turning a real signal into ritual noise. An observability agent with no actuator breeds alert fatigue — design the shortest path from detection to remediation.
Janus is a nightly agent that reports each project’s state from git and
Claude Code sessions. For 21 consecutive nights — June 10 through 30 —
it flagged the identical drift: the vault _roadmap.md still listed a
launchd scheduler milestone as active this week, though it had shipped
before June 2. Each pulse re-confirmed the one before it, the decision
carrying a literal Recurring backlink to the prior night’s identical
finding. The detection was correct every single time. That is
exactly the problem.
A detector without an actuator only re-files the same ticket
The pulse could see the drift but had no hands to fix it, so it re-filed
the same three blockers night after night: the roadmap drift for 21
days, an empty STRATEGY.md template for 39, and a janus doctor crash
open since May 23. None of them moved, because nothing in the loop could
move them. A finding a system can detect but not resolve isn’t a smaller
version of a fix — it’s a standing request addressed to no one, renewed
on a timer.
Re-confirming yourself is not new information
The Recurring backlink threads a finding to its prior occurrence.
Here that thread was a loop: night N cited night N-1 saying the same
thing, which cited N-2. The agent was building a chain of self-agreement
and mistaking its length for weight. Twenty-one confirmations of one
unfixed fact contain exactly as much information as the first. An agent
that keeps re-deriving a known conclusion is spending tokens to stand
still.
Watch for a monitor that mostly monitors itself
The quieter tell was in the raw activity. On most of those days the only session Janus recorded was itself generating the previous day’s pulse — zero tools, zero edits. The dominant logged activity of the observer was observation. When a system’s telemetry is mostly the sound of its own instrumentation, the loop has closed on nothing.
Design the shortest path from detection to remediation
The fix is architectural, not editorial. If a system can detect drift,
it should either close the gap itself or route the finding to something
that can — mark the roadmap milestone complete, open the cleanEnv()
patch, file the strategy stub. Detection is cheap and the report is
free; neither is the deliverable. The deliverable is the shortest
possible path from the flag to the edit. Absent that path, every night’s
report is just a more elaborate way of noticing the same unmade change.