0.3.15-pre.014-fix.001
This commit is contained in:
145
deltas/0.3.15/pre.014-fix.001.md
Normal file
145
deltas/0.3.15/pre.014-fix.001.md
Normal file
@@ -0,0 +1,145 @@
|
||||
<!-- file: deltas/0.3.15/pre.014-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta v0.3.15-pre.014-fix.001 — troncature `logMessages` compatible non terminale
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
ksp-general-0.3.15-pre.014.zip
|
||||
SHA-256 : 73435098f6b8a7cfc5e3af4c04d2c7ffd3a39f6edb322ef79b21b16757f70b87
|
||||
bytes : 124399
|
||||
```
|
||||
|
||||
Le gate opérateur de `pre.014` est vert côté audits/check/Clippy/tests. Le live reproduit un unique `content_conflict` Yellowstone pendant l'exécution parallèle avec HTTP Block Polling.
|
||||
|
||||
Le diagnostic `pre.014` ferme la cause : au slot `447781296`, les deux routes voient la même identité de bloc et la même transaction. Seul `meta.logMessages` diffère. Le canonique déjà stocké contient `176` lignes sans troncature ; l'entrant contient `118` lignes et le marqueur exact `Log truncated` au premier point divergent. Toutes les lignes précédentes sont identiques.
|
||||
|
||||
## Objectif
|
||||
|
||||
Ne plus transformer ce cas précis en erreur terminale Worker lorsque la version complète est déjà canonique.
|
||||
|
||||
La règle `0.3.15` reste volontairement étroite :
|
||||
|
||||
```text
|
||||
canonique complet
|
||||
+ incoming avec même identité / slot / block_time / format
|
||||
+ même transaction / version / transactionIndex
|
||||
+ mêmes champs meta hors logMessages
|
||||
+ exactement un marqueur "Log truncated" côté incoming
|
||||
+ préfixe identique avant le marqueur
|
||||
=> canonique inchangé
|
||||
=> RawEntityWriteOutcome::AlreadyPresent
|
||||
=> observation entrante persistée
|
||||
=> aucun content_conflict
|
||||
=> Worker continue
|
||||
```
|
||||
|
||||
Le matériel situé après le marqueur de troncature n'est pas utilisé pour prouver la complétude. Le marqueur constitue la frontière informationnelle ; la preuve porte sur le préfixe antérieur et sur l'égalité de tous les autres champs.
|
||||
|
||||
Restent des conflits en `0.3.15` : préfixe différent avant le marqueur, autre champ `meta` différent, transaction/version/index différents, marqueur absent/non exact/multiple, ou sens inverse `canonique tronqué -> incoming plus complet`. Ce dernier cas exige une promotion canonique atomique et est réservé à `0.3.16`.
|
||||
|
||||
## Handoff `0.3.16`–`0.3.18`
|
||||
|
||||
La décision opérateur est consignée durablement :
|
||||
|
||||
```text
|
||||
0.3.16 RAW resilience / variantes / conflits / résolutions / retry-reconnect / Store Desk
|
||||
0.3.17 ksp-job-backfill-lib multi-route / multi-stratégie
|
||||
0.3.18 ksp-app-backfill-desk adapté au Job multi-route
|
||||
```
|
||||
|
||||
Le contrat détaillé est ajouté dans `docs/plans/037-V0_3_16_RAW_RESILIENCE_CONFLICT_HANDOFF.md`.
|
||||
|
||||
`0.3.16` devra notamment introduire les variantes RAW durables, la classification `Exact / CompatibleLessComplete / CompatibleMoreComplete / Conflict`, la promotion canonique réversible, la quarantaine des vrais conflits sans arrêt du Worker, l'historique de résolution, le retry Store sans perte silencieuse, la reconnexion Transport configurable/bornée et les vues de gestion correspondantes dans Store Desk.
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
docs/plans/037-V0_3_16_RAW_RESILIENCE_CONFLICT_HANDOFF.md
|
||||
deltas/0.3.15/pre.014-fix.001.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
ROADMAP.md
|
||||
crates/ksp-store-postgres-lib/src/raw_transaction.rs
|
||||
crates/ksp-store-postgres-lib/tests/hardening_completeness.rs
|
||||
crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs
|
||||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||||
docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md
|
||||
docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
|
||||
docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md
|
||||
docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
Aucun.
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
workspace.package.version : 0.3.15-pre.14.fix.1
|
||||
root Cargo header counter : 629
|
||||
```
|
||||
|
||||
## Canaris ajoutés
|
||||
|
||||
```text
|
||||
v0_3_15_pre_014_fix_001_incoming_truncated_logs_are_compatible_only_when_missing_middle_is_proven
|
||||
v0_3_15_pre_014_fix_001_truncated_log_compatibility_rejects_unproven_or_reverse_changes
|
||||
v0_3_15_pre_014_fix_001_truncated_log_compatibility_is_narrow_and_keeps_canonical_content
|
||||
```
|
||||
|
||||
Les tests vérifient notamment que le préfixe divergent, un autre champ `meta`, un marqueur non exact et le sens inverse restent non compatibles. Le contenu situé après le marqueur n'est volontairement pas traité comme preuve de complétude.
|
||||
|
||||
## Validations exécutées dans l'environnement de préparation
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15
|
||||
Markdown table audit: clean (318 table(s), 224 file(s))
|
||||
```
|
||||
|
||||
Scan statique du diff production : aucun nouvel `unwrap()`, `expect(`, `panic!(`, `unreachable!(`, `unsafe {`, `unbounded_channel` ou `tokio::spawn`.
|
||||
|
||||
## Validations non exécutées ici
|
||||
|
||||
`cargo` et `rustfmt` ne sont pas disponibles dans l'environnement de préparation. Ne pas considérer les gates suivants comme passés avant exécution opérateur :
|
||||
|
||||
```text
|
||||
cargo fmt --all
|
||||
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
|
||||
```
|
||||
|
||||
## Gate live requis
|
||||
|
||||
Lancer Yellowstone + HTTP Block Polling Mainnet en `confirmed` suffisamment longtemps pour recroiser une transaction avec logs tronqués côté provider.
|
||||
|
||||
Attendus :
|
||||
|
||||
```text
|
||||
aucun terminal content_conflict pour FULL déjà canonique + TRUNCATED compatible
|
||||
Yellowstone reste Running
|
||||
route non Unhealthy/Faulted pour ce cas
|
||||
canonique complet inchangé
|
||||
observation de la route tronquée enregistrée
|
||||
pas de grpc_backpressure_overflow
|
||||
```
|
||||
|
||||
Le cas inverse `TRUNCATED canonique puis FULL entrant` peut encore produire `content_conflict` en `0.3.15`; il est explicitement reporté à la promotion/variant machinery de `0.3.16` et ne doit pas être maquillé par un overwrite destructif dans ce fix.
|
||||
Reference in New Issue
Block a user