0.3.16-pre.008

This commit is contained in:
2026-09-22 07:40:23 +02:00
parent de81084560
commit 14f89262ab
8 changed files with 533 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/tests/v003_variant_persistence.rs
// version: 4
// version: 5
#![warn(missing_docs)]
#![deny(unreachable_pub)]
@@ -145,3 +145,50 @@ fn v0_3_16_pre_006_promotion_is_inside_acquisition_transaction_and_preserves_pre
assert!(promotion.contains("next_transaction_canonical_revision"));
return;
}
#[test]
fn v0_3_16_pre_008_conflict_path_never_mutates_canonical_projection_or_selector() {
let source = include_str!("../src/raw_transaction.rs");
let start = source.find("ExistingTransactionMatch::ActiveConflict(variant_comparison) => {");
let end = source.find("ExistingTransactionMatch::Purged => {");
let (start, end) = match (start, end) {
(std::option::Option::Some(start), std::option::Option::Some(end)) if start < end => (start, end),
_ => panic!("pre.008 conflict branch markers are missing"),
};
let branch = &source[start..end];
assert!(branch.contains("persist_or_reuse_native_transaction_variant"));
assert!(branch.contains("open_or_update_raw_transaction_conflict"));
assert!(branch.contains("RawTransactionVariantWriteOutcome::QuarantinedConflict"));
assert!(!branch.contains("promote_more_complete_transaction_variant"));
assert!(!branch.contains("UPDATE_CANONICAL_TRANSACTION_PROJECTION_SQL"));
assert!(!branch.contains("UPDATE_TRANSACTION_VARIANT_SELECTOR_SQL"));
return;
}
#[test]
fn v0_3_16_pre_008_variant_transition_helpers_cannot_commit_independently() {
let source = include_str!("../src/raw_transaction.rs");
let promotion_start = source.find("async fn promote_more_complete_transaction_variant(");
let promotion_end = source.find("async fn preserve_previous_canonical_variant(");
let conflict_start = source.find("async fn open_or_update_raw_transaction_conflict(");
let conflict_end = source.find("async fn promote_more_complete_transaction_variant(");
let (promotion_start, promotion_end, conflict_start, conflict_end) = match (promotion_start, promotion_end, conflict_start, conflict_end) {
(Some(promotion_start), Some(promotion_end), Some(conflict_start), Some(conflict_end))
if promotion_start < promotion_end && conflict_start < conflict_end =>
{
(promotion_start, promotion_end, conflict_start, conflict_end)
},
_ => panic!("pre.008 transition helper markers are missing"),
};
let promotion = &source[promotion_start..promotion_end];
let conflict = &source[conflict_start..conflict_end];
for helper in [promotion, conflict] {
assert!(helper.contains("&deadpool_postgres::Transaction<'_>"));
assert!(!helper.contains(".commit().await"));
}
assert!(source.contains("const LOCK_TRANSACTION_SQL: &str = \"SELECT"));
assert!(source.contains("WHERE signature = $1 FOR UPDATE\";"));
assert!(source.contains("canonical_variant_id = $2::TEXT::NUMERIC AND canonical_revision = $3::TEXT::NUMERIC"));
assert!(source.contains("AND revision = $8::TEXT::NUMERIC"));
return;
}