109 lines
3.6 KiB
Markdown
109 lines
3.6 KiB
Markdown
<!-- 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.
|