# Delta v0.3.15-pre.014 — convergence inter-provider diagnostiquable ## Base ```text ksp-general-0.3.15-pre.013.zip SHA-256: 4d463230f45a55f68994443f138afd246b6ec34bea21357c2cedfe5d8fe1c5c6 ``` Le gate opérateur de `pre.013` est propre et le live ne reproduit plus le `grpc_backpressure_overflow` fermé par cette tranche. Yellowstone devient néanmoins terminal `content_conflict` une fois pendant l'exécution parallèle avec HTTP Block Polling. Le diagnostic de `pre.012-fix.004` prouve que le conflit ne porte ni sur le slot, ni sur `block_time`, ni sur les octets/instructions de transaction, ni sur la version, ni sur `transactionIndex`. Seul `meta.logMessages` diffère. La version déjà canonique provient de `solana_mainnet_public`; la version entrante est hydratée par `publicnode_solana_mainnet_rpc` après trigger Yellowstone, toutes deux en `confirmed`. ## Diagnostic ajouté Chaque `getBlock` réussi des voies Yellowstone Block Hydration et HTTP Block Polling émet désormais un diagnostic DEBUG sûr : ```text domain=raw_transaction_ingest.block_identity source_kind network slot provider endpoint_id commitment parent_slot block_height block_identity_fingerprint ``` `block_identity_fingerprint` est un SHA-256 domain-separated calculé à partir de `blockhash`, `previousBlockhash`, `parentSlot` et `blockHeight`. Les blockhash bruts ne sont jamais journalisés. Lors d'un `content_conflict`, Store complète son masque existant avec : ```text stored_slot incoming_slot log_messages_diagnostic_available stored_log_messages_state incoming_log_messages_state stored_log_messages_count incoming_log_messages_count log_messages_first_mismatch_index stored_log_messages_first_kind incoming_log_messages_first_kind stored_log_messages_first_length incoming_log_messages_first_length stored_log_messages_prefix_of_incoming incoming_log_messages_prefix_of_stored stored_log_messages_has_truncation_marker incoming_log_messages_has_truncation_marker ``` Les types de ligne sont réduits à une taxonomie statique ; aucun texte arbitraire de log n'est recopié. ## Frontières Aucun changement de : ```text RawTransaction canonical identity égalité / content_hash politique fail-closed content_conflict Store schema Transport gRPC / HTTP Config Desk Backfill public Worker API public Store API ``` `logMessages` reste partie intégrante du payload canonique tant que la cause de la divergence n'est pas prouvée. ## Canaris ```text v0_3_15_pre_014_log_messages_conflict_diagnostic_distinguishes_prefix_truncation_and_line_kind_without_text v0_3_15_pre_014_log_messages_conflict_diagnostic_detects_strict_prefix_without_exposing_line_material v0_3_15_pre_014_content_conflict_diagnostic_exposes_only_block_slot_and_bounded_log_shape v0_3_15_pre_014_cross_provider_block_identity_diagnostic_is_safe_and_covers_both_get_block_routes v0_3_15_pre_014_cross_provider_convergence_diagnostic_adds_no_public_worker_surface ``` ## Version ```text workspace.package.version : 0.3.15-pre.14 root Cargo header counter : 628 ``` ## Validation attendue ```text 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 (cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev) ``` Live : Yellowstone + HTTP Block Polling en `confirmed` jusqu'à reproduction d'un conflit. Au slot annoncé par Store, comparer les deux `block_identity_fingerprint`, puis lire la forme bornée de `logMessages`. Si nécessaire, répéter ensuite la même expérience en `finalized` comme diagnostic de finalité, sans changer le défaut produit par défaut.