# Delta 0.3.13-pre.001 — audit règles et convergence live multi-source ## Base requise ```text archive : khadhroony-solana-project-v0.3.12.zip SHA-256 : 85c41eb9f8575ee58edd9863445cbc37b79ef59c4a7cf882679ff24dc8991bf5 ZIP bytes : 8260528 ZIP entries : 1981 workspace.package.version base : 0.3.12 stable delta : deltas/0.3.12/rel.001.md prompt : prompts/032-V0_3_13_START_PROMPT.md ``` ## Objectif Exécuter le gate `pre.001` de `0.3.13` avant tout développement : vérifier l'archive stable et les règles, réauditer les surfaces WS standard/Helius/HTTP actuelles, fermer l'architecture de convergence multi-source, les bornes, la stratégie d'observations multiples, le content conflict, les owners retry/reconnect, les smokes et le sizing. Aucune nouvelle source réseau productive n'est implémentée dans cette tranche. ## Type de livraison ```text 0.3.13-pre.001 Cargo : 0.3.13-pre.1 archive : ksp-general-0.3.13-pre.001.zip ``` Le type `general` est requis par la synchronisation de `Cargo.toml` pour une prerelease non-fix. ## Vérification archive Contrôlé : ```text unzip -t : PASS absolute entries : 0 parent traversal : 0 duplicate ZIP entries : 0 symlink entries : 0 Cargo.lock : absent rust-toolchain.toml : absent package lockfiles : absents .env : absent crate manifests : 21 workspace members : 21 crates hors workspace : 0 members sans crate : 0 workspace edition : 2024 ``` ## Audit règles Les règles actives ont été relues depuis `RULES.md` et les neuf documents de `docs/rules/`. Le script Rust stable reste vert, mais un contrôle supplémentaire d'unicité des identifiants normatifs a trouvé : ```text rule ids : 489 unique ids : 488 collision : KSP-CONFIG-018 x2 ``` La preuve historique `deltas/0.1.3/pre.014.md` attribue explicitement `KSP-CONFIG-018` à la règle d'inventaire `.env.example`. La règle desktop plus récente est donc renumérotée `KSP-CONFIG-019` sans modification de sa sémantique. Après correction : ```text rule ids : 489 unique ids : 489 duplicates : 0 ``` Aucune autre contradiction normative active n'a été identifiée. ## Audit architecture/dépendances Confirmé : ```text Worker -> Transport autorisé et déjà productif Worker -> Config interdit et absent Worker -> Job Backfill interdit et absent Worker -> backend Store physique interdit et absent Worker -> reqwest/tonic/yellowstone proto direct absent Transport -> Store absent Transport -> Common RAW absent ksp-store-lib reste la façade de persistence Worker Common RAW reste propriétaire de la canonicalisation ``` `solana-keypair` dans `ksp-wallet-lib` est explicitement admis par `DEP-SOL-004` et ne constitue pas une violation. ## Audit WS / Helius / HTTP courant Décisions : ```text logsSubscribe standard -> signature/slot -> getTransaction observed blockSubscribe standard -> full/base64, maxSupportedTransactionVersion=1 Helius transactionSubscribe -> full/base64 -> getTransaction observed Helius LaserStream WSS ne porte pas blockSubscribe HTTP live -> getSlot + getBlocksWithLimit + getBlock observed ``` La documentation Solana courante demande la préparation `maxSupportedTransactionVersion = 1` pour Transaction V1. V1 n'est pas encore actif sur les clusters publics au 10 septembre 2026, donc la voie `blockSubscribe` V1 reste deterministic-test-gated avant d'être déclarée RAW-direct. Le pricing Helius courant place `transactionSubscribe` à partir du tier Developer ; ce fait reste une qualification de smoke, jamais une constante métier KSP. ## Architecture multi-source fermée Décisions principales : ```text sources simultanées, pas de first-provider-wins source identity opaque SHA-256 et provider-neutral 1..32 sources runtime collection validée avant tout spawn coordinator global Worker avant hydration coalescence (network, signature, commitment) une hydration HTTP pour les références cross-source identiques pending global <= admission_queue_capacity effective hydratation in-flight <= persistence_concurrency aucune queue Worker provider privée non bornée ``` Observation/persistence : ```text identité durable = network + signature première observation = persist_raw_transaction_acquisition atomique observations supplémentaires = record_raw_transaction_observation même identité + même contenu = idempotence même identité + contenu divergent = content conflict terminal ``` La capability Store d'observation additionnelle existe déjà ; aucun changement Store API n'est requis. ## HTTP live polling Contrat de plan retenu : ```text run start = getSlot(commitment) aucun scan avant ce start slot getBlocksWithLimit pour exclure naturellement skipped slots getBlock observed pour chaque bloc listé poll interval : 100 ms..30 s, default 1 s blocks/cycle : 1..1024, default 128 timer/cadence : Worker retry/rate-limit HTTP : Transport ``` ## Health et continuité Le Worker conservera un inventaire de source privé et borné. La surface publique restera source-neutral avec des counts agrégés seulement. Politique `0.3.13` conservative : une source configurée qui devient terminalement `Failed` faute le Worker, car l'équivalence de coverage des autres sources n'est pas prouvée. Le failover non-terminal et le repair appartiennent à `0.3.14`. ## Sizing retenu ```text pre.002 runtime resources multi-source pre.003 standard logs + hydration pre.004 standard blockSubscribe pre.005 Helius transactionSubscribe pre.006 HTTP live polling pre.007 supervisor/source inventory pre.008 convergence/observations multiples pre.009 conflict/backpressure/fairness pre.010 snapshots/health pre.011 races/shutdown pre.012 completeness/security pre.013 gate technique/live pre.014 réconciliation documentaire pre.015 préparation publication rel.001 stable ``` Décision : `0.3.13` est maintenue ; aucune rescission n'est nécessaire avant `pre.002`. ## Fichiers ajoutés ```text docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md deltas/0.3.13/pre.001.md ``` ## Fichiers modifiés ```text Cargo.toml docs/rules/RULES_KSP.md ``` ## Fichiers supprimés ```text aucun ``` ## Validations exécutées avant modification ```text python3 scripts/audit_rust_workspace_rules.py PASS : General Rust rule audit clean PASS : Rust export completeness audit 0 candidate PASS : 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.12 PASS : Markdown table audit clean (306 tables, 199 files) ``` La preuve Cargo stable fournie par l'opérateur montre également fmt/check/clippy/tests Worker/trees verts sur `0.3.12`; elle reste une preuve de la base et non une exécution locale de cette prerelease. ## Validations exécutées après modification ```text python3 scripts/audit_rust_workspace_rules.py PASS : General Rust rule audit clean PASS : Rust export completeness audit 0 candidate PASS : KSP workspace Rust rule audit clean supplemental normative rule-id scan PASS : 489 ids, 489 uniques, 0 duplicate python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas PASS : Markdown table audit clean (340 tables, 828 files) ``` ## Validations non exécutées localement Le toolchain Cargo/Rustfmt n'est pas installé dans l'environnement d'assemblage : ```text cargo fmt --all -- --check cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings 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 ``` Statut : `NON EXÉCUTÉ LOCAL`, jamais PASS. ## Décisions prises ```text corriger l'identifiant desktop en KSP-CONFIG-019 maintenir la release 0.3.13 aucune nouvelle dépendance externe maxSupportedTransactionVersion=1 pour les nouvelles voies concernées convergence/hydration globale Worker-owned observation fanout via capability Store existante source failure terminale conservative jusqu'au coverage/repair 0.3.14 ``` ## Questions ouvertes Reportées explicitement : ```text coverage équivalent entre sources failover non-terminal repair de gaps multi-source sources EARLY campagnes historiques multi-source composition Desk 0.3.15 ```