0.3.15-pre.012-fix.004

This commit is contained in:
2026-09-16 23:49:07 +02:00
parent d56de4ace9
commit 1573273d27
8 changed files with 460 additions and 12 deletions

View File

@@ -0,0 +1,108 @@
<!-- file: deltas/0.3.15/pre.012-fix.004.md -->
<!-- version: 1 -->
# 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.