diff --git a/Cargo.toml b/Cargo.toml index d4bbbe9..85445e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 630 +# version: 631 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-raw-transaction-ingest-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"] [workspace.package] -version = "0.3.15-pre.14.fix.2" +version = "0.3.15-pre.14.fix.3" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs b/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs index a0cf2a8..e194e4e 100644 --- a/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs +++ b/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs @@ -1,5 +1,5 @@ // file: crates/ksp-store-postgres-lib/tests/hardening_completeness.rs -// version: 26 +// version: 27 #![warn(missing_docs)] #![deny(unreachable_pub)] @@ -659,7 +659,19 @@ fn v0_3_15_pre_014_fix_001_truncated_log_compatibility_is_narrow_and_keeps_canon ] { assert!(source.contains(required), "missing narrow truncated-log compatibility guard: {required}"); } - assert!(!source.contains("UPDATE ksp_raw_transactions SET payload")); - assert!(!source.contains("DELETE FROM ksp_raw_transactions")); + let start = source.find("fn compare_existing_transaction("); + assert!(start.is_some(), "missing fix.001 existing-transaction comparison path"); + let Some(start) = start else { + return; + }; + let end = source[start..].find("fn raw_transaction_incoming_truncated_log_messages_compatible("); + assert!(end.is_some(), "missing fix.001 compatibility helper boundary"); + let Some(end) = end else { + return; + }; + let comparison = &source[start..start + end]; + assert!(comparison.contains("ExistingTransactionMatch::ActiveIncomingTruncatedLogs")); + assert!(!comparison.contains("UPDATE ksp_raw_transactions SET payload")); + assert!(!comparison.contains("DELETE FROM ksp_raw_transactions")); return; } diff --git a/deltas/0.3.15/pre.014-fix.003.md b/deltas/0.3.15/pre.014-fix.003.md new file mode 100644 index 0000000..016062a --- /dev/null +++ b/deltas/0.3.15/pre.014-fix.003.md @@ -0,0 +1,41 @@ + + + +# Delta v0.3.15-pre.014-fix.003 — resserrement du canari Store `CompatibleLessComplete` + +## Base requise + +```text +ksp-general-0.3.15-pre.014-fix.002.zip +SHA-256 : 4998f938a2b10835429e345edf9e94bc5d7364da88d1e509b8313d316db69d7c +bytes : 31529 +``` + +## Cause + +Le gate opérateur de `pre.014-fix.002` confirme la correction de typage et progresse jusqu'aux tests d'intégration `ksp-store-postgres-lib`. L'unique échec restant est le canari `v0_3_15_pre_014_fix_001_truncated_log_compatibility_is_narrow_and_keeps_canonical_content`. + +Le canari interdisait `UPDATE ksp_raw_transactions SET payload` dans tout `src/raw_transaction.rs`. Cette condition est trop large : le backend contient déjà légitimement cette instruction dans la transition de rétention/archive, indépendamment du chemin de compatibilité des `logMessages` tronqués. Le test produisait donc un faux positif. + +## Correction + +Le canari borne désormais son inspection au corps de `compare_existing_transaction()`, depuis sa déclaration jusqu'à la déclaration de `raw_transaction_incoming_truncated_log_messages_compatible()`. Il exige toujours la branche `ExistingTransactionMatch::ActiveIncomingTruncatedLogs` et vérifie uniquement dans ce chemin de décision qu'aucune réécriture SQL du payload canonique et aucune suppression de transaction n'existent. + +Aucun fichier de production n'est modifié. Aucun changement de schéma, Store runtime, Transport, Worker, API publique ou politique de conflit n'est introduit. + +## Validation opérateur + +```bash +cargo fmt --all +cargo fmt --all -- --check +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15 +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-store-postgres-lib --all-targets --all-features +cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features +cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features +cargo test --workspace --all-targets --all-features +``` + +Le live n'est pas requis pour ce fix de canari. Le prochain live prolongé appartient à la prerelease acquisition dédiée au backpressure Yellowstone. diff --git a/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md b/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md index 00639c6..8a13a2a 100644 --- a/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md +++ b/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md @@ -1,5 +1,5 @@ - + # Validation v0.3.15 — Raw Transaction Ingest Desk @@ -997,3 +997,11 @@ Ensuite, un `grpc_backpressure_overflow` réapparaît sur Yellowstone Mainnet lo Non-claims de `fix.002` : aucun changement de Transport, Worker runtime, Store production, politique de conflit ou capacité de queue. Le seul changement Rust est la correction de typage du test PostgreSQL. +### `pre.014-fix.003` — resserrement du canari de non-réécriture canonique + +Le gate opérateur de `pre.014-fix.002` confirme la correction de typage : les audits statiques sont propres, `cargo check --workspace` et Clippy strict passent, les `75/75` tests unitaires `ksp-store-postgres-lib` passent, puis l'unique échec apparaît dans `tests/hardening_completeness.rs`. Le canari `v0_3_15_pre_014_fix_001_truncated_log_compatibility_is_narrow_and_keeps_canonical_content` cherchait la chaîne SQL `UPDATE ksp_raw_transactions SET payload` dans l'intégralité de `src/raw_transaction.rs`. Or cette chaîne existe légitimement dans la transition de rétention/archive historique du backend et n'appartient pas au chemin `CompatibleLessComplete`. + +`fix.003` resserre donc uniquement ce canari sur le corps de `compare_existing_transaction()`, jusqu'à la frontière du helper `raw_transaction_incoming_truncated_log_messages_compatible()`. Dans cette portion exacte, le test continue d'exiger le retour `ExistingTransactionMatch::ActiveIncomingTruncatedLogs` et interdit toute occurrence d'`UPDATE ... payload` ou de `DELETE FROM ksp_raw_transactions`. Le comportement production, le schéma SQL, la compatibilité `logMessages`, les outcomes Store et le Worker restent byte-for-byte inchangés par ce fix. + +Non-claim : ce fix ne traite pas le `grpc_backpressure_overflow` Yellowstone prolongé déjà identifié ; ce défaut ouvre toujours la prochaine prerelease acquisition dédiée après fermeture du gate `pre.014`. +