{ "schema_version": 1, "always": [ { "test": "fold:benchmark_evaluation", "rationale": "Preserve positive, negative, and regression corpus contracts for every change." }, { "test": "fold:source_structure", "rationale": "Preserve production architecture and source-budget contracts for every change." } ], "rules": [ { "id": "analysis-and-detectors", "globs": [ "src/analysis/**", "include/fold/analysis/**" ], "tests": [ "fold:quality_precision", "fold:source_metamorphic", "fold:sast_security_e2e", "fold:cross_tu_security" ], "rationale": "Detector and symbolic-analysis changes need precision, metamorphic, security, and cross-TU regressions." }, { "id": "cli-router-and-reports", "globs": [ "src/cli/**", "include/fold/cli/**", "src/report/**", "include/fold/report/**" ], "tests": [ "fold:scan_e2e", "fold:subprocess_fanout" ], "rationale": "CLI, router, and report changes affect observable scan behavior and subprocess orchestration." }, { "id": "binary-analysis", "globs": [ "src/backend/r2*", "include/fold/backend/r2*", "src/binary/**", "include/fold/binary/**" ], "tests": [ "fold:binary_backend", "fold:binary_rop" ], "rationale": "Binary backend changes need extraction and binary-security regression coverage." }, { "id": "source-backend", "globs": [ "src/backend/clang*", "include/fold/backend/clang*" ], "tests": [ "fold:scan_e2e", "fold:cross_tu_security", "fold:sast_security_e2e" ], "rationale": "Source backend changes affect scan routing, cross-TU behavior, and security findings." }, { "id": "ir-and-symbolic-model", "globs": [ "src/ir/**", "include/fold/ir/**", "src/symbolic/**", "include/fold/symbolic/**" ], "tests": [ "fold:expr_json_roundtrip", "fold:guarded_facts", "fold:symbolic_arrays", "fold:quality_precision" ], "rationale": "IR and symbolic-model changes need serialization, fact, array, and detector precision regressions." }, { "id": "rust-frontend", "globs": [ "src/backend/rust*", "include/fold/backend/rust*", "tools/fold-rust/**" ], "tests": [ "fold:rust_frontend", "fold:expr_json_roundtrip" ], "rationale": "Rust frontend changes need wire-format and frontend integration coverage." }, { "id": "swift-frontend", "globs": [ "src/backend/swift*", "include/fold/backend/swift*", "tools/fold-swift/**" ], "tests": [ "fold:swift_frontend", "fold:expr_json_roundtrip" ], "rationale": "Swift frontend changes need wire-format and frontend integration coverage." }, { "id": "scan-e2e-test", "globs": [ "tests/integration/test_scan_e2e.cpp" ], "tests": [ "fold:scan_e2e" ], "rationale": "Changes to the scan end-to-end regression must execute that regression." }, { "id": "lint-policy", "globs": [ "tests/lint/**" ], "tests": [ "fold:benchmark_evaluation", "fold:source_structure" ], "rationale": "Lint policy changes retain the unconditional harness and architecture regression checks." }, { "id": "quality-harness", "globs": [ "scripts/benchmarks/**", "scripts/fold_quality.py", "scripts/select_impacted_tests.py", "tests/benchmarks/**", "tests/architecture/**", "tests/quality/**" ], "tests": [ "fold:benchmark_evaluation", "fold:source_structure" ], "rationale": "Quality-harness changes need their Python and architecture regression suites." } ], "fallback_globs": [ "meson.build", "meson_options.txt", "src/**", "include/**", "tools/**", "tests/**" ] }