The 20 falsification gates
Every gate is encoded in contracts/claude-code-parity-apr-v1.yaml (canonical in aprender, pinned here via contracts/pin.lock). Every gate has:
- A
FALSIFY-CCPA-NNNID - A short name
- A status (
PROPOSED/ACTIVE_ALGORITHM_LEVEL/ACTIVE_RUNTIME) - A test (or tests) that asserts the falsifier
- A natural-language description of what would falsify the gate
Full table — 20 gates
Source-of-truth invariants (M0+)
| ID | Name | Status | Mechanism |
|---|---|---|---|
| CCPA-009 | ci_main_branch_green | ACTIVE_RUNTIME | branch protection requires ci/gate |
| CCPA-010 | pmat_comply_100pct | ACTIVE_RUNTIME | pmat comply check: is_compliant=true ∧ 0 Fail checks |
| CCPA-011 | line_coverage_100pct | ACTIVE_RUNTIME | cargo llvm-cov: 100% functions ∧ ≥99% lines |
| CCPA-012 | pv_contract_gate_on_commit | ACTIVE_RUNTIME | pre-commit hook + CI pv validate + pin-check |
Behavioral parity gates
| ID | Name | Status | Asserted by |
|---|---|---|---|
| CCPA-001 | trace_schema_roundtrip | ACTIVE_RUNTIME | crates/ccpa-trace/tests/falsify_ccpa_001_roundtrip.rs (17 tests) |
| CCPA-002 | replay_determinism | ACTIVE_RUNTIME | crates/ccpa-replayer/ (16 tests) |
| CCPA-003 | mock_completeness | ACTIVE_RUNTIME | same harness |
| CCPA-004 | tool_call_equivalence | ACTIVE_RUNTIME | crates/ccpa-differ/tests/falsify_ccpa_004_tool_equivalence.rs (36 tests) |
| CCPA-005 | file_mutation_equivalence | ACTIVE_RUNTIME | crates/ccpa-differ/tests/falsify_ccpa_005_file_mutation.rs (15 tests) |
| CCPA-006 | sovereignty_on_replay | ACTIVE_RUNTIME | crates/ccpa-differ/tests/falsify_ccpa_006_sovereignty.rs (10 tests) |
| CCPA-007 | corpus_coverage | HARD-BLOCKING (M16) | tests + CI ccpa coverage --oos-rows ... |
| CCPA-008 | parity_score_bound | ADVISORY (M230) | crates/ccpa-differ/tests/falsify_ccpa_008_parity_score.rs (24 tests) |
| CCPA-013 | first_recorded_parity_score | DISCHARGED | fixtures/canonical/measured-parity.json (n=30, aggregate=1.0000) |
| CCPA-014 | os_event_parity_bound | ACTIVE_RUNTIME | crates/ccpa-differ/tests/falsify_ccpa_014_os_event_parity.rs |
| CCPA-015 | os_trace_output_purity | ACTIVE_RUNTIME | crates/ccpa-subproc/tests/falsify_ccpa_015_output_purity.rs |
| CCPA-016 | outcome_parity_bound | ACTIVE_RUNTIME | crates/ccpa-differ/tests/falsify_ccpa_016_outcome_parity.rs |
| CCPA-017 | project_scale_parity_bound | PROPOSED (v1.28.0) | crates/ccpa-differ/tests/falsify_ccpa_017_project_scale_parity.rs |
| CCPA-018 | arena_recovery_rate_bound | PROPOSED (v1.29.0) | crates/ccpa-arena/tests/falsify_ccpa_018_arena_recovery_rate.rs |
| CCPA-019 | calibration_required_before_verdict | PROPOSED (v1.32.0) | crates/ccpa-differ/tests/falsify_ccpa_019_calibration.rs |
| CCPA-020 | contract_compliance_per_turn | PROPOSED (v1.32.0) | crates/ccpa-arena/tests/falsify_ccpa_020_contract_compliance.rs |
Cross-reference per chapter
- Source-of-truth invariants — the four M0+ gates that govern the project's own quality posture
- Behavioral parity gates — the gates that govern what
apr code↔claudeparity means - Status flow — the PROPOSED → ACTIVE_ALGORITHM_LEVEL → ACTIVE_RUNTIME transition table
Mechanically asserted
Every gate is enforced by pv validate per CLAUDE.md § "DOGFOOD pv, NEVER bash". pv is the dogfooded contract validator (binary from aprender-contracts-cli). Re-implementing what pv already does in bash/python is muda and is rejected. If pv validate rejects a contract, fix the contract or extend aprender-contracts/src/schema/.