v0.3.10-pre.001

This commit is contained in:
2026-09-06 09:05:33 +02:00
parent c9047af626
commit 6b434750c5
4 changed files with 1807 additions and 2 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml
# version: 489
# version: 490
[workspace]
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"]
[workspace.package]
version = "0.3.9"
version = "0.3.10-pre.1"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

263
deltas/0.3.10/pre.001.md Normal file
View 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`. Larchive 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` nest pas installé dans lenvironnement dassemblage. Aucun gate Cargo local nest déclaré PASS. Le journal opérateur stable `0.3.9` reste une preuve externe distincte.
## Objectif
Exécuter le gate douverture `0.3.10-pre.001` demandé par le prompt `029` : vérifier intégralement la base `v0.3.9`, auditer lextraction 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 limplé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 nest 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 lexige
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 dalignement 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 daudit, 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 lenvironnement dassemblage courant (`cargo` absent). Elles restent donc explicitement `NON EXÉCUTÉES LOCALEMENT` pour ce delta ; aucune preuve opérateur antérieure nest 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 dassemblage et aucune credential/provider live nest injectée. Les preuves stables fournies par lopé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 dun profil/rôle Transport supplémentaire pour un smoke accessible
admission dune 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
```

File diff suppressed because it is too large Load Diff

View 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 dingestion
## 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 nest 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 lenvironnement dassemblage
```
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 nest 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 lentité
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 dedge Worker -> Config et pas de nouveau document métier Worker imposé dans `0.3.10`. Une adaptation Config nest admise que pour un manque Transport concret découvert pendant limplé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 nobtient le statut `direct canonical producer` quaprè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 nest **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
```