rhi

Coordinated trade for connected markets
git clone https://radroots.dev/git/rhi.git
Log | Files | Refs | README | LICENSE

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 }