52 lines
2.6 KiB
Rust
52 lines
2.6 KiB
Rust
//! alkstore-contract-suite — the contract suite crate (ADR-022).
|
|
//!
|
|
//! The suite is the [verification
|
|
//! backlog](../../docs/architecture/core-contract.md) property set
|
|
//! parameterized over a [`StoreFactory`] — one normative owner per
|
|
//! property (the one-owner rule, ADR-012 §2 applied to test
|
|
//! artifacts); each engine crate consumes the suite as a
|
|
//! *dev*-dependency and drives its rows against its own factory. The
|
|
//! crate is internal and unpublished (`publish = false`, depends on
|
|
//! `alkstore` only); ADR-017 §4.2's "layout decided at implementation"
|
|
//! deferral is discharged by
|
|
//! [ADR-022](../../docs/architecture/decisions/022-contract-suite-layout.md).
|
|
//!
|
|
//! # Row structure
|
|
//!
|
|
//! Each backlog row is one named, independently-runnable property — a
|
|
//! public async function taking `&dyn StoreFactory` — with a
|
|
//! **version stamp** per the suite's [version-stamp
|
|
//! convention](version_stamp): a doc-comment line citing the contract
|
|
//! change (ADR §) that added the row (ADR-017 §4.2's no-silent-change
|
|
//! discipline applied to the suite itself). Wave 3/4 engine tasks run
|
|
//! the existing rows against their engines; wave 5 fills the
|
|
//! cross-engine equivalence rows.
|
|
//!
|
|
//! # Crate posture
|
|
//!
|
|
//! This is a test-side artifact (ADR-001 §4's posture), not contract
|
|
//! surface: rows assert with panics on violation — a failing row is a
|
|
//! test failure naming the entry point and expectation — so the
|
|
//! family-wide no-panic rule is relaxed here by the crate's purpose.
|
|
//! Suite-side changes are contract-non-events (ADR-017 §2 class 4:
|
|
//! the suite tests the contract, it is not the contract); a row added
|
|
//! for a *contract* addition is stamped with that addition's ADR.
|
|
|
|
pub mod factory;
|
|
pub mod properties;
|
|
pub mod version_stamp;
|
|
|
|
pub use factory::StoreFactory;
|
|
pub use properties::{
|
|
backoff_curve_equivalence, concurrent_try_lock_loser_is_a_value,
|
|
duration_refusal_on_non_positive_ttl, enqueue_opts_resolution, extent_clamp_semantics,
|
|
in_tx_reads_see_own_writes, job_handle_validity_predicate, lock_ttl_expiry_and_reacquisition,
|
|
name_validation_rejects_empty_and_reserved, outbox_enqueue_tx_commit_atomicity,
|
|
payload_round_trip_stores_exact_encoding, payload_too_large_never_produced_on_sqlite,
|
|
payload_too_large_produced_on_pg, publish_with_key_tx_commit_atomicity,
|
|
queue_depth_reclaim_and_dead_letter, receiver_close_and_save_arms, scheduler_boundary_fires,
|
|
scheduler_bounded_catchup, scheduler_leadership_discipline, stream_ordering_equivalence,
|
|
sweep_no_stranded_rows, trim_to_semantics, wake_receiver_shapes,
|
|
with_tx_panicking_closure_rolls_back,
|
|
};
|