Registry — Gate ledger

SSOT of conformance-gate lifecycle state, per policies/gates.kmd (stack-RFC-014 R3R5) and consumed by `taskskanon-gate.md (the /k-commit §5b3 gate). One row per gate (a kanon_bindings clause that declares a gate:). The ledger is what the soak posture and the automatic demotion (R5) read: a gate stays advisory until its row shows a clean soak, and a gate that exceeds its fp_budget is demoted back to warn` with a recalibration ticket.

Schema (columns):

  • gate_id<doc-rel-path>#<clause-id> (e.g. specs/landing-pages/products.kmd#req-landing-responsive).
  • declared — the gate: level in the doc (advisory|warn|block).
  • posture — the EFFECTIVE level enforced today (advisory during soak; raised to declared once clean).
  • fp_budget — false-positive budget (default 2/30d).
  • fp_count — confirmed false positives in the current window.
  • last_override<actor> <iso-date> "<reason>" of the most recent audited escape-hatch use (R4), or .
  • notes — promotion/demotion provenance.
gate_id declared posture fp_budget fp_count last_override notes
specs/landing-pages/products.kmd#req-landing-responsive block advisory 2/30d 0 soak start 2026-06-22 (koder-tools#056); promote to block when clean
policies/gates.kmd#req-block-has-budget warn warn 2/30d 0 structurally enforced by koder-spec-audit bindings (kanon-block-without-budget)
specs/audit/frontmatter.kmd#req-frontmatter-conformance block advisory 2/30d 0 meta-lint: path-scoped ({changed}) frontmatter check on any metadocsstack edit; soak start 2026-06-22; promote to block when clean

Promotion rule (policies/gates.kmd req-promote-soak): a gate moves advisory → warn → block only when its row shows zero confirmed FP across the budget window. Edit posture here (not the doc's gate:) to roll out; the doc's gate: is the CEILING, the ledger's posture is the live value.

Live as of koder-tools (read-side): koder-spec-audit gate reads this posture column at commit time and resolves the effective gate as min(declared_ceiling, posture) (then the --advisory CLI cap). So promotion advisory→block is genuinely a one-line edit of this column — no rebuild, no doc edit. The WRITE-side (audited override appending last_override/fp_count and auto-demotion R5) is koder-tools#057.