Skip to content

2026-08-08: The Green Lie

A wall-mounted brass control panel with a single round gauge glowing a calm teal halo over the word HEALTH, while behind the opened panel door the clockwork heart labelled RECONCILE stands frozen mid-gear, cobwebs between its teeth — Tommy the Abyssinian cat holds the panel door open with one paw, unimpressed by the gauge.

The page arrived with full authority: Windu, CRITICAL — screen-time reconcile loop STALLED, heartbeat 76,570 seconds old, enforcement silently frozen. Twenty-one hours. Bert read it and asked the only question that mattered: why isn’t R2D2 fixing it automatically?

That question turned out to be the entire incident. The stall was one bug. The silence around it was four.

This is the sequel to service principal wave-1. The day the hub’s daemons got their own sanctum user, the migration moved the process but not the furniture: usage.db, heartbeat.json, and alerts.json stayed owned by Bert. Force Flow came up under its new name, reached _init_db(), met a database it could no longer write — and the enforcement loop died at birth, its exception swallowed whole by an asyncio task nobody would ever read.

The HTTP server is a sibling coroutine in the same process. It felt nothing. /health served 200. Port 4077 listened. Three process generations — two restarts and a full reboot — died the identical death: loop starting → Registry loaded → Holidays loaded → silence. The heartbeat’s last tick aged from hours into a full day while every green light on the wall stayed green.

WatcherSaw the stall?Could restart the daemon?Why nothing happened
R2D2 (10 min)NoNoZero liveness detectors among its 23; its “force-flow” heals aim at the :1984 bridge
Windu’s Curfew CanaryYesNo — by charterEscalate-biased, heal=None on every check; its page is where this story starts
Force Flow failsafe (60 s)NoWrong domainProbed /health — the one signal that lies; logged ok every minute, all day
Qui-Gon doctor (hourly)False positiveWrong domainBert-scoped lsof can’t see a sanctum-user socket, so it “healed” a phantom outage into gui/501 — where the plist is .disabled-wave1. Three no-op heals, all converged:false

One layer could see. Different layers could act. No layer could do both, and the layers that acted were aiming at a launchd domain that no longer held the service. A signal/actuator split, installed by the migration and invisible until the first real stall.

Permissions came first — scoped, not sprayed: the state files and their directories opened to group sanctum; the git metadata, the config-repo root, and everything a root or bert process executes stayed closed. Then each rung got rebuilt:

  • In-process: the loop now runs under a fail-loud supervisor. A death gets a CRITICAL traceback and a 60-second restart — never again an unread exception in a bare task.
  • Failsafe (60 s): probes /screen/liveness — the PII-free dead-man — on every tick. Persistent staleness earns a kickstart at five ticks and a P0 page at eight.
  • R2D2 (10 min): a real detector on heartbeat age, a real recipe, a real heal script with a restart-in-flight guard.
  • Qui-Gon (hourly): port probes are TCP connects now; lsof blindness is retired.
  • Windu: unchanged. Family safety still does not improvise; he pages.

Restart authority is the interesting part. The wave-1 daemons live in launchd’s system domain, and every healer runs as bert. The bridge across is /etc/sudoers.d/sanctum-kickstart: three exact-match NOPASSWD lines, kickstart only, no wildcards. Installing that file is not plumbing — it is the haus deliberately granting heal authority across the privilege boundary. Until Bert ran visudo -cf and install, every healer could only detect and page. After it, the failsafe’s sudo -n goes through. The boundary stays; the door has one key, and the key has one shape.

An adversarial review panel went over the fix set before landing — nineteen agents, fourteen confirmed findings — and the sharpest ones cut inward. The R2D2 runner SIGKILLs heal scripts at 60 seconds; the new heal polls recovery for three minutes, so every successful heal would have been audited as a failure and paged CRITICAL. A heal that completed with exit 3 never paged at all — the exact silent-failure class this whole incident is about, reintroduced by the fix. And the first perms pass had quietly group-opened the config-repo root and the screen-time .git — handing the network-exposed service user rename rights over the very healer scripts root executes. All rolled back and rescoped before merge.

The last bug waited for production anyway: the heal’s first live fire dumped the ps keyword list into the audit trail. etimes is a Linux-ism; macOS ps only speaks etime. The guard had been failing open — politely, invisibly — until the page it produced put its own stderr on Bert’s phone.

GateEvidence
Everything E2E Testedscreen-time suite 833 green (5 failures twin-proven pre-existing on the parent commit); r2d2 suite 52/52; live drills — detector returns [] on fresh, heal dry-run clean, failsafe tick logs liveness: fresh, Qui-Gon probe failing: 0; envelope drill: sudo -n kickstart, no password, new PID, liveness fresh 35 s later. Plus one involuntary drill: R2D2’s real fire at 17:50Z paged CRITICAL on exit 3 and held its cooldown
in Sanctum-docsThis field note + sidebar entry
Mergedsanctum-config b9fb4ac, c008888, 6d0791a; sanctum-screen-time 5c2d592 — all on origin/main
And DeployedEnvelope installed; loop beating (stale: false); failsafe/r2d2/quigon are script-per-run and picked the new code up on their next tick

One residual is parked, not forgotten: the screen-time state files still live inside a git working tree, and directory-write is rename-write. Moving usage.db and the heartbeat out of the repo entirely is the follow-up that closes the last edge.