Skip to content

ADR Enforcement Debt

Inverts ADR conformance from citation-drift noise to the load-bearing question: does each Accepted ADR's **Enforced by:** resolve to a real, runnable, asserting check, or is the decision unenforced-decision debt? REAL = an enforced ADR with a resolving, non-mutating, asserting check. WEAK = a manual prose pointer, or an enforced ADR whose every resolving check is tautological (green but asserts nothing). MISSING = no **Enforced by:** check at all (e.g. a bare decision-of-record). WEAK + MISSING are the debt — except where the decision is a justified, allow-listed process-only exemption (docs/standards/adr_enforcement/exemptions.md): those are excluded from the outstanding-debt headline, matching the merge gate in tests/architecture/test_adr_enforcement_ratchet.py.

Summary

  • Accepted ADRs: 81
  • REAL (real asserting enforcement): 78 (96.3%)
  • WEAK (prose-only or tautological): 3
  • MISSING (no **Enforced by:**): 0
  • Justified exemptions (process-only, allow-listed): 3
  • Outstanding unenforced-decision debt (non-exempt WEAK + MISSING): 0 / 81 = 0.0%

By declared **Enforcement:** kind: enforced 78 · manual 3 · decision-of-record 0.

Classification

ADR Class Exempt Kind Enforced by
ADR-0001 REAL enforced pytest:tests/test_orchestrator_loops.py, pytest:tests/architecture/test_loop_count_matches_adr0001.py
ADR-0002 REAL enforced pytest:tests/test_state_machine.py
ADR-0004 REAL enforced pytest:tests/test_agent_cli.py, pytest:tests/test_base_runner.py
ADR-0005 REAL enforced pytest:tests/test_implement_phase.py
ADR-0007 REAL enforced pytest:tests/test_dashboard_routes_repo.py
ADR-0008 REAL enforced pytest:tests/test_dashboard_routes_repo.py
ADR-0009 REAL enforced pytest:tests/architecture/test_adr0009_process_per_repo_isolation.py::test_workspace_paths_are_repo_slug_scoped_and_collision_free
ADR-0010 REAL enforced pytest:tests/test_integration_worktree.py
ADR-0011 REAL enforced pytest:tests/test_epic.py, pytest:tests/test_release.py
ADR-0012 REAL enforced pytest:tests/test_epic_merge_coordination.py
ADR-0014 REAL enforced pytest:tests/test_state_machine.py
ADR-0015 REAL enforced pytest:tests/test_review_phase_hooks.py
ADR-0016 REAL enforced pytest:tests/test_visual_validation.py
ADR-0017 REAL enforced pytest:tests/test_state_machine.py
ADR-0018 REAL enforced pytest:tests/test_screenshot_scanner.py, pytest:tests/test_report_issue_loop.py
ADR-0019 REAL enforced pytest:tests/test_epic_manager.py, pytest:tests/test_post_merge_handler.py
ADR-0021 REAL enforced pytest:tests/test_state_persistence.py, pytest:tests/test_event_persistence.py, pytest:tests/test_data_migration_d2.py
ADR-0022 REAL enforced pytest:tests/test_integration_pipeline.py
ADR-0023 REAL enforced pytest:tests/architecture/test_adr0023_test_local_class_instantiation.py::test_no_dead_test_local_classes
ADR-0024 REAL enforced pytest:tests/test_implement_phase.py, pytest:tests/scenarios/fakes/test_prior_failure_propagation.py
ADR-0025 WEAK exempt manual Review checklist — reviewers verify symmetric field-assertion coverage (all three legs per method) by searching for the field name across test functions for the affected methods (see "Review checklist" under Consequences).
ADR-0027 REAL enforced pytest:tests/architecture/test_adr0027_duplicate_model_class_definitions.py::test_no_dead_duplicate_model_class_definitions
ADR-0028 REAL enforced pytest:tests/test_report_event_flow.py
ADR-0029 REAL enforced pytest:tests/test_caretaker_loop_wiring.py
ADR-0030 REAL enforced pytest:tests/architecture/test_adr0030_dashboard_routes_decomposition.py::test_create_router_wires_each_named_domain_register
ADR-0032 REAL enforced pytest:tests/test_repo_wiki.py, pytest:tests/test_repo_wiki_store_git.py, pytest:tests/test_repo_wiki_ingest.py, pytest:tests/test_wiki_drift_detector.py, pytest:tests/test_wiki_drift_symbols.py, pytest:tests/test_wiki_semantic_drift.py, pytest:tests/test_repo_wiki_temporal.py, pytest:tests/test_wiki_corroboration.py
ADR-0034 REAL enforced pytest:tests/test_state_machine.py
ADR-0035 WEAK exempt manual Code review checklist item (Decision §3) applied during PR review of any change touching toggle-gated logic; see also 'docs/wiki/testing.md'.
ADR-0037 REAL enforced pytest:tests/test_adr_pre_validator.py
ADR-0041 REAL enforced pytest:tests/test_issue_cache.py, pytest:tests/test_precondition_gate.py
ADR-0042 REAL enforced pytest:tests/architecture/test_adr0042_two_tier_branch_rulesets.py::test_main_ruleset_is_merge_commit_only
ADR-0043 REAL enforced pytest:tests/test_preflight_plugins.py, pytest:tests/test_phase_skill_filter.py
ADR-0045 REAL enforced pytest:tests/test_trust_fleet_sanity_loop.py, pytest:tests/test_loop_wiring_completeness.py, pytest:tests/test_trust_fleet_anomaly_detectors.py
ADR-0047 REAL enforced make:trust-contracts, pytest:tests/trust/contracts/test_fake_github_contract.py
ADR-0049 REAL enforced pytest:tests/test_loop_kill_switch_completeness.py, pytest:tests/regressions/test_canonical_killswitch.py
ADR-0050 REAL enforced pytest:tests/test_auto_agent_preflight_loop.py, pytest:tests/scenarios/test_auto_agent_preflight.py, pytest:tests/test_loop_wiring_completeness.py, pytest:tests/test_auto_agent_hitl_intake.py, pytest:tests/test_preflight_decision_hitl_widened.py
ADR-0051 WEAK exempt manual 'superpowers:subagent-driven-development' workflow (per-task reviews), this ADR (process documentation), 'superpowers:requesting-code-review' (which dispatches the 'code-reviewer' agent) skill (the fresh-eyes reviewer) — a process convention, not a runnable check.
ADR-0052 REAL enforced pytest:tests/test_mockworld_fakes_conformance.py, pytest:tests/test_sandbox_scenario_contract.py
ADR-0053 REAL enforced pytest:tests/test_ubiquitous_language_drift.py, pytest:tests/test_seed_terms.py
ADR-0054 REAL enforced pytest:tests/test_term_proposer_loop.py, pytest:tests/architecture/test_term_proposer_wiring.py
ADR-0056 REAL enforced pytest:tests/test_adr_touchpoint_auditor_loop.py
ADR-0057 REAL enforced pytest:tests/test_term_pruner_loop.py, pytest:tests/architecture/test_term_pruner_wiring.py
ADR-0058 REAL enforced pytest:tests/test_edge_proposer_loop.py, pytest:tests/architecture/test_edge_proposer_wiring.py
ADR-0060 REAL enforced pytest:tests/test_atlas_routes.py
ADR-0061 REAL enforced pytest:tests/test_atlas_routes.py
ADR-0062 REAL enforced pytest:tests/test_entry_evidence_loop.py, pytest:tests/scenarios/test_entry_evidence_loop_scenario.py
ADR-0064 REAL enforced pytest:tests/test_adversarial_retry_loop.py
ADR-0065 REAL enforced pytest:tests/architecture/test_adr0065_code_grooming_removed.py::test_no_live_code_grooming_references_in_src_or_tests
ADR-0071 REAL enforced pytest:tests/test_route_back.py
ADR-0083 REAL enforced pytest:tests/test_sandbox_scenario_contract.py, pytest:tests/test_no_screenshot_regression_tests.py
ADR-0085 REAL enforced pytest:tests/test_secret_scrub.py, pytest:tests/regressions/test_issue_9143_codeql_suppression.py
ADR-0087 REAL enforced pytest:tests/test_prompt_registry_completeness.py, pytest:tests/test_audit_prompts.py
ADR-0088 REAL enforced pytest:tests/test_label_drift_watcher_loop.py, pytest:tests/test_label_drift_watcher_integration.py
ADR-0089 REAL enforced pytest:tests/test_memory_backlog_loop.py, pytest:tests/test_loop_wiring_completeness.py, pytest:tests/architecture/test_functional_area_coverage.py
ADR-0090 REAL enforced pytest:tests/test_atlas_routes.py
ADR-0092 REAL enforced pytest:tests/test_untrusted_text.py, pytest:tests/test_preflight_untrusted_fencing.py, pytest:tests/test_agent_cli.py, pytest:tests/test_agent_advanced.py
ADR-0093 REAL enforced pytest:tests/test_loop_fitness_completeness.py
ADR-0094 REAL enforced pytest:tests/test_convergence_ledger.py, pytest:tests/test_convergence_gate.py, pytest:tests/scenarios/test_convergence_review_mockworld.py, pytest:tests/sandbox_scenarios/scenarios/s50_convergence_review.py
ADR-0095 REAL enforced pytest:tests/test_review_advisor.py, pytest:tests/test_review_phase_core.py::TestApproveConvergenceGate, pytest:tests/scenarios/test_convergence_review_mockworld.py, pytest:tests/sandbox_scenarios/scenarios/s50_convergence_review.py
ADR-0096 REAL enforced pytest:tests/scenarios/test_convergence_pipeline_mockworld.py
ADR-0097 REAL enforced pytest:tests/scenarios/test_convergence_counter_migration_mockworld.py
ADR-0098 REAL enforced pytest:tests/scenarios/test_convergence_oscillation_mockworld.py
ADR-0099 REAL enforced pytest:tests/test_seed_terms.py
ADR-0100 REAL enforced pytest:tests/test_adr_conformance_coverage.py
ADR-0102 REAL enforced pytest:tests/test_review_phase_core.py
ADR-0103 REAL enforced pytest:tests/test_human_steering.py, pytest:tests/test_human_steering_loop.py, pytest:tests/test_human_steering_actuator.py, pytest:tests/test_human_steering_state.py, pytest:tests/test_orchestrator_human_steering.py, pytest:tests/test_config_env.py
ADR-0104 REAL enforced pytest:tests/test_auto_tighten_invariant.py
ADR-0106 REAL enforced pytest:tests/regressions/test_issue_9552.py
ADR-0107 REAL enforced pytest:tests/architecture/test_adr0107_discover_shape_collapsed.py::test_pipeline_stage_has_no_discover_or_shape
ADR-0109 REAL enforced pytest:tests/test_ultra_review.py
ADR-0110 REAL enforced pytest:tests/test_config_combo_env.py::test_reject_glm_model_on_claude_provider
ADR-0111 REAL enforced pytest:tests/test_flows.py
ADR-0112 REAL enforced pytest:tests/architecture/test_adr0112_clone_local_isolation.py::test_workspace_create_uses_git_clone_local
ADR-0113 REAL enforced pytest:tests/test_audit_lineage_check.py::test_control_plane_adr_missing_both_lines_fails
ADR-0114 REAL enforced pytest:tests/test_events.py::TestEventBusTypedSubscription::test_typed_subscriber_receives_only_subscribed_types
ADR-0115 REAL enforced pytest:tests/regressions/test_escape_auto_diagnose_before_human.py::TestEscapeAutoDiagnoseBeforeHuman::test_real_and_encoded_is_auto_resolved_no_human_surface, pytest:tests/regressions/test_escape_auto_diagnose_before_human.py::TestEscapeAutoDiagnoseBeforeHuman::test_inconclusive_still_reaches_a_human, pytest:tests/regressions/test_sampled_audit_auto_adjudicate_before_human.py::TestSampledAuditAutoAdjudicateBeforeHuman::test_upheld_self_applies_label_and_crosslinks, pytest:tests/regressions/test_sampled_audit_auto_adjudicate_before_human.py::TestSampledAuditAutoAdjudicateBeforeHuman::test_inconclusive_leaves_it_for_a_human, pytest:tests/test_escape_auto_diagnose.py::TestClassifyDiagnosis::test_bug_label_stays_inconclusive_not_dismissed, pytest:tests/test_audit_adjudicate.py::TestParseAdjudication::test_unparseable_is_inconclusive_not_upheld, pytest:tests/regressions/test_issue_11176.py::test_aging_resolvable_escape_self_answers_despite_a_busy_ask_budget
ADR-0116 REAL enforced pytest:tests/test_prompt_registry_completeness.py, pytest:tests/test_prompt_fitness.py, pytest:tests/test_adr_enforcement_completeness.py, pytest:tests/test_prompt_rubric_calibration.py
ADR-0117 REAL enforced pytest:tests/test_prompt_observatory.py
ADR-0118 REAL enforced pytest:tests/architecture/test_no_otel_imports.py
ADR-0119 REAL enforced pytest:tests/test_credit_failover.py
ADR-0134 REAL enforced pytest:tests/test_repo_backend.py, pytest:tests/test_config_repo_provider.py, pytest:tests/test_base_runner_repo_provider.py, pytest:tests/test_base_subprocess_runner_repo_provider.py, pytest:tests/test_dashboard_routes_state.py

Unenforced-decision debt

Outstanding (non-exempt)

(none — every non-exempt Accepted ADR has a real asserting enforcement)

Justified exemptions (process-only, allow-listed)

Allow-listed in docs/standards/adr_enforcement/exemptions.md as genuinely process-only — no machine-checkable invariant — so excluded from the outstanding-debt headline above.

ADR Class Kind Justification
ADR-0025 WEAK manual Symmetric N×3 field-assertion coverage requires knowing which methods populate which shared-model fields and whether each has all three legs — a semantic-coverage judgment no non-tautological static check can make; enforcement is the reviewer's field-name search.
ADR-0035 WEAK manual Toggle-assertion consistency links a config toggle to the code path it gates and to whether a given test sets that toggle in its fixture — the ADR notes static analysis of mock/fixture setups is fragile, so no non-tautological check can fail on violation.
ADR-0051 WEAK manual Iterative fresh-eyes review-until-convergence is a pure human-process cadence (Claude Code review skills, run per feature) with no on-disk invariant a test could assert.

Weak / tautological enforcements

(none)

Unattributed enforcements

REAL ADRs whose cited test resolves and asserts, but whose text never names the ADR — so the check need not relate to the decision it enforces. Add the ADR number (e.g. ADR-0123) to the enforcing test, or repoint the ADR at one that names it. Advisory: this does NOT change the REAL/WEAK/MISSING class above.

ADR Enforcement
ADR-0002 pytest:tests/test_state_machine.py
ADR-0004 pytest:tests/test_agent_cli.py, pytest:tests/test_base_runner.py
ADR-0005 pytest:tests/test_implement_phase.py
ADR-0007 pytest:tests/test_dashboard_routes_repo.py
ADR-0008 pytest:tests/test_dashboard_routes_repo.py
ADR-0010 pytest:tests/test_integration_worktree.py
ADR-0011 pytest:tests/test_epic.py, pytest:tests/test_release.py
ADR-0012 pytest:tests/test_epic_merge_coordination.py
ADR-0014 pytest:tests/test_state_machine.py
ADR-0015 pytest:tests/test_review_phase_hooks.py
ADR-0016 pytest:tests/test_visual_validation.py
ADR-0017 pytest:tests/test_state_machine.py
ADR-0018 pytest:tests/test_screenshot_scanner.py, pytest:tests/test_report_issue_loop.py
ADR-0019 pytest:tests/test_epic_manager.py, pytest:tests/test_post_merge_handler.py
ADR-0022 pytest:tests/test_integration_pipeline.py
ADR-0024 pytest:tests/test_implement_phase.py, pytest:tests/scenarios/fakes/test_prior_failure_propagation.py
ADR-0028 pytest:tests/test_report_event_flow.py
ADR-0029 pytest:tests/test_caretaker_loop_wiring.py
ADR-0032 pytest:tests/test_repo_wiki.py, pytest:tests/test_repo_wiki_store_git.py, pytest:tests/test_repo_wiki_ingest.py, pytest:tests/test_wiki_drift_detector.py, pytest:tests/test_wiki_drift_symbols.py, pytest:tests/test_wiki_semantic_drift.py, pytest:tests/test_repo_wiki_temporal.py, pytest:tests/test_wiki_corroboration.py
ADR-0034 pytest:tests/test_state_machine.py
ADR-0037 pytest:tests/test_adr_pre_validator.py
ADR-0041 pytest:tests/test_issue_cache.py, pytest:tests/test_precondition_gate.py
ADR-0043 pytest:tests/test_preflight_plugins.py, pytest:tests/test_phase_skill_filter.py
ADR-0045 pytest:tests/test_trust_fleet_sanity_loop.py, pytest:tests/test_loop_wiring_completeness.py, pytest:tests/test_trust_fleet_anomaly_detectors.py
ADR-0047 make:trust-contracts, pytest:tests/trust/contracts/test_fake_github_contract.py
ADR-0050 pytest:tests/test_auto_agent_preflight_loop.py, pytest:tests/scenarios/test_auto_agent_preflight.py, pytest:tests/test_loop_wiring_completeness.py, pytest:tests/test_auto_agent_hitl_intake.py, pytest:tests/test_preflight_decision_hitl_widened.py
ADR-0052 pytest:tests/test_mockworld_fakes_conformance.py, pytest:tests/test_sandbox_scenario_contract.py
ADR-0057 pytest:tests/test_term_pruner_loop.py, pytest:tests/architecture/test_term_pruner_wiring.py
ADR-0058 pytest:tests/test_edge_proposer_loop.py, pytest:tests/architecture/test_edge_proposer_wiring.py
ADR-0060 pytest:tests/test_atlas_routes.py
ADR-0061 pytest:tests/test_atlas_routes.py
ADR-0064 pytest:tests/test_adversarial_retry_loop.py
ADR-0071 pytest:tests/test_route_back.py
ADR-0083 pytest:tests/test_sandbox_scenario_contract.py, pytest:tests/test_no_screenshot_regression_tests.py
ADR-0090 pytest:tests/test_atlas_routes.py
ADR-0093 pytest:tests/test_loop_fitness_completeness.py
ADR-0096 pytest:tests/scenarios/test_convergence_pipeline_mockworld.py
ADR-0097 pytest:tests/scenarios/test_convergence_counter_migration_mockworld.py
ADR-0102 pytest:tests/test_review_phase_core.py
ADR-0104 pytest:tests/test_auto_tighten_invariant.py
ADR-0106 pytest:tests/regressions/test_issue_9552.py
ADR-0109 pytest:tests/test_ultra_review.py
ADR-0110 pytest:tests/test_config_combo_env.py::test_reject_glm_model_on_claude_provider
ADR-0111 pytest:tests/test_flows.py
ADR-0117 pytest:tests/test_prompt_observatory.py
ADR-0119 pytest:tests/test_credit_failover.py