Idunn/docs/watchdog-reporting-target.md
Meta Vens 6e2a31cf31 Body map after reincarnation cut 2: two slots, take_target, forward retry, operator-required
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:40:55 +02:00

4.9 KiB

Watchdog reporting: target

Status: target, Self, 2026-09-30. This is the first campaign whose state is typed in Eureka's mind (campaign idunn-watchdog). Questions, rulings, cut specs and their verification live there. This document keeps the rationale and the design truths the campaign produces. The cut map's body facts and model page will live in watchdog-reporting-map.md.

Why

The operator ruled Odin's store-recovery Q-R4 on 2026-09-30 (Odin docs/store-recovery-cut.md, cdc57bd). A third set-aside inside ten minutes stops Odin writing while it keeps serving. The operator added:

Yep, and Idunn needs better reporting capabilities so it can serve as watchdog. I ought to get a message about this on Discord if it ever happens.

and, on where delivery lives:

Bifrost is indeed intended to be the bridge to external services like Discord

Today nobody would hear about it. Idunn already detects several conditions an operator must act on, and for each one it writes a single eprintln! line to journald (report_once, control_plane.rs:4599):

  • A continuity paging threshold is reached (6 charged attempts per hour; restarts_page, formerly restarts_exhausted). Continuity never stops: it keeps restarting on a capped backoff, and this threshold only pages. When this target was written the only trace was one log line.
  • An admitted route is degraded. It fails its stable-route challenge (supervise_admitted_route, ~5973). The degraded mark is durable, but no one is told.
  • A post-fencing phase deadline leaves a transaction to the operator: a stateful deployment whose candidate was issued a lease, or a continuity retrying forward past its deadline. Since idunn-reincarnation cut 2 it is the second incident condition, operator-required (subject: the transaction id), beside continuity-exhausted; it closes when the record ends or its step goes on.

Odin's own store condition (odin.store_condition.v1, contested) is mapped but not built. Idunn reads nothing about Odin's store health today.

The delivery path half exists in Bifrost:

  • tools/operator-notification.mjs publish-idunn-alarm builds a bifrost.bridge.discord_post_command.v1 discord-dm command.
  • tools/cultmesh-bridge-commands.mjs process turns such commands into DMs, writing a discord_post_receipt.v1 for each.

But no pump runs anywhere, and the bot token file on Yggdrasil is absent (gamecult-ops inventory.md ~740). Idunn has never called the publisher. So the machine has a detector with no record, and a deliverer that nothing feeds.

Design truths this campaign produces

  • Idunn decides what is an incident. Idunn owns daemon survival, so the judgement "an operator must look at this" is its judgement, made where the condition is decided. An incident is typed state in Idunn's store before any delivery is attempted. A stderr line is a trace of the record, not the record itself.
  • Bifrost delivers. Discord transport, the bot token, the recipient binding and the delivery receipt belong to Bifrost. Idunn holds no Discord credential and speaks no Discord API.
  • Survival never waits on delivery. Bifrost is a managed target like any other. Its absence, failure or backlog may delay a message. It never delays or gates an Idunn decision, tick, restart, or deployment. An incident nobody has delivered stays visible in Idunn's own state and in idunn status.
  • Two messages per incident at most, never one per tick. A fault that lasts hours produces one opening notice, not a stream of them. When it clears, one closure notice follows, and only if the opening notice was sent. Repeated delivery attempts for either notice are idempotent at the recipient's end.
  • No tick waits on a lock another uid can hold. Root holders, such as the nightly backup's millisecond shared lock, are trusted and bounded. The operator ruled this scope on 2026-09-30, choosing uid-scoped. Soul found that any local uid could freeze Idunn's scheduler tick by holding a published .lock file. This was true for incidents during the campaign, and for topology.cc before it. Idunn's writes in its projection directory are non-blocking exchanges. The locks behind them are private to Idunn, whatever the directory's default ACL says. The operator ruled on 2026-09-30 that the topology fix belongs to this campaign.
  • Nothing sensitive leaves. A notice names the target, the condition and the time. It never carries a binding value, a path to a secret, a token, or a line of configuration.

Not this campaign

  • Odin's store-recovery cuts, O2 included. They produce odin.store_condition and are Odin's campaign, still in prose. This campaign consumes the record once it exists.
  • Idunn's phase deadlines. They landed in idunn-reincarnation cut 2, which also owns the operator-required incident condition.
  • VoidBot's notify_owner MCP tool and its separate DM code.
  • Bifrost's Persona delivery crossing.
  • Eve/TUI lowering of incidents.