Frozen typed registries for the system's domain facts.

Domain registries

Intent — A set of frozen, typed registries for the system's domain facts (the supported filetypes, the WCAG coverage gaps, the periodic-GC cron entries, the UX write-authority surfaces, the competitor set, the CLAUDE.md rule metadata), each the single source of truth for its slice.

SummaryFrozen typed registries for the system's domain facts.
TargetBridge · System models
Formtyped-ir
EnforcementHard (deterministic) — typed registries held true by their coverage/parity lints

Motivation — the failure it kills

Domain facts get restated in code, docs, and dashboards: "which four filetypes do we support," "which WCAG SCs are coverage-gaps," "which cron entries run," "who may write UX surface X," "who are our competitors," "what metadata does each CLAUDE.md rule carry." Restated, they drift: a filetype list diverges, a rule's metadata goes stale, a competitor doc is out of date. Each is a small correctness or a stale-doc failure, multiplied across many domain slices.

Why it's not just "hardcode each list where it's used"

A hardcoded domain list is a snapshot that drifts and can't be queried as a set. Each registry is the frozen typed source of truth for its slice, read by the tools that need it and generated into the docs that present it (the competitor catalog → competitive-analysis doc; the rule metadata → rule index). A coverage/parity lint keeps each honest. Where does the supported-filetype list actually live when it is hardcoded in five places? Nowhere — there are five snapshots, each free to drift. A registry gives the fact one home the tools read and the docs generate from, and a lint fails the build the moment a consumer diverges.

Mechanism

Each is a small typed registry: a supported-filetypes registry (the frozen four), a WCAG-gap registry (feeding the WCAG-scope status), a periodic-GC cron registry (distinct from the per-minute merge-train), a UX write-authority registry, a competitor registry (a Backstage-style Competitor dialect → the competitive-analysis doc), and a rule-metadata registry (extracted from inline <!-- rule-meta: --> blocks, feeding the rule-index). Each has a coverage/parity lint + a doc-derived pin.

Prerequisites

Consequences & costs

Known uses

Related mechanisms