← Components
Policy Config
The c65 policy-configuration shapes: shell, list editor, threshold, level select, detector list, and exceptions — controlled components; consumers own the data and persistence.
PolicyConfigDetectorListConfig shape: detector families toggled individually — rows with toggle, severity, 24h hit count, per-family enable/disable all. Fully controlled: renders `families` as given, emits @toggle(familyIndex, detectorIndex, on) and @toggle-all(familyIndex, on).
PolicyConfigExceptionsThe shared Exceptions section — c65's replacement for enforcement-mode cascades: scoped, reasoned, expiring carve-outs (scope/value/reason/expires) with an add row. Fully controlled: emits @add(exception) / @remove(index); parent owns the array. PolicyConfigShell embeds it on every policy.
PolicyConfigLevelSelectConfig shape: an ordered floor over an enum — level cards weakest → strongest, click to set the floor, below-floor cards preview the violating count live. Seeds from `floor`, emits @floor(levelId).
PolicyConfigListEditorConfig shape: allow/deny-list management — searchable-feeling entry table (value, scope, added-by, last-matched) with a pattern-friendly add row. Fully controlled: renders `entries` as given, emits intents; the parent owns the array (mock: mutate on the events; qdash: persist via API, e.g. /api/egress-decisions).
PolicyConfigShellFull-detail page chrome for one policy: name + maturity pill + activation toggle, meta strip (category, severity, ComplianceTag satisfies chips), underlying-control disclosure (escape hatch), shape body via slot, shared Exceptions section — all in a white bg-surface card. Body dims when inactive.
PolicyConfigThresholdConfig shape: numeric ceilings/floors with live observed context — one row per metric with a value input, observed comparison, and a breach chip when crossed. dir:"max" (default) breaches when observed > value; dir:"min" when below. Controlled: emits @change(index, value); parent owns the values.