v0.3.13-pre.002
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
|
||||
|
||||
@@ -293,6 +293,8 @@ Cette borne concerne les **sources runtime**, pas la cardinalité des filtres pr
|
||||
|
||||
La collection est validée entièrement avant tout spawn réseau.
|
||||
|
||||
Tranchage technique : `pre.002` matérialise cette composition et ses invariants mais ne branche pas encore la supervision simultanée. Tant que `pre.007` n'a pas introduit le supervisor/source inventory, une collection de plus d'une source doit échouer fermée avant spawn ; démarrer silencieusement un sous-ensemble serait interdit.
|
||||
|
||||
### 8.4 Simultanéité
|
||||
|
||||
Toutes les sources retenues dans `RawTransactionIngestRuntimeResources` sont démarrées simultanément.
|
||||
@@ -770,7 +772,7 @@ Archive, règles, collision `KSP-CONFIG-018`, audit interne/externe, contrats so
|
||||
|
||||
### pre.002 — runtime resources multi-source
|
||||
|
||||
Collection bornée 1..32, source key, discriminants capability-owned, validation globale, sans branchement productif des nouvelles sources.
|
||||
Collection bornée 1..32, source key, discriminants capability-owned, validation globale, sans branchement productif des nouvelles sources. Toute activation avec plus d'une source échoue fermée jusqu'au supervisor `pre.007`.
|
||||
|
||||
### pre.003 — WS standard logsSubscribe + hydration
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
|
||||
|
||||
## 1. Rôle
|
||||
|
||||
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` est exclusivement un gate d'archive, règles, audit, brainstorming, sizing et planification ; aucune nouvelle source live productive n'est codée dans cette tranche.
|
||||
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` ferme l'audit/planification ; `pre.002` matérialise la composition runtime multi-source et l'identité logique sans activer encore la supervision simultanée ni une nouvelle famille de source productive.
|
||||
|
||||
## 2. Archive stable contrôlée
|
||||
|
||||
@@ -492,3 +492,169 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
|
||||
```
|
||||
|
||||
`pre.002` ne doit pas commencer si cette livraison révèle une anomalie de règles/version/archive non corrigée.
|
||||
|
||||
## 21. Gate opérateur pre.001 reçu avant pre.002
|
||||
|
||||
Le journal opérateur du 10 septembre 2026 sur `0.3.13-pre.1` montre :
|
||||
|
||||
```text
|
||||
cargo fmt --all -- --check : PASS
|
||||
General Rust rule audit : clean
|
||||
Rust export completeness audit : 0 candidate
|
||||
KSP workspace Rust rule audit : clean
|
||||
Markdown table audit : clean (340 tables, 828 files)
|
||||
cargo check --workspace : PASS
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib : PASS
|
||||
cargo tree Worker --edges normal : produit
|
||||
cargo tree Worker -e features : produit
|
||||
cargo tree --duplicates : produit
|
||||
```
|
||||
|
||||
Suites Worker affichées :
|
||||
|
||||
```text
|
||||
unit : 66 pass
|
||||
cross_layer_completeness : 4 pass
|
||||
dependency_boundary : 9 pass
|
||||
hardening : 16 pass
|
||||
public_api : 9 pass
|
||||
release_completeness : 4 pass
|
||||
doc-tests : 0
|
||||
```
|
||||
|
||||
Le gate `pre.001 -> pre.002` est donc satisfait.
|
||||
|
||||
## 22. Implémentation pre.002
|
||||
|
||||
`pre.002` ajoute dans le Worker :
|
||||
|
||||
```text
|
||||
MAX_RAW_TRANSACTION_INGEST_LIVE_SOURCES = 32
|
||||
collection privée Vec<RawTransactionIngestLiveSource>
|
||||
discriminant privé capability-owned : Yellowstone
|
||||
source_count public source-neutral
|
||||
try_push_yellowstone_source transactionnel
|
||||
validation réseau globale
|
||||
rejet duplicate logical source identity
|
||||
rejet > 32
|
||||
rejet cross-network
|
||||
```
|
||||
|
||||
L'identité Yellowstone est calculée sans URL/credential/payload distant :
|
||||
|
||||
```text
|
||||
KSP source-key domain
|
||||
source family = yellowstone
|
||||
network
|
||||
safe provider identity
|
||||
safe endpoint identity
|
||||
commitment
|
||||
opaque deterministic Yellowstone Subscribe request identity
|
||||
SHA-256 -> [u8; 32]
|
||||
```
|
||||
|
||||
Le rôle/pool HTTP d'hydration n'entre volontairement pas dans cette identité : il qualifie la stratégie d'enrichissement d'un signal, pas l'identité de la source live Yellowstone. Deux subscriptions Yellowstone identiques ne peuvent donc pas contourner le rejet de doublon en changeant uniquement de rôle HTTP.
|
||||
|
||||
Transport fournit l'identité de requête sous `YellowstoneSubscribeRequestIdentity` : les sept familles de filtres sont encodées séparément dans l'ordre canonique des noms de `BTreeMap`, avec leur protobuf exact, puis les options communes sont encodées avec les maps vidées. Les bytes restent privés ; `Debug` n'expose que leur longueur et l'API ne fournit aucun getter des bytes.
|
||||
|
||||
Aucune nouvelle dépendance n'est ajoutée : Transport réutilise le `prost` réexporté par `yellowstone-grpc-proto` déjà présent.
|
||||
|
||||
## 23. Gate d'activation multi-source pre.002
|
||||
|
||||
Le modèle final `0.3.13` exige le démarrage simultané de toutes les sources configurées, mais le supervisor/source inventory appartient explicitement à `pre.007`.
|
||||
|
||||
Décision de sûreté pour `pre.002` :
|
||||
|
||||
```text
|
||||
1 source Yellowstone : voie productive 0.3.12 conservée
|
||||
2..32 sources validées : composition acceptée
|
||||
start avec 2..32 sources : erreur stable avant spawn
|
||||
aucun démarrage silencieux d'un sous-ensemble
|
||||
aucune nouvelle famille de source productive
|
||||
```
|
||||
|
||||
Condition d'erreur interne :
|
||||
|
||||
```text
|
||||
runtime_resources.multi_source_activation_pending
|
||||
```
|
||||
|
||||
Cette barrière sera retirée uniquement lorsque `pre.007` possédera le supervisor simultané et ses preuves de stop/fault/join.
|
||||
|
||||
## 24. Preuves déterministes ajoutées pre.002
|
||||
|
||||
Transport :
|
||||
|
||||
```text
|
||||
request identity stable malgré ordre d'insertion des filtres
|
||||
request identity change si le contenu logique du filtre change
|
||||
Debug de l'identité ne révèle pas les noms de filtres
|
||||
surface publique identité disponible via crate root
|
||||
absence de bytes/as_bytes escape hatch
|
||||
```
|
||||
|
||||
Worker :
|
||||
|
||||
```text
|
||||
source_key stable pour même source logique
|
||||
source_key change si request fingerprint ou endpoint-safe identity change
|
||||
exactement 32 sources acceptées
|
||||
33e source rejetée transactionnellement
|
||||
duplicate logical identity rejeté
|
||||
cross-network source rejetée
|
||||
Debug runtime resources = source_count seulement
|
||||
multi-source start fail-closed avant supervisor tranche
|
||||
surface publique = bound + count + push capability-specific, sans source_key public
|
||||
```
|
||||
|
||||
## 25. Validations locales post-modification pre.002
|
||||
|
||||
Le toolchain Cargo/Rustfmt reste indisponible dans l'environnement d'assemblage. Les validations Cargo ci-dessous devront donc être exécutées par l'opérateur avant `pre.003` et ne sont pas déclarées PASS localement.
|
||||
|
||||
Résultat après toutes les modifications de la tranche :
|
||||
|
||||
```text
|
||||
General Rust rule audit : clean
|
||||
Rust export completeness audit : 0 candidate
|
||||
KSP workspace Rust rule audit : clean
|
||||
Markdown table audit : clean (340 tables, 829 files)
|
||||
normative rule definitions : 489 / 489 uniques / 0 duplicate definition id
|
||||
```
|
||||
|
||||
## 26. Non-claims pre.002
|
||||
|
||||
`pre.002` ne prétend pas :
|
||||
|
||||
```text
|
||||
avoir ajouté logsSubscribe productif
|
||||
avoir ajouté blockSubscribe productif
|
||||
avoir ajouté Helius transactionSubscribe productif
|
||||
avoir ajouté HTTP block polling productif
|
||||
avoir démarré plusieurs sources simultanément
|
||||
avoir déplacé le coordinator Yellowstone vers le niveau Worker global
|
||||
avoir implémenté observation fanout multi-source
|
||||
avoir modifié Common RAW ou Store API
|
||||
avoir ajouté une dépendance externe
|
||||
avoir exécuté Cargo localement
|
||||
```
|
||||
|
||||
## 27. Gate opérateur requis avant pre.003
|
||||
|
||||
Après application du delta :
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
`pre.003` ne doit pas commencer si cette livraison révèle une anomalie de règles, API, version, archive ou dépendance non corrigée.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user