Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions pm-stack/aggregator/src/alerts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@
// immediately, quiet hours or not, because the sentinels are
// external to the thing that might be down. Warnings never push in
// v1 (page + ledger only).
//
// The throat's truth contract (#3702 Phase 3, 2026-11-03): the alert
// throat's records and responses tell the truth and keep its secrets.
// A state transition is recorded only when the event it names happened
// (delivered / escalated require at least one accepted send; `gone` is
// not a send). Subscription key material (`p256dh`, `auth`) never
// leaves the server: store rows are internal, any HTTP surface
// projects — the page's projection is the only read shape. Subscription
// preferences are validated as values, not shapes, and an invalid value
// falls back per-field to the default — never stored, never
// reinterpreted.
import type { Config } from "./config.ts";
import { sendPush, type PushOutcome, type PushTarget } from "./push.ts";
import { getSupabaseClient, sqlInt, sqlJson, sqlStr, type SupabaseClient } from "./supabase.ts";
Expand Down