# Delta 0.3.11-pre.001 — audit/sizing fondation Worker RawTransaction ingest ## Base ```text archive : khadhroony-solana-project-v0.3.10.zip SHA-256 : befafea61304aaea15c94db7c8b3525c58b7c1622bf880a9110373bcc0ae6ac0 ZIP bytes : 7993096 ZIP entries : 1901 unzip -t : PASS workspace members : 20 workspace.package.version base : 0.3.10 stable delta : deltas/0.3.10/rel.001.md ``` Le ZIP a une racine unique et a été contrôlé sans entrée absolue, path traversal, symlink, `.git/`, `target/`, `node_modules/`, `Cargo.lock` ou `.env`. Préconditions du prompt `030` confirmées : ```text ksp-raw-transaction-lib présent et documenté ksp-worker-api présent ksp-job-backfill-lib présent et consommateur de ksp-raw-transaction-lib ksp-worker-raw-transaction-ingest-lib absent ``` ## Type de livraison ```text ksp-general-0.3.11-pre.001.zip ``` Le type `general` est requis par le bump `Cargo.toml` de toute prerelease non-fix (`VER-ID-009`). L'archive d'échange contient uniquement les fichiers ajoutés/modifiés par cette tranche et son delta. ## 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 (340 table(s), 772 file(s)) ``` L'audit mécanique était vert mais la lecture humaine des règles a trouvé deux divergences normatives actives non détectées par les scripts. ## Objectif Exécuter intégralement le gate d'ouverture demandé par `prompts/030-V0_3_11_START_PROMPT.md` : lecture/audit de la stable `v0.3.10`, contrôle renforcé des règles, inventaire Worker/Common RAW/Store/Backfill, fraîcheur des dépendances runtime, brainstorming public/private et supervisor, définition du harness déterministe, threat model, sizing et planification, sans commencer l'implémentation lourde du Worker. ## Réconciliation normative ### D1–D4 Défauts hérités trouvés : ```text KSP-DURABLE-002 : D2 encore nommé Core canonique KSP-DURABLE-006 : instructions encore qualifiées de faits Core DEP-STORE-004 : D2 encore nommé Core canonique ``` Les règles plus récentes et l'architecture `008` imposent déjà : ```text D1 RAW D2 STRUCTURAL D3 DECODED D4 DOMAIN ``` Correction : normalisation des trois règles actives. Les archives/deltas/plans historiques ne sont pas réécrits. ### Nom du Worker RAW Les règles `KSP-WORKER-005/006/007/010` utilisaient encore : ```text ksp-worker-raw-retriever ``` Le nom durable retenu par les architectures, ROADMAP, CHANGELOG, handoff `0.3.10` et prompt `030` est : ```text ksp-worker-raw-transaction-ingest-lib ``` Correction : normalisation du nom dans ces quatre règles, sans changement de leur responsabilité fonctionnelle. Un scan des règles actives après correction ne trouve plus `D2 Core canonique`, `faits Core distincts` ni `ksp-worker-raw-retriever`. ## Inventaire et décisions de fondation ### Frontières préservées ```text ksp-worker-api reste runtime-neutral et générique ksp-raw-transaction-lib reste source-neutral sans runtime/Transport/Config/Worker/Job/backend Worker persistera via ksp-store-lib default-features=false Store reste vérité de convergence (network, signature) Backfill et Worker restent producteurs indépendants aucun paramètre historique métier au start Worker aucun edge Worker -> Config/Job/backend physique ``` ### Surface publique minimale retenue ```text RAW_TRANSACTION_INGEST_WORKER_KIND_CODE RawTransactionIngestSettings RawTransactionIngestWorker RawTransactionIngestHandle RawTransactionIngestSnapshot RawTransactionIngestSnapshotSource / future associée ErrorCodes statiques Worker ``` Settings de fondation : ```text network worker_id admission_queue_capacity persistence_concurrency shutdown_drain_timeout ``` Bornes : ```text admission queue : 1..=65_536, default 256 persistence concurrency : 1..=64, default 8 shutdown drain : 100 ms..=30 s, default 5 s ``` ### Types reportés Ne sont pas figés publiquement avant une vraie source : ```text RawTransactionSourceId SourceSettings SourceCapability SourceRole ContinuityState run/source frontiers provider-specific settings retry/replay/gap repair ``` ### Runtime ```text caller-owned active Tokio runtime Worker-owned private supervisor/tasks JoinHandle/JoinSet privés start(settings, Arc) -> Handle request_stop idempotent wait_terminal async sans Tokio nominal public mpsc admission borné watch stop privé watch snapshot latest-value aucun unbounded channel ``` ### Pipeline ```text private deterministic ingress -> ksp-raw-transaction-lib canonicalization -> Worker-owned deterministic observation key/provenance -> common RawTransactionAcquisition -> ksp-store-lib atomic Normal persistence -> explicit outcomes/counters -> concrete/common latest-value snapshot ``` Aucun cache mémoire n'est utilisé comme vérité de correction ; Store décide new/idempotent/conflict. ### Fault/shutdown ```text content conflict -> terminal fault, no overwrite, no winner Store error -> terminal safe fault source harness failure -> terminal safe fault stop -> close new admissions + bounded drain admitted work expiry drain -> abort private remaining tasks + join + terminal drain_timeout terminal publié seulement après absence de tâche privée survivante ``` ## Fraîcheur externe Vérifié le 8 septembre 2026 : ```text tokio latest stable = 1.53.1 ; workspace = ^1.53 futures-util latest stable = 0.3.34 ; workspace = ^0.3 sha2 latest stable = 0.11.0 ; workspace = ^0.11 ``` Aucun bump workspace n'est requis. Dépendances prévues pour la crate foundation lorsqu'elle est créée : ```text ksp-core-lib ksp-worker-api ksp-raw-transaction-lib ksp-store-lib default-features=false ksp-logging-lib sha2 tokio features macros,rt,sync,time ``` Non retenus en fondation : ```text futures-util : pas d'usage nécessaire après choix JoinSet/mpsc/watch/select! ksp-onchain-transport-lib : aucune source live en 0.3.11 ksp-config-lib : edge interdit SDK provider : interdit/inutile ``` ## Harness et threat model Le plan `032` fixe un harness privé sans réseau couvrant : ```text start/stop source failure queue saturation/backpressure bounded persistence concurrency new/idempotent/new observation content conflict Store failure stop pendant admission/persistence drain timeout no orphan tasks slow/no snapshot listener latest-value concrete/common redaction et absence de surface Job/Config/provider ``` ## Sizing recalibré Le forecast initial est scindé pour respecter le budget de 15–20 minutes : ```text pre.002 crate + dependency firewall pre.003 identity/settings pre.004 lifecycle/start/handle/terminal pre.005 supervisor/task ownership + harness pre.006 bounded admission + common RAW pre.007 Store persistence/idempotence/conflict pre.008 snapshots + Worker API projection pre.009 shutdown/backpressure/fault hardening pre.010 public/release/security hardening pre.011 gate technique final pre.012 réconciliation documentaire pre.013 préparation publication rel.001 ``` Décision : `0.3.11` reste clôturable dans une seule session **à condition** de ne pas introduire source live, Transport productif, Config, migration Store ou continuity/gap repair. Toute tranche réellement trop grosse est scindée avant exécution. ## Fichiers ajoutés ```text docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md deltas/0.3.11/pre.001.md ``` ## Fichiers modifiés ```text Cargo.toml docs/rules/RULES_KSP.md docs/rules/RULES_DEPENDENCIES.md ``` Versions : ```text Cargo.toml : 505 -> 506 workspace.package.version : 0.3.10 -> 0.3.11-pre.1 RULES_KSP.md : 40 -> 41 RULES_DEPENDENCIES.md : 18 -> 19 ``` Le bump Cargo est requis par `VER-ID-009` pour une prerelease non-fix, même sans modification Rust. ## Fichiers supprimés ```text aucun ``` ## Validation après modification Audits statiques réellement exécutés sur le delta complet : ```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 (340 table(s), 775 file(s)) ``` Un scan sémantique complémentaire des règles actives confirme l'absence des trois formulations obsolètes corrigées. La comparaison byte-à-byte contre la stable confirme exactement 3 fichiers ajoutés, 3 fichiers modifiés et aucun fichier supprimé. ## Preuve opérateur stable distincte Le journal opérateur fourni pour `0.3.10` montre : ```text cargo fmt --all -- --check : sans erreur cargo check --workspace : sans erreur cargo clippy --workspace --all-targets --all-features -- -D warnings : sans erreur ksp-raw-transaction-lib : 26 tests verts ksp-job-backfill-lib : 77 tests verts cargo tree normal des deux crates : fourni ``` Cette preuve concerne la stable d'entrée ; elle ne devient pas une exécution locale de `0.3.11-pre.001`. ## Validations non exécutées localement ```text cargo fmt --all -- --check cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test --workspace --all-targets --all-features cargo tree --duplicates ``` Motif : `cargo` n'est pas installé dans l'environnement d'assemblage. `pre.001` ne contient aucun Rust Worker, mais l'opérateur doit rejouer les gates applicables après application du delta. ## Questions fermées ```text settings techniques et bornes V1 public/private surface de fondation absence de SourceCapability/Role publics avant 0.3.12 start + Arc + handle terminal future runtime-neutral supervisor/task ownership privé mpsc/watch exacts harness déterministe sans réseau absence de frontier/timestamp public en fondation Store conflict/failure policy Tokio direct + features minimales retenues absence de futures-util/Transport en foundation sizing et maintien de la release ``` ## Questions reportées ```text premier contrat public SourceId/capability/role Yellowstone source settings/adapters source required/optional policy retry/reconnect run frontier/continuity gap repair hydration productive WS/Helius/HTTP live multi-provider coalescence hot reconfiguration desired/effective provider smokes ``` Aucune question reportée ne bloque `pre.002`. ## Non inclus ```text aucune nouvelle crate Worker créée aucun Rust modifié aucun Transport/Config/Store code modifié aucune migration aucune source live aucun CHANGELOG/ROADMAP modifié aucun prompt 0.3.12 produit ```