# Delta `0.3.15-pre.012-fix.004` ## Base ```text base archive : ksp-general-0.3.15-pre.012-fix.003.zip base SHA-256 : da69b2bb468af431ca156885bd5150e8e690b57ffdfd1dec60f3e32393deeecf base version : 0.3.15-pre.12.fix.3 ``` ## Motif du fix Le live Mainnet de `pre.012-fix.003` reproduit un terminal Yellowstone `worker_raw_transaction_ingest.content_conflict` avec `content_conflict_total=13` pendant l'exécution simultanée de `yellowstone-hydrated` et `http-block-polling`. Les deux routes étant deux Workers indépendants sur le même Store, le conflit inter-routes est détecté par PostgreSQL et le diagnostic Worker seul ne peut pas dire quels composants RAW divergent. Un autre run reproduit séparément `source_failed / onchain_transport.grpc_backpressure_overflow`; ce second défaut reste inchangé et n'est pas masqué par ce fix. ## Correction Le backend PostgreSQL classe maintenant tout conflit actif `raw_acquisition_content_conflict` avant de renvoyer le même fault. Le log structurel expose uniquement des booléens de divergence pour `slot`, `block_time`, format, hash/bytes, `transaction`, `meta`, `version`, `transactionIndex`, plus une liste statique de champs `meta` divergents. Les champs `meta` admis dans le diagnostic sont bornés à : ```text err status fee preBalances postBalances innerInstructions logMessages preTokenBalances postTokenBalances rewards loadedAddresses returnData computeUnitsConsumed costUnits accounts ``` Les clés inconnues sont agrégées sous `other`. Aucune valeur distante n'est journalisée. Sur le même conflit, une lecture best-effort de l'observation durable la plus ancienne projette uniquement la provenance logique sûre du contenu stocké face à l'observation entrante : provider, protocol, acquisition method, endpoint id et commitment. Signature, payload, hashes, bytes, capture session et filter id restent absents des logs. L'échec de cette lecture de diagnostic ne remplace jamais le conflit original. ## Version ```text workspace.package.version : 0.3.15-pre.12.fix.4 root Cargo header counter : 626 ``` ## Frontières Aucun changement de : ```text Store schema / migrations identité canonique RAW comparaison d'égalité RAW politique fail-closed content_conflict Worker health/fault routes / Start / Stop / shutdown Config / Transport / Common RAW replay / repair ``` Le seul nouvel edge de dépendance est `serde_json` dans `ksp-store-postgres-lib`, utilisé pour classifier en mémoire un payload RAW v1 déjà canonique au point de conflit. ## Validation attendue Le gate opérateur doit notamment confirmer : ```text cargo fmt --all -- --check 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 ``` Puis un live simultané Yellowstone + HTTP Block Polling doit capturer les deux lignes `store.raw_transaction.content_conflict` si le désaccord réapparaît. ## Inventaire exact du delta Ajout : ```text deltas/0.3.15/pre.012-fix.004.md ``` Modifications : ```text Cargo.toml crates/ksp-store-postgres-lib/Cargo.toml crates/ksp-store-postgres-lib/src/raw_transaction.rs crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs crates/ksp-store-postgres-lib/tests/dependency_boundary.rs crates/ksp-store-postgres-lib/tests/hardening_completeness.rs docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md ``` Suppressions : aucune.