v0.3.13-pre.008
This commit is contained in:
198
deltas/0.3.13/pre.008.md
Normal file
198
deltas/0.3.13/pre.008.md
Normal file
@@ -0,0 +1,198 @@
|
||||
<!-- file: deltas/0.3.13/pre.008.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.13-pre.008 — convergence cross-source et observations multiples
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
livraison précédente : 0.3.13-pre.007
|
||||
Cargo base : 0.3.13-pre.7
|
||||
delta base : deltas/0.3.13/pre.007.md
|
||||
archive delta base : ksp-general-0.3.13-pre.007.zip
|
||||
```
|
||||
|
||||
Le gate opérateur communiqué le 10 septembre 2026 est vert pour toutes les commandes exécutées : `cargo fmt`, `cargo fmt --check`, audits Rust/Markdown, `cargo check --workspace`, Clippy strict et toutes les suites `ksp-worker-raw-transaction-ingest-lib` (`90` unit, `4` cross-layer, `14` dependency-boundary, `21` hardening, `15` public-api, `4` release-completeness, `0` doc-test). Le log reçu ne contient pas les sorties séparées `cargo test -p ksp-onchain-transport-lib` ni les trois commandes `cargo tree`; elles ne sont donc pas déclarées PASS ici.
|
||||
|
||||
## Objectif
|
||||
|
||||
Fermer la convergence des sources live simultanées sans dupliquer l'identité `RawTransaction` :
|
||||
|
||||
```text
|
||||
plusieurs sources reference-bearing
|
||||
-> une hydration globale par (network, signature, commitment)
|
||||
-> acquisitions source-distinctes
|
||||
-> canonicalisation RAW commune
|
||||
-> convergence par (network, signature) + content hash
|
||||
-> une entity RAW
|
||||
-> plusieurs observations déterministes
|
||||
```
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
livraison : 0.3.13-pre.008
|
||||
workspace.package.version : 0.3.13-pre.8
|
||||
archive : ksp-general-0.3.13-pre.008.zip
|
||||
```
|
||||
|
||||
`Cargo.toml` passe de la version de fichier `552` à `553`.
|
||||
|
||||
## Hydration globale cross-source
|
||||
|
||||
`RawTransactionIngestRuntimeResources::run_live_sources` crée un `RawTransactionIngestGlobalHydrationRegistry` privé partagé par Yellowstone, Standard Logs et Helius Transaction. Standard Block et HTTP Block Polling restent RAW-direct et n'entrent pas dans ce registre.
|
||||
|
||||
La clé reste exactement :
|
||||
|
||||
```text
|
||||
(network, signature, commitment)
|
||||
```
|
||||
|
||||
Le premier demandeur devient leader et exécute le `getTransaction observed` existant. Les suivants s'abonnent au même résultat via un `watch` privé. La registry est bornée par `admission_queue_capacity`, publie soit le résultat observed soit un `ErrorCode` sûr, puis retire la clé.
|
||||
|
||||
Les signaux source restent distincts : le même résultat d'hydration est finalisé séparément avec le contexte/provenance de chaque signal.
|
||||
|
||||
## Convergence persistence
|
||||
|
||||
Le runtime possède un `RawTransactionIngestPersistenceConvergence` privé et run-local. Sa capacité productive est :
|
||||
|
||||
```text
|
||||
max(admission_queue_capacity, persistence_concurrency)
|
||||
```
|
||||
|
||||
Chaque identité `(network, signature)` possède un verrou async local et mémorise le `RawContentHash` canonique après une première persistence réussie non purgée.
|
||||
|
||||
```text
|
||||
première acquisition
|
||||
-> persist_raw_transaction_acquisition
|
||||
-> Store atomique entity + observation
|
||||
|
||||
même identity + même content hash
|
||||
-> record_raw_transaction_observation uniquement
|
||||
|
||||
même identity + hash divergent
|
||||
-> content conflict terminal
|
||||
```
|
||||
|
||||
Le cache évince uniquement une entrée inactive lorsqu'il atteint sa borne. Le runtime dimensionne cette borne pour couvrir toutes les tâches persistence simultanées valides.
|
||||
|
||||
## Observations multiples
|
||||
|
||||
L'`observation_key` reste dérivée de la référence canonique et du `source_key` privé. Deux sources distinctes observant le même RAW produisent donc une seule référence/entity mais des observations déterministes distinctes.
|
||||
|
||||
Un replay de la même observation retourne `AlreadyPresent` sans réécriture de l'entité. Une observation supplémentaire `NotRecorded` est incohérente pour une entité déjà durable et devient une faute runtime sûre.
|
||||
|
||||
## Preuves ajoutées
|
||||
|
||||
Tests unitaires déterministes :
|
||||
|
||||
```text
|
||||
deux source_key -> même référence/hash canonique, observation_key distinctes
|
||||
registry globale -> un leader, un follower, publication partagée puis retrait
|
||||
première identity -> une persistence atomique
|
||||
seconde observation distincte -> record_observation seul
|
||||
replay même observation -> AlreadyPresent sans nouvelle persistence entity
|
||||
```
|
||||
|
||||
Canaris externes :
|
||||
|
||||
```text
|
||||
dependency_boundary : Store/Transport facades uniquement, pas de backend/client direct
|
||||
hardening : caches bornés, hash conflict-checked, convergence privée, aucun canal unbounded
|
||||
public_api : registry/cache/hydration key/source_key non exposés
|
||||
release_completeness : présence obligatoire des trois canaris pre.008
|
||||
```
|
||||
|
||||
## Frontière de tranche
|
||||
|
||||
`pre.008` ne ferme pas encore :
|
||||
|
||||
```text
|
||||
fairness adversariale sous duplicate storm prolongé
|
||||
starvation entre sources
|
||||
matrice complète de disagreement provider/source
|
||||
stress des bornes globales
|
||||
nouveaux compteurs/health publics multi-source
|
||||
```
|
||||
|
||||
Ces points restent `pre.009` et `pre.010` selon le plan.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/README.md
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/persistence.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/admission.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/persistence.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
|
||||
docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
|
||||
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.13/pre.008.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## Validation dans l'environnement d'assemblage
|
||||
|
||||
Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-`pre.008` restent donc `NON EXÉCUTÉ LOCAL`. Les audits statiques KSP, le scan normatif, le contrôle exhaustif du diff, des headers et du ZIP sont exécutés avant livraison.
|
||||
|
||||
Résultats statiques finaux :
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (340 tables, 842 files)
|
||||
Normative rule definitions: 489
|
||||
Unique normative IDs: 489
|
||||
Duplicates: 0
|
||||
```
|
||||
|
||||
Contrôle ciblé :
|
||||
|
||||
```text
|
||||
17 fichiers existants modifiés
|
||||
1 fichier ajouté
|
||||
0 suppression
|
||||
17/17 headers existants : +1
|
||||
nouvelle dépendance : aucune
|
||||
backend Store physique direct : absent
|
||||
client HTTP/gRPC direct : absent
|
||||
unbounded_channel : absent
|
||||
convergence/registry publiques : absentes
|
||||
```
|
||||
|
||||
## Gate opérateur requis avant pre.009
|
||||
|
||||
```bash
|
||||
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
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
cargo test -p ksp-onchain-transport-lib
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
|
||||
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
|
||||
cargo tree --duplicates
|
||||
```
|
||||
Reference in New Issue
Block a user