services_hardening_publication_wave_qualification_contract.rs (4884B)
1 #![forbid(unsafe_code)] 2 3 use serde_json::json; 4 5 const CONTRACT: &str = 6 include_str!("../contracts/services_hardening/publication_wave_qualification.v1.json"); 7 const CATALOG_SOURCE: &str = include_str!("../src/state_catalog.rs"); 8 const EXECUTION_SOURCE: &str = include_str!("../src/publication_execution.rs"); 9 const README: &str = include_str!("../README"); 10 11 #[test] 12 fn step203_machine_contract_freezes_the_complete_qualification_boundary() { 13 let contract: serde_json::Value = serde_json::from_str(CONTRACT).expect("contract"); 14 assert_eq!( 15 contract["schema"], 16 "radroots.rhi.publication-wave-qualification" 17 ); 18 assert_eq!(contract["schema_version"], 1); 19 assert_eq!(contract["contract_version"], 1); 20 assert_eq!(contract["step"], 203); 21 assert_eq!(contract["service"], "rhi"); 22 assert_eq!(contract["state_schema_version"], 8); 23 assert_eq!( 24 contract["component_corpus"], 25 json!([ 26 "exact_byte_publication_persists_submitted_before_io_and_commits_accepted", 27 "cancelled_submitted_attempt_recovers_unknown_and_retries_exact_bytes_after_reopen", 28 "publication_outcome_commit_is_idempotent_and_inspection_is_nonmutating", 29 "publication_execution_binds_live_authority_without_mutating_on_mismatch_or_disable", 30 "terminal_required_rejection_blocks_the_outbox_without_retry_schedule", 31 "concurrent_publication_execution_has_one_remote_submitter", 32 "publication_queue_capacity_is_checked_before_finalization_mutation", 33 "schema_v8_scans_historical_nullable_job_state_and_installs_permanent_guards" 34 ]) 35 ); 36 assert_eq!( 37 contract["source_locked_shared_sqlite_corpus"], 38 json!([ 39 "every_initialization_durability_edge_fails_once_and_rolls_back", 40 "transaction_durability_edges_preserve_exact_commit_semantics", 41 "backup_durability_edges_fail_once_clean_exact_stage_and_recover", 42 "close_durability_edges_are_once_only_retryable_or_terminal", 43 "every_marker_and_restore_durability_edge_is_wired_once", 44 "sigkill_restore_boundaries_recover_exact_topologies_and_preserve_permissions" 45 ]) 46 ); 47 assert_eq!( 48 contract["historical_reconciliation_job_guard"], 49 json!({ 50 "migration_target_version": 8, 51 "scan": "forward_only_fail_closed_before_guard_installation", 52 "repair_or_delete_invalid_rows": false, 53 "permanent_guards": [ 54 "reconciliation_jobs_shape_guard_insert", 55 "reconciliation_jobs_shape_guard_update" 56 ], 57 "required_ready_fields": ["next_attempt_unix_ms"], 58 "required_leased_fields": ["lease_owner", "lease_expires_unix_ms"], 59 "terminal_nullable_fields": [ 60 "next_attempt_unix_ms", 61 "lease_owner", 62 "lease_expires_unix_ms" 63 ] 64 }) 65 ); 66 assert_eq!( 67 contract["resource_bounds"], 68 json!({ 69 "maximum_publication_queue": 65_536, 70 "maximum_targets_per_outbox": 32, 71 "maximum_attempts_per_target": 100, 72 "maximum_signed_event_bytes": 32_768 73 }) 74 ); 75 for invariant in [ 76 "exact_committed_bytes_only", 77 "remote_io_outside_sql_transaction", 78 "submitted_before_remote_io", 79 "single_cas_winner", 80 "unknown_outcome_recovered_before_retry", 81 "invalid_historical_state_fails_without_repair", 82 ] { 83 assert_eq!(contract["invariants"][invariant], true, "{invariant}"); 84 } 85 assert_eq!( 86 contract["invariants"]["production_failpoint_surface"], 87 false 88 ); 89 assert_eq!(contract["invariants"]["ambient_network"], false); 90 assert_eq!(contract["invariants"]["unbounded_resource"], false); 91 } 92 93 #[test] 94 fn qualification_remains_private_sqlx_owned_and_documented() { 95 for required in [ 96 "CREATE TABLE reconciliation_jobs_shape_scan_v1", 97 "DROP TABLE reconciliation_jobs_shape_scan_v1", 98 "CREATE TRIGGER reconciliation_jobs_shape_guard_insert", 99 "CREATE TRIGGER reconciliation_jobs_shape_guard_update", 100 "typeof(next_attempt_unix_ms) != 'integer'", 101 "typeof(lease_owner) != 'blob'", 102 "typeof(lease_expires_unix_ms) != 'integer'", 103 ] { 104 assert!(CATALOG_SOURCE.contains(required), "missing `{required}`"); 105 } 106 for forbidden in [ 107 "RHI_FAILPOINT", 108 "RHI_TEST_", 109 "production_failpoint", 110 "pub fn sqlite", 111 "pub fn connection", 112 "pub fn transaction", 113 ] { 114 assert!(!EXECUTION_SOURCE.contains(forbidden), "found `{forbidden}`"); 115 } 116 assert!(README.contains( 117 "[`publication_wave_qualification.v1.json`](contracts/services_hardening/publication_wave_qualification.v1.json)" 118 )); 119 }