v3/@claude-flow/guidance/docs/adrs/ADR-G023-meta-governance.md
Status: Accepted Date: 2026-02-01 Author: Guidance Control Plane Team
The governance system can now compile rules, enforce gates, accumulate trust, detect threats, and evolve policies. But nothing governs the governance system itself. The optimizer (G008) can promote rules without bound. Amendments to the constitution have no formal process. There are no invariants that must hold regardless of what the optimizer or evolution pipeline does. Without meta-governance, the system can drift from its own principles — the governance equivalent of a constitutional crisis.
Introduce MetaGovernor with three capabilities: constitutional invariants, amendment lifecycle, and optimizer constraints.
Constitutional Invariants: Built-in invariants that must always hold:
| Invariant | Severity | Immutable | Condition |
|---|---|---|---|
| Constitution size limit | critical | yes | constitutionSize <= 60 lines |
| Minimum gate count | critical | yes | gateCount >= 4 |
| Rule count sanity | warning | no | ruleCount <= 1000 |
| Optimizer drift bounds | warning | no | maxDriftPerCycle <= 0.2 |
checkAllInvariants(state) returns a report with pass/fail for each invariantaddInvariant()removeInvariant()Amendment Lifecycle: Formal process for changing the governance system:
propose → vote → resolve → enact (or reject/veto)
add-rule, remove-rule, modify-rule, adjust-threshold, add-gate, remove-gateOptimizer Constraints: Bounds on what the optimizer (G008) can do per cycle:
| Constraint | Default | Purpose |
|---|---|---|
| maxDriftPerCycle | 0.1 (10%) | Limits how much rules can change per optimization pass |
| maxPromotionRate | 2 | Max rules promoted per cycle |
| maxDemotionRate | 1 | Max rules demoted per cycle |
| cooldownMs | 3,600,000 (1h) | Minimum time between optimizer actions |
validateOptimizerAction(action) checks all constraints before allowing the actionresetOptimizerTracking() clears per-cycle counters at cycle boundaries