v0.3.10-pre.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 489
|
# version: 490
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api"]
|
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.3.9"
|
version = "0.3.10-pre.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
263
deltas/0.3.10/pre.001.md
Normal file
263
deltas/0.3.10/pre.001.md
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<!-- file: deltas/0.3.10/pre.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta 0.3.10-pre.001 — audit/sizing RAW Transaction + Worker ingest
|
||||||
|
|
||||||
|
## Base
|
||||||
|
|
||||||
|
```text
|
||||||
|
archive : khadhroony-solana-project-v0.3.9.zip
|
||||||
|
SHA-256 : 41ef2589a11410aabfb329d387f0008e116006da60ada0802e5f72bc30d3466f
|
||||||
|
ZIP bytes : 7859118
|
||||||
|
ZIP entries : 1855
|
||||||
|
unzip -t : PASS
|
||||||
|
workspace members : 19
|
||||||
|
workspace.package.version base : 0.3.9
|
||||||
|
```
|
||||||
|
|
||||||
|
Le ZIP a été contrôlé sans path traversal/entrée absolue, symlink, `.git/`, `target/`, `node_modules/`, `Cargo.lock`, `.env` ou fichier de clé privée détecté.
|
||||||
|
|
||||||
|
## Type de livraison
|
||||||
|
|
||||||
|
```text
|
||||||
|
ksp-general-0.3.10-pre.001.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
Le type `general` est obligatoire parce que `Cargo.toml` racine est synchronisé vers `0.3.10-pre.1` par `VER-ID-009`. L’archive d’échange ne doit contenir que les fichiers ajoutés/modifiés et le delta, conformément à `VER-ARCHIVE-004`.
|
||||||
|
|
||||||
|
## Baseline exécutée avant modification
|
||||||
|
|
||||||
|
```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
|
||||||
|
Markdown table audit: clean (332 table(s), 750 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
`cargo` n’est pas installé dans l’environnement d’assemblage. Aucun gate Cargo local n’est déclaré PASS. Le journal opérateur stable `0.3.9` reste une preuve externe distincte.
|
||||||
|
|
||||||
|
## Objectif
|
||||||
|
|
||||||
|
Exécuter le gate d’ouverture `0.3.10-pre.001` demandé par le prompt `029` : vérifier intégralement la base `v0.3.9`, auditer l’extraction RAW commune et les capabilities live, réévaluer `TR-B..TR-F`, fixer les frontières Common/Worker/Transport/Config/Store, puis dimensionner les tranches suivantes sans commencer l’implémentation lourde.
|
||||||
|
|
||||||
|
## Mission exécutée
|
||||||
|
|
||||||
|
`pre.001` reste une tranche de planification, conformément au prompt `029` :
|
||||||
|
|
||||||
|
```text
|
||||||
|
lecture règles/architecture obligatoires
|
||||||
|
inventaire workspace/manifests/features
|
||||||
|
extraction RAW commune auditée
|
||||||
|
capability matrix Worker implementation-ready
|
||||||
|
TR-B..TR-F réévalués
|
||||||
|
fraîcheur Solana/Yellowstone/providers revalidée
|
||||||
|
runtime/source supervision décidés
|
||||||
|
continuité/gap repair décidés
|
||||||
|
snapshot concret décidé
|
||||||
|
Config/secrets boundary décidée
|
||||||
|
threat model et preuves définis
|
||||||
|
dependency graph cible fixé
|
||||||
|
prereleases redimensionnées
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucune implémentation lourde des deux nouvelles crates n’est commencée.
|
||||||
|
|
||||||
|
## Décisions principales
|
||||||
|
|
||||||
|
### Common RAW
|
||||||
|
|
||||||
|
```text
|
||||||
|
crate : ksp-raw-transaction-lib
|
||||||
|
RAW format : ksp.solana.raw_transaction v1 inchangé
|
||||||
|
common deps : ksp-core-lib + ksp-store-lib(default-features=false) + serde_json + sha2
|
||||||
|
aucun Transport/Config/Job/Worker/runtime/backend
|
||||||
|
RawObservationKey reste producer-owned
|
||||||
|
Backfill conserve son observation key/job_id/scope_fingerprint/origin
|
||||||
|
```
|
||||||
|
|
||||||
|
Golden confirmé :
|
||||||
|
|
||||||
|
```text
|
||||||
|
byte_len = 112
|
||||||
|
sha256 = 220792d2b15d262fda242cb220774ee9ddeffebf04dcfadabcf8ef76a9b1a7c3
|
||||||
|
```
|
||||||
|
|
||||||
|
Toute source full doit prouver une parité byte-for-byte avec RAW v1 avant persistence directe ; sinon elle reste discovery + hydration.
|
||||||
|
|
||||||
|
### Worker concret
|
||||||
|
|
||||||
|
```text
|
||||||
|
crate : ksp-worker-raw-transaction-ingest-lib
|
||||||
|
caller-owned Tokio runtime
|
||||||
|
Worker-owned source/supervisor tasks
|
||||||
|
bounded channels uniquement
|
||||||
|
multi-source simultané
|
||||||
|
Store idempotence comme vérité de convergence
|
||||||
|
observations distinctes conservées
|
||||||
|
content conflict terminal
|
||||||
|
repair borné au run frontier
|
||||||
|
reconnect != replay
|
||||||
|
aucun paramètre historique métier au start
|
||||||
|
```
|
||||||
|
|
||||||
|
### Transport gaps
|
||||||
|
|
||||||
|
```text
|
||||||
|
TR-B confirmé : get_block_observed
|
||||||
|
TR-C confirmé/scindé : common material + adapters Worker + Transport change only if DTO lacks fidelity
|
||||||
|
TR-D confirmé : provenance durable full-material + source runtime snapshot
|
||||||
|
TR-E confirmé : reuse from_slot/replay info, aucun second Yellowstone client
|
||||||
|
TR-F réservé : EARLY seulement si protocole/accès/rôle RAW prouvés
|
||||||
|
```
|
||||||
|
|
||||||
|
### Config
|
||||||
|
|
||||||
|
```text
|
||||||
|
aucun edge Worker -> Config
|
||||||
|
std.transport V3 actuel réutilisé
|
||||||
|
pas de nouveau document métier Worker imposé en 0.3.10
|
||||||
|
adaptation Config seulement si un manque Transport concret l’exige
|
||||||
|
secrets restent Config-owned et redacted
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fraîcheur externe
|
||||||
|
|
||||||
|
Vérifié le 5 septembre 2026 :
|
||||||
|
|
||||||
|
```text
|
||||||
|
yellowstone-grpc-proto latest = 12.7.0 (2026-08-29)
|
||||||
|
workspace stable = ^12.7 -> aucun bump initial
|
||||||
|
Yellowstone block from_slot replay a reçu un fix upstream en juillet 2026 -> smoke block replay obligatoire
|
||||||
|
Helius transactionSubscribe courant ; Helius blockSubscribe explicitement non supporté
|
||||||
|
Helius LaserStream replay 24 h documenté
|
||||||
|
PublicNode Yellowstone Mainnet/Testnet visible ; replay depth non prouvée
|
||||||
|
OrbitFlare gRPC Devnet disponible Free/Developer
|
||||||
|
QuickNode gRPC Scale+ ; port 443/x-token ; port 10000 sunset 2026-10-01
|
||||||
|
Alchemy replay docs contradictoires 6000 vs 432000 slots -> aucune constante KSP
|
||||||
|
Jito ShredStream shutdown annoncé pour 2026-09-05 -> SUNSET, non retenu TR-F
|
||||||
|
```
|
||||||
|
|
||||||
|
## Plan recalibré
|
||||||
|
|
||||||
|
```text
|
||||||
|
pre.002 common RAW foundation
|
||||||
|
pre.003 Backfill migration
|
||||||
|
pre.004 observed block + HTTP block material
|
||||||
|
pre.005 WS/Helius full parity
|
||||||
|
pre.006 Yellowstone parity
|
||||||
|
pre.007 Worker runtime foundation
|
||||||
|
pre.008 Yellowstone live/replay
|
||||||
|
pre.009 WS/HTTP live
|
||||||
|
pre.010 multi-source persistence/hardening
|
||||||
|
pre.011 gap repair
|
||||||
|
pre.012 Config/profiles + smokes accessibles
|
||||||
|
pre.013 EARLY si prouvé, sinon consolidation
|
||||||
|
pre.014 gate technique/live final
|
||||||
|
pre.015 réconciliation documentaire
|
||||||
|
pre.016 préparation publication
|
||||||
|
rel.001 stable
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fichiers ajoutés
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
|
||||||
|
docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md
|
||||||
|
deltas/0.3.10/pre.001.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fichiers modifiés
|
||||||
|
|
||||||
|
```text
|
||||||
|
Cargo.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
`Cargo.toml` :
|
||||||
|
|
||||||
|
```text
|
||||||
|
file version 489 -> 490
|
||||||
|
workspace.package.version 0.3.9 -> 0.3.10-pre.1
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce bump est requis par `VER-ID-009` pour toute prerelease non-fix, même lorsque la tranche est documentaire.
|
||||||
|
|
||||||
|
## Fichiers supprimés
|
||||||
|
|
||||||
|
```text
|
||||||
|
aucun
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation après modification
|
||||||
|
|
||||||
|
Audits statiques réellement exécutés après matérialisation de `pre.001` :
|
||||||
|
|
||||||
|
```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
|
||||||
|
Markdown table audit: clean (339 table(s), 753 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
Le premier passage Markdown post-modification a détecté 32 erreurs d’alignement uniquement dans les nouvelles tables. Elles ont été corrigées selon la règle KSP, puis le gate complet ci-dessus a été relancé jusqu’à PASS.
|
||||||
|
|
||||||
|
La comparaison byte-à-byte contre le contenu du ZIP stable, après suppression du cache Python d’audit, donne exactement :
|
||||||
|
|
||||||
|
```text
|
||||||
|
ajoutés :
|
||||||
|
deltas/0.3.10/pre.001.md
|
||||||
|
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
|
||||||
|
docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md
|
||||||
|
modifié :
|
||||||
|
Cargo.toml
|
||||||
|
supprimé :
|
||||||
|
aucun
|
||||||
|
```
|
||||||
|
|
||||||
|
Les commandes Cargo/Tauri ne sont pas exécutables dans l’environnement d’assemblage courant (`cargo` absent). Elles restent donc explicitement `NON EXÉCUTÉES LOCALEMENT` pour ce delta ; aucune preuve opérateur antérieure n’est transformée en PASS local.
|
||||||
|
|
||||||
|
## Validations non exécutées localement
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo fmt --all
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
cargo test --workspace --all-targets --all-features
|
||||||
|
cargo tree --duplicates
|
||||||
|
builds Tauri
|
||||||
|
smokes live opt-in
|
||||||
|
```
|
||||||
|
|
||||||
|
Motif : toolchain Cargo absent du sandbox d’assemblage et aucune credential/provider live n’est injectée. Les preuves stables fournies par l’opérateur sont conservées comme contexte externe distinct ; elles ne remplacent pas les gates futurs de `0.3.10`.
|
||||||
|
|
||||||
|
## Questions ouvertes
|
||||||
|
|
||||||
|
Aucune question de boundary ne bloque `pre.002`. Restent volontairement à résoudre par preuve pendant les tranches prévues :
|
||||||
|
|
||||||
|
```text
|
||||||
|
parité byte-for-byte RAW v1 des sources WS/Helius/Yellowstone full
|
||||||
|
profondeur replay réellement observable par provider au moment du smoke
|
||||||
|
nécessité éventuelle d’un profil/rôle Transport supplémentaire pour un smoke accessible
|
||||||
|
admission d’une source EARLY seulement si protocole, accès et rôle RAW sont effectivement prouvés
|
||||||
|
```
|
||||||
|
|
||||||
|
Ces points ne doivent pas être anticipés par des constantes, des claims lossless ou une RAW v2.
|
||||||
|
|
||||||
|
## Non inclus
|
||||||
|
|
||||||
|
```text
|
||||||
|
aucune nouvelle crate créée
|
||||||
|
aucun Rust modifié
|
||||||
|
aucun Transport/Config/Store code modifié
|
||||||
|
aucun kbot3 ouvert ou copié
|
||||||
|
aucun Worker live
|
||||||
|
aucun RAW v2
|
||||||
|
aucun CHANGELOG/ROADMAP modifié
|
||||||
|
aucun prompt 0.3.11 créé
|
||||||
|
aucun Cargo gate déclaré localement
|
||||||
|
```
|
||||||
1188
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
Normal file
1188
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
Normal file
File diff suppressed because it is too large
Load Diff
354
docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md
Normal file
354
docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
<!-- file: docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Validation v0.3.10 — RAW Transaction commune + Worker d’ingestion
|
||||||
|
|
||||||
|
## 1. Rôle du document
|
||||||
|
|
||||||
|
Ce document suit les preuves de la release `0.3.10` : extraction de la canonicalisation RAW v1 vers `ksp-raw-transaction-lib`, migration Backfill puis matérialisation du Worker continu multi-source `ksp-worker-raw-transaction-ingest-lib`.
|
||||||
|
|
||||||
|
Il distingue toujours :
|
||||||
|
|
||||||
|
```text
|
||||||
|
preuve exécutée
|
||||||
|
preuve seulement planifiée
|
||||||
|
preuve live accessible
|
||||||
|
preuve live bloquée par secret/tier
|
||||||
|
non-claim explicite
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Gate `pre.001` — audit/sizing/plan
|
||||||
|
|
||||||
|
État : **fermé pour la planification**, sans claim Cargo local.
|
||||||
|
|
||||||
|
### 2.1 Base contrôlée
|
||||||
|
|
||||||
|
```text
|
||||||
|
archive : khadhroony-solana-project-v0.3.9.zip
|
||||||
|
SHA-256 : 41ef2589a11410aabfb329d387f0008e116006da60ada0802e5f72bc30d3466f
|
||||||
|
bytes : 7859118
|
||||||
|
entries : 1855
|
||||||
|
unzip -t : PASS
|
||||||
|
workspace members : 19
|
||||||
|
workspace.package.version base : 0.3.9
|
||||||
|
stable delta : deltas/0.3.9/rel.001.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Sécurité archive :
|
||||||
|
|
||||||
|
```text
|
||||||
|
absolute/traversal entries : 0
|
||||||
|
symlinks : 0
|
||||||
|
.git/ : 0
|
||||||
|
target/ : 0
|
||||||
|
node_modules/ : 0
|
||||||
|
Cargo.lock : 0
|
||||||
|
.env : 0
|
||||||
|
private-key-like files checked : 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Le ZIP ne contient pas `.git`; le tag n’est donc pas directement inspectable dans cet environnement.
|
||||||
|
|
||||||
|
### 2.2 Baseline statique exécutée avant modification
|
||||||
|
|
||||||
|
```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
|
||||||
|
Markdown table audit: clean (332 table(s), 750 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 Cargo local
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo : indisponible dans l’environnement d’assemblage
|
||||||
|
```
|
||||||
|
|
||||||
|
Par conséquent :
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo fmt : NON EXÉCUTÉ ici
|
||||||
|
cargo check : NON EXÉCUTÉ ici
|
||||||
|
cargo clippy: NON EXÉCUTÉ ici
|
||||||
|
cargo test : NON EXÉCUTÉ ici
|
||||||
|
cargo tree : NON EXÉCUTÉ ici
|
||||||
|
Tauri build : NON EXÉCUTÉ ici
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucun de ces gates n’est déclaré PASS par cette session. Le journal opérateur fourni pour la stable `0.3.9` montre un gate complet antérieur ; il reste une preuve externe de la base stable, pas une exécution `pre.001` locale.
|
||||||
|
|
||||||
|
## 3. Preuves de conception fermées en `pre.001`
|
||||||
|
|
||||||
|
### 3.1 Common RAW
|
||||||
|
|
||||||
|
Décisions prouvées par inspection du code courant :
|
||||||
|
|
||||||
|
```text
|
||||||
|
format_id courant = ksp.solana.raw_transaction
|
||||||
|
format_version courant = 1
|
||||||
|
RawObservationKey est explicitement producer-owned dans Store
|
||||||
|
RawTransaction identity = network + signature
|
||||||
|
RawTransactionObservation est séparée de l’entité
|
||||||
|
ksp-store-lib reexporte les primitives nécessaires
|
||||||
|
Backfill conversion mélange actuellement canonicalisation commune et metadata Job-owned
|
||||||
|
```
|
||||||
|
|
||||||
|
Canari RAW v1 recalculé :
|
||||||
|
|
||||||
|
```text
|
||||||
|
bytes = {"transaction":["AQID","base64"],"meta":{"a":{"x":null,"y":true},"z":1},"version":"legacy","transactionIndex":7}
|
||||||
|
len = 112
|
||||||
|
sha256 = 220792d2b15d262fda242cb220774ee9ddeffebf04dcfadabcf8ef76a9b1a7c3
|
||||||
|
```
|
||||||
|
|
||||||
|
Le plan interdit tout déplacement de `job_id`, `scope_fingerprint`, lifecycle, checkpoint ou observation-key algorithm dans common.
|
||||||
|
|
||||||
|
### 3.2 Transport
|
||||||
|
|
||||||
|
Inventaire confirmé dans `ksp-onchain-transport-lib` :
|
||||||
|
|
||||||
|
```text
|
||||||
|
HttpObservedValue<T>
|
||||||
|
get_transaction_observed
|
||||||
|
get_block / get_blocks / get_blocks_with_limit
|
||||||
|
logsSubscribe
|
||||||
|
signatureSubscribe
|
||||||
|
blockSubscribe
|
||||||
|
Helius transactionSubscribe
|
||||||
|
Yellowstone transactions
|
||||||
|
Yellowstone transactions_status
|
||||||
|
Yellowstone blocks
|
||||||
|
Yellowstone blocks_meta
|
||||||
|
Yellowstone slots
|
||||||
|
Yellowstone from_slot
|
||||||
|
SubscribeReplayInfo / reconnect snapshot
|
||||||
|
```
|
||||||
|
|
||||||
|
Gaps requalifiés :
|
||||||
|
|
||||||
|
```text
|
||||||
|
TR-B confirmé : get_block_observed
|
||||||
|
TR-C confirmé/scindé : common material + adapters Worker + Transport seulement si DTO insuffisant
|
||||||
|
TR-D confirmé : provenance durable full-material + runtime source projection
|
||||||
|
TR-E confirmé : réutiliser from_slot/replay existant, aucun second moteur
|
||||||
|
TR-F réservé : aucun EARLY sans protocole+accès+rôle RAW prouvés
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 Config
|
||||||
|
|
||||||
|
Constats :
|
||||||
|
|
||||||
|
```text
|
||||||
|
std.transport format_version = 3
|
||||||
|
mainnet logique déjà canonique
|
||||||
|
profils OrbitFlare Devnet et PublicNode Mainnet/Testnet déjà présents
|
||||||
|
gRPC metadata publique/secrète déjà typée et redacted
|
||||||
|
HTTP roles/priorities/limits déjà supportés
|
||||||
|
WS protocol/session déjà supportés
|
||||||
|
```
|
||||||
|
|
||||||
|
Décision : pas d’edge Worker -> Config et pas de nouveau document métier Worker imposé dans `0.3.10`. Une adaptation Config n’est admise que pour un manque Transport concret découvert pendant l’implémentation.
|
||||||
|
|
||||||
|
## 4. Fraîcheur externe `pre.001`
|
||||||
|
|
||||||
|
### 4.1 Yellowstone
|
||||||
|
|
||||||
|
Vérifié le 5 septembre 2026 :
|
||||||
|
|
||||||
|
```text
|
||||||
|
yellowstone-grpc-proto latest = 12.7.0
|
||||||
|
publication = 2026-08-29
|
||||||
|
workspace KSP = ^12.7
|
||||||
|
```
|
||||||
|
|
||||||
|
Décision : aucun bump en ouverture.
|
||||||
|
|
||||||
|
Canaris imposés par changements upstream récents :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transaction V1/config doit survivre à la projection
|
||||||
|
block replay from_slot doit avoir un smoke dédié
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 Providers
|
||||||
|
|
||||||
|
| Source | Fait revalidé | Type de preuve `0.3.10` |
|
||||||
|
|:-----------------|:-------------------------------------------------------------------------------------|:---------------------------------------|
|
||||||
|
| Solana public | HTTP/WS standard accessibles ; blockSubscribe unstable | live opt-in + fixtures |
|
||||||
|
| PublicNode | Yellowstone Mainnet/Testnet affiché ; archive access proposé | live opt-in si token/config disponible |
|
||||||
|
| OrbitFlare | Devnet gRPC Free/Developer ; Yellowstone full-fidelity | live opt-in avec x-token opérateur |
|
||||||
|
| Helius | transactionSubscribe courant ; blockSubscribe non supporté ; LaserStream replay 24 h | fixture + live si tier/key |
|
||||||
|
| QuickNode | gRPC Scale+ ; port 443/x-token ; 10000 sunset 2026-10-01 | tier-bloqué |
|
||||||
|
| Alchemy | PAYG/Enterprise ; docs replay 6000 vs 432000 slots contradictoires | tier-bloqué, aucune constante |
|
||||||
|
| Jito ShredStream | shutdown annoncé 2026-09-05 | exclu TR-F |
|
||||||
|
|
||||||
|
## 5. Gates de parité RAW obligatoires
|
||||||
|
|
||||||
|
Une source dite full n’obtient le statut `direct canonical producer` qu’après :
|
||||||
|
|
||||||
|
```text
|
||||||
|
same fixture identity
|
||||||
|
same canonical bytes
|
||||||
|
same SHA-256
|
||||||
|
same slot
|
||||||
|
same block_time semantics
|
||||||
|
same version/index semantics
|
||||||
|
```
|
||||||
|
|
||||||
|
Familles à prouver séparément :
|
||||||
|
|
||||||
|
```text
|
||||||
|
HTTP getTransaction
|
||||||
|
HTTP getBlock transaction
|
||||||
|
WS blockSubscribe transaction
|
||||||
|
Helius transactionSubscribe full
|
||||||
|
Yellowstone transaction
|
||||||
|
Yellowstone block transaction
|
||||||
|
Transaction V1
|
||||||
|
```
|
||||||
|
|
||||||
|
En cas d’échec de parité :
|
||||||
|
|
||||||
|
```text
|
||||||
|
pas de RAW v2 automatique
|
||||||
|
pas de first-provider-wins
|
||||||
|
pas de content normalization ad hoc non documentée
|
||||||
|
source utilisée comme discovery + hydration HTTP jusqu’à résolution
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. Gates Worker à fermer pendant la release
|
||||||
|
|
||||||
|
### 6.1 Lifecycle/runtime
|
||||||
|
|
||||||
|
```text
|
||||||
|
Created -> Starting -> Running -> Stopping -> Stopped
|
||||||
|
Faulted terminal
|
||||||
|
stop idempotent
|
||||||
|
caller-owned Tokio runtime
|
||||||
|
Worker-owned spawned tasks
|
||||||
|
aucun JoinHandle public
|
||||||
|
shutdown borné
|
||||||
|
aucune tâche source survivante
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 Sources et backpressure
|
||||||
|
|
||||||
|
```text
|
||||||
|
N sources simultanées
|
||||||
|
bounded channels seulement
|
||||||
|
slow source isolation
|
||||||
|
queue saturation observable
|
||||||
|
aucun drop silencieux
|
||||||
|
degraded/unhealthy/fault policy explicite
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 Persistence
|
||||||
|
|
||||||
|
```text
|
||||||
|
new entity + new observation
|
||||||
|
idempotent entity + new source observation
|
||||||
|
idempotent observation
|
||||||
|
content conflict terminal
|
||||||
|
aucun backend physique dans Worker
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4 Continuité
|
||||||
|
|
||||||
|
```text
|
||||||
|
run frontier borné
|
||||||
|
reconnect != replay
|
||||||
|
transaction replay from_slot
|
||||||
|
block replay from_slot
|
||||||
|
redundant-source repair
|
||||||
|
HTTP block repair
|
||||||
|
hydration repair
|
||||||
|
unresolved gap reste visible
|
||||||
|
aucun historical caller parameter
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.5 Observabilité
|
||||||
|
|
||||||
|
```text
|
||||||
|
WorkerSnapshot commun
|
||||||
|
RawTransactionIngestSnapshot concret
|
||||||
|
latest-value indépendamment des lecteurs
|
||||||
|
source health/counters/gaps/frontiers sûrs
|
||||||
|
aucun payload/signature/URL/secret
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. Matrice de types de preuve
|
||||||
|
|
||||||
|
| Preuve | Déterministe | Réseau externe | Secret/tier | Gate release |
|
||||||
|
|:------------------------------|:------------:|:--------------:|:---------------:|:--------------------------------------------------|
|
||||||
|
| common golden RAW v1 | oui | non | non | obligatoire |
|
||||||
|
| cross-source parity fixtures | oui | non | non | obligatoire |
|
||||||
|
| Worker fake multi-source | oui | non | non | obligatoire |
|
||||||
|
| Store façade fake | oui | non | non | obligatoire |
|
||||||
|
| HTTP/WS Solana public smoke | non | oui | non | opt-in, pertinent |
|
||||||
|
| PublicNode Yellowstone | non | oui | possible | opt-in si accès |
|
||||||
|
| OrbitFlare Devnet Yellowstone | non | oui | x-token | opt-in si accès |
|
||||||
|
| Helius transactionSubscribe | non | oui | key/tier | opt-in, non bloquant si tier absent |
|
||||||
|
| QuickNode Yellowstone | non | oui | tier | bloqué, fixture suffit |
|
||||||
|
| Alchemy Yellowstone | non | oui | PAYG/Enterprise | bloqué, fixture suffit |
|
||||||
|
| PostgreSQL Store proof | non | local/externe | URI dédiée | opt-in gate technique si environnement disponible |
|
||||||
|
|
||||||
|
## 8. Commands de gate cible
|
||||||
|
|
||||||
|
À exécuter dès que Rust est modifié puis au gate technique final :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
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 --workspace --all-targets --all-features
|
||||||
|
cargo tree -p ksp-raw-transaction-lib --edges normal
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
Ne jamais remplacer un gate non exécuté par un ancien log stable.
|
||||||
|
|
||||||
|
## 9. Non-claims `pre.001`
|
||||||
|
|
||||||
|
À ce stade il n’est **pas** affirmé que :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Yellowstone full produit déjà des bytes RAW v1 identiques à HTTP
|
||||||
|
Helius full produit déjà des bytes RAW v1 identiques à HTTP
|
||||||
|
PublicNode/OrbitFlare replay est disponible à une profondeur donnée
|
||||||
|
Alchemy a une profondeur replay stable
|
||||||
|
une source WS reconnectée est lossless
|
||||||
|
une source EARLY est implémentée
|
||||||
|
le Worker concret existe déjà
|
||||||
|
la common crate existe déjà
|
||||||
|
un test Cargo de pre.001 a été exécuté localement
|
||||||
|
```
|
||||||
|
|
||||||
|
Ces points deviennent des gates ou restent explicitement bloqués.
|
||||||
|
|
||||||
|
## 10. Trajectoire de validation
|
||||||
|
|
||||||
|
```text
|
||||||
|
pre.002 common golden + dependency firewall
|
||||||
|
pre.003 Backfill migration parity
|
||||||
|
pre.004 observed block
|
||||||
|
pre.005 WS/Helius parity
|
||||||
|
pre.006 Yellowstone parity
|
||||||
|
pre.007 Worker runtime foundation
|
||||||
|
pre.008 Yellowstone live/replay
|
||||||
|
pre.009 WS/HTTP live
|
||||||
|
pre.010 multi-source Store/hardening
|
||||||
|
pre.011 gap repair
|
||||||
|
pre.012 Config/profiles + provider smokes
|
||||||
|
pre.013 EARLY ou consolidation
|
||||||
|
pre.014 final technical/live gate
|
||||||
|
pre.015 final docs reconciliation
|
||||||
|
pre.016 publication preparation
|
||||||
|
rel.001 stable publication
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user