CREATE TABLE watchers (
id TEXT PRIMARY KEY,
title TEXT,
query TEXT,
spec TEXT NOT NULL,
status TEXT NOT NULL CHECK (status IN ('enabled','disabled','paused','error')),
cooldown_s INTEGER DEFAULT 1800,
interval_s INTEGER DEFAULT 60,
throttle_s INTEGER DEFAULT 300,
schedule_cron TEXT,
dedupe_window_s INTEGER DEFAULT 0,
dedupe_mode TEXT,
reason_trace_template TEXT,
last_fired_at TEXT,
last_eval_at TEXT,
fire_count INTEGER DEFAULT 0,
dedupe_key TEXT,
notify TEXT,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
CHECK (schedule_cron IS NOT NULL OR interval_s IS NOT NULL)
)