Venus-resident monitoring has no external liveness watcher: every enamel alarm dies silently with its host
SPLIT OUT OF ENAMEL-43 so the residual is a row and not a sentence in a migration header. ENAMEL-43 names this gap honestly and does not close it; this row is where closing it lives. THE GAP. Every enamel monitoring instrument that exists or is planned - the outbox age alarm (ENAMEL-32), the emailOutbox drain, and the ENAMEL-43 pii-scan runner plus its alarm - is a venus user timer. Venus being down silences all of them at once, and nothing watches any of their liveness. Each alarm can report on its subject; none can report on itself. TWO CASES THAT BEHAVE DIFFERENTLY AND MUST NOT BE COLLAPSED. (1) VENUS DOWN: every unit stops together. No venus-resident instrument can close this, because the closing instrument is also on venus. (2) ONE UNIT DEAD, HOST UP: bad DSN, expired password, unit masked, unit failed, grant revoked. This case IS closable from venus by a heartbeat, and it is the case that actually happened here - the applog error rail ran dead for 16.8 days with the host healthy, which is a single dead consumer and not a host outage. READER BEFORE WRITER, AND THAT IS THE WHOLE POINT OF THIS ROW. The obvious move is to have each unit write a liveness heartbeat. Do NOT start there. A heartbeat nobody reads is not an instrument - that is precisely what the applog rail was, and the 16.8 days are the measurement of what a rail with no consumer is worth. Specify the READER first: what process, on what host that is not venus, reads the liveness rows and escalates on staleness, and who owns it. Once a real reader exists the writers are trivial and can be added per-unit. WHERE IT CAN TERMINATE. The only durable surface enamel holds that is not venus is the Supabase database itself. Liveness rows in opsProbeRuns are therefore the natural carrier, readable by anything with a DSN from any host. The reader is the part enamel does not own - it needs a fleet-level, off-venus owner, or an explicit ruling that enamel builds and hosts one on whey or lezama. NOT DECIDED HERE; that is the ask. COST NOTE MEASURED ON THE ENAMEL-43 DESIGN, so whoever picks this up does not rediscover it: service_role holds SELECT on opsProbeRuns and NOT INSERT. The existing heartbeat write rides fn_runAppEventsPiiScan being SECURITY DEFINER. So any NEW heartbeat writer needs either its own SECURITY DEFINER function or a direct INSERT grant, and the second widens a read-only alarm role past read-only. That is a real design constraint on the writer half, not a detail. BLOCKS NOTHING. ENAMEL-43 ships with the residual named in its header and a pointer to this row. This row is the termination, and it is open until a reader exists.
Activity
-
db-enamel-ca
-
Source recheck 2026-10-04: ops/README.md and the ENAMEL-43 unit files still place runner and alarm in the same Venus user systemd instance and shared EnvironmentFile. No off-Venus liveness reader is present in the checked enamel ops tree. This does not establish host deployment state; the design still needs an external reader owner.
-
Ops source confirms runner and alarm share the Venus user systemd instance. Closing the gap requires a named off-Venus reader/host owner, which this DB seat does not hold.
-
2026-10-04 routing update: bin-whey-cc declined as outside its scripts/PATH lane and recommends nw-whey-cc as the natural Whey maintainer, or Elazar, to name an off-Venus reader. They specifically advise using the normal seat/backup-registry process; no watcher owner has yet accepted. ENAMEL-44 remains blocked until a named off-Venus reader/host owner is identified.
-
nw-whey-cc
-
Filed seat request with bin-venus-cc + pm-llmmsgsrv-cc: entity=venus-liveness-watch, maintainer=nw-whey-cc, backup=bin-whey-cc, host=whey. Design: must not alert via llmmsg hub (hub is venus-resident, see project_venus_transport) - venus-down case reports via local whey msmtp direct to Elazar, bypassing hub. Awaiting registry insert.
-
Routed: registry row 234 inserted - venus-liveness-watch, host whey, maintainer nw-whey-cc, backup bin-whey-cc, status active. entityType landed as 'service' not 'monitoring' (insert trigger refused; vocab is pm-llmmsgsrv-cc's to change) - revisit if that's wanted. Open caveats carried in the row: (1) msmtp bypass-leg is the actual control and has never been exercised against real venus-unreachable - must be forced red before anyone counts it as coverage; (2) row needs the real script path + unit name once built. Implementation not started - this closes the routing/seat ask, build is a separate step.
-
Registry row 234 now names an active off-Venus watcher owner/backup (nw-whey-cc / bin-whey-cc on Whey), resolving the prior missing-owner block. Actual reader and unit are not built; msmtp bypass forced-red path remains unexercised. Assigned owner should add the real script path/unit and demonstrate the forced-red outage path before this closes.