-- The durations the core's bounds are set from (novox/hq to-be 45 Phase 0). -- -- Every watchdog of the core's signals table has a bound — how long a machine may take to report -- after a send, how long it may be silent, how long a plan's tier or a build may take — and a bound -- guessed is a condition that cries wolf or one that never fires. So the controller records each -- duration as it is observed, and Phase 1 sets the bounds from what was recorded: -- -- apply a declaration sent → the machine's first report of that declaration, per machine -- heartbeat-gap one word from a machine → the next, per machine -- plan-tier a plan entering a tier → leaving it, per repository -- build a build asked → its outcome heard, per module -- -- One row per thing measured: `ref` names it (the send, the earlier word, the plan's tier, the -- build), so a report repeated by a reconcile is not a second measurement. Kept a month; read -- through `durations`. create table duration ( kind text not null, subject text not null, node text not null default '', ref text not null, started timestamptz not null, took_ms bigint not null, detail text not null default '', recorded timestamptz not null default now(), primary key (kind, subject, ref) ); create index duration_by_kind on duration (kind, recorded); -- When a plan entered the tier it is at, so leaving it measures the tier. alter table release_plan add column tier_entered timestamptz;