0.3.16-pre.007

This commit is contained in:
2026-09-22 06:22:40 +02:00
parent a97837b832
commit d768737629
22 changed files with 842 additions and 276 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/hardening_completeness.rs
// version: 28
// version: 29
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -645,7 +645,7 @@ fn v0_3_15_pre_014_content_conflict_diagnostic_exposes_only_block_slot_and_bound
}
#[test]
fn v0_3_16_pre_005_postgres_uses_shared_fail_closed_variant_comparator_without_promotion() {
fn v0_3_16_pre_007_postgres_uses_shared_fail_closed_variant_comparator_with_durable_conflict() {
let source = include_str!("../src/raw_transaction.rs");
for required in [
"ksp_store_api::compare_raw_transaction_variants",
@@ -655,7 +655,8 @@ fn v0_3_16_pre_005_postgres_uses_shared_fail_closed_variant_comparator_without_p
"RawTransactionVariantRelation::Conflict",
"RawTransactionVariantRelation::Incomparable",
"ExistingTransactionMatch::ActiveCompatibleLessComplete",
"raw_acquisition_content_conflict",
"ExistingTransactionMatch::ActiveConflict",
"RawTransactionVariantWriteOutcome::QuarantinedConflict",
] {
assert!(source.contains(required), "missing shared comparator integration guard: {required}");
}

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/v003_variant_persistence.rs
// version: 3
// version: 4
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -59,7 +59,7 @@ fn v0_3_16_pre_004_legacy_observation_without_mapping_is_not_fabricated() {
}
#[test]
fn v0_3_16_pre_006_shared_comparator_promotes_only_more_complete_and_keeps_conflict_deferred() {
fn v0_3_16_pre_007_shared_comparator_promotes_more_complete_and_quarantines_conflict() {
let source = include_str!("../src/raw_transaction.rs");
assert!(source.contains("ksp_store_api::compare_raw_transaction_variants"));
assert!(source.contains("ExistingTransactionMatch::ActiveCompatibleLessComplete"));
@@ -70,7 +70,44 @@ fn v0_3_16_pre_006_shared_comparator_promotes_only_more_complete_and_keeps_confl
assert!(source.contains("UPDATE ksp_raw_transactions SET slot = $2::TEXT::NUMERIC"));
assert!(source.contains("PostgreSQL Store committed a proved RAW transaction canonical promotion"));
assert!(!source.contains("log_raw_transaction_compatible_more_complete_log_messages"));
assert!(!source.contains("INSERT INTO ksp_raw_transaction_conflicts"));
assert!(source.contains("INSERT INTO ksp_raw_transaction_conflicts"));
assert!(source.contains("ExistingTransactionMatch::ActiveConflict"));
assert!(source.contains("RawTransactionVariantWriteOutcome::QuarantinedConflict"));
return;
}
#[test]
fn v0_3_16_pre_007_conflict_is_persisted_inside_acquisition_transaction_before_observation_and_commit() {
let source = include_str!("../src/raw_transaction.rs");
let start = source.find("pub(crate) async fn persist_raw_transaction_acquisition(");
let end = source.find("pub(crate) async fn record_raw_transaction_observation(");
let (start, end) = match (start, end) {
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
_ => panic!("pre.007 acquisition function markers are missing"),
};
let body = &source[start..end];
let persist_variant = body.find("persist_or_reuse_native_transaction_variant");
let conflict = body.find("open_or_update_raw_transaction_conflict");
let observation = body.find("persist_observation_row");
let commit = body.rfind("sql_transaction.commit().await");
let transition_log = body.find("log_raw_transaction_conflict_quarantined_committed");
assert!(matches!(
(persist_variant, conflict, observation, commit, transition_log),
(Some(persist_variant), Some(conflict), Some(observation), Some(commit), Some(transition_log))
if persist_variant < conflict && conflict < observation && observation < commit && commit < transition_log
));
assert!(body.contains("RawTransactionVariantWriteOutcome::QuarantinedConflict"));
let conflict_start = source.find("async fn open_or_update_raw_transaction_conflict(");
let conflict_end = source.find("async fn persist_observation_row(");
let (conflict_start, conflict_end) = match (conflict_start, conflict_end) {
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
_ => panic!("pre.007 conflict helper markers are missing"),
};
let conflict_helper = &source[conflict_start..conflict_end];
assert!(conflict_helper.contains("LOCK_TRANSACTION_CONFLICT_SQL"));
assert!(conflict_helper.contains("INSERT_TRANSACTION_CONFLICT_SQL"));
assert!(conflict_helper.contains("UPDATE_TRANSACTION_CONFLICT_SQL"));
assert!(conflict_helper.contains("checked_add(1)"));
return;
}