# Delta `0.3.15-pre.006` — inventaire Config-only des routes Raw Transaction Ingest ## Base requise ```text 0.3.15-pre.005-fix.002 workspace.package.version = 0.3.15-pre.5.fix.2 deltas/0.3.15/pre.005.md présent deltas/0.3.15/pre.005-fix.001.md présent deltas/0.3.15/pre.005-fix.002.md présent ``` Le gate opérateur de `pre.005-fix.002` est PASS : audits, `cargo check`, Clippy strict, tests ciblés Desk, workspace all-targets/all-features et parcours visuel via `cargo tauri dev`. Le shell clair commun et le bornage de `routeFoundation` sont confirmés. Conformément à `KSP-APP-025` / `KSP-APP-034`, aucun script npm applicatif n'est lancé directement par l'opérateur. Tauri possède le cycle frontend via ses hooks crate-local. ## Objectif Remplacer la fondation statique de routes par un inventaire **Config-only** déterministe qui permet au Desk de distinguer les routes composables et non composables avant toute reconstruction de ressource Transport, ouverture Store ou création Worker. `Configured` signifie uniquement « requirements Config satisfaites ». Il ne constitue aucune preuve de disponibilité réseau, Store ou Worker. ## Inventaire backend Le backend : ```text charge le composite Raw Transaction Ingest Desk validé ; énumère ses profils dans l'ordre source ; résout pour chaque profil les composants Transport et Store via ksp-config-lib ; exige un unique réseau logique identique entre tous les endpoints Transport activés et Store ; calcule les cinq routes V1 avec des capabilities typées ; retourne une projection sûre accompagnée d'une génération monotone. ``` Le calcul ne lance aucun probe réseau et ne construit aucun client/session Transport. ## Requirements des cinq routes ### `yellowstone-hydrated` ```text Yellowstone gRPC activé sur le réseau logique ; HTTP getTransaction composable sur un même rôle logique. ``` ### `standard-logs-hydrated` ```text WebSocket SolanaStandard activé ; capability explicite Logs ; HTTP getTransaction composable sur un même rôle logique. ``` ### `standard-block-direct` ```text WebSocket SolanaStandard activé ; capability explicite Block. ``` Aucun HTTP n'est exigé pour cette route directe. ### `helius-transaction-hydrated` ```text WebSocket HeliusLaserStream activé ; capability explicite HeliusTransaction ; HTTP getTransaction composable sur un même rôle logique. ``` ### `http-block-polling` Un même rôle HTTP logique doit couvrir la composition suivante : ```text getSlot getBlocksWithLimit getBlock ``` La preuve HTTP utilise directement les `HttpTransportSettings`, rôles et `request_kinds` typés. Aucun `HttpTransportPool` ni client HTTP n'est construit dans cette tranche. ## Reasons sûres L'inventaire projette uniquement les reasons applicatives bornées suivantes : ```text profile_unresolved network_mismatch missing_http_get_transaction missing_http_block_scan missing_ws_logs_capability missing_ws_block_capability missing_helius_transaction_capability missing_yellowstone_grpc missing_required_secret ``` Les erreurs Config arbitraires, URL, tokens, metadata, URI Store et identités physiques ne traversent pas le DTO d'inventaire. ## Projection frontend La vue `Routes` expose uniquement : ```text profil logique ; profil default ; réseau logique lorsque résolu ; génération ; route_id ; famille et label sûrs ; state ; selectable ; reason sûre. ``` Le sélecteur de profil ne modifie aucun backend runtime : il sélectionne uniquement la projection déjà calculée à afficher. Un refresh reconstruit un inventaire complet depuis Config et ne publie la nouvelle génération qu'après succès. ## Frontières conservées ```text aucun Store::open ; aucun ksp-store-lib direct ; aucun HttpTransportPool ; aucune WsProtocolSession ; aucun YellowstoneGrpcChannel ; aucun RawTransactionIngestWorker ; aucun RawTransactionIngestRuntimeResources ; aucun Start/Stop Worker ; aucune logique Backfill ; aucune inférence de capability depuis le provider ; aucun endpoint, URL, secret, metadata, Store URI, source key, handle ou payload RAW côté frontend. ``` La seule nouvelle dépendance KSP directe du Desk est `ksp-onchain-transport-lib`, nécessaire pour consommer les contracts typés de capabilities Transport déjà établis. ## Cas committed attendu Sur le profil autonome `devnet_public` : ```text yellowstone-hydrated -> Unavailable / missing_yellowstone_grpc standard-logs-hydrated -> Configured standard-block-direct -> Unavailable / missing_ws_block_capability helius-transaction-hydrated -> Unavailable / missing_helius_transaction_capability http-block-polling -> Configured ``` Ce résultat reste une preuve Config uniquement. ## Workflow Tauri Le guide du Desk rappelle le workflow normatif : ```bash (cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev) ``` Les scripts `npm run ...` présents dans `tauri.conf.json` sont des hooks déclenchés par Tauri et ne sont pas des commandes de gate opérateur directes. Le `cargo tauri build` final reste réservé à la validation finale et doit être la dernière opération de cette validation conformément à `KSP-APP-034`. ## Fichiers ajoutés ```text crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_inventory.rs deltas/0.3.15/pre.006.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-app-raw-transaction-ingest-desk/Cargo.toml crates/ksp-app-raw-transaction-ingest-desk/README.md crates/ksp-app-raw-transaction-ingest-desk/USAGE.md crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts crates/ksp-app-raw-transaction-ingest-desk/src/app_state.rs crates/ksp-app-raw-transaction-ingest-desk/src/bootstrap.rs crates/ksp-app-raw-transaction-ingest-desk/src/constants.rs crates/ksp-app-raw-transaction-ingest-desk/src/dto_route.rs crates/ksp-app-raw-transaction-ingest-desk/src/errors.rs crates/ksp-app-raw-transaction-ingest-desk/src/lib.rs crates/ksp-app-raw-transaction-ingest-desk/src/tauri.rs crates/ksp-app-raw-transaction-ingest-desk/tests/dependency_boundary.rs crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs crates/ksp-app-raw-transaction-ingest-desk/unit_tests/dto_route.rs docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md ``` ## Fichiers supprimés ```text aucun ``` ## Version Cargo ```text header Cargo.toml : 601 -> 602 workspace.package.version : 0.3.15-pre.5.fix.2 -> 0.3.15-pre.6 ``` ## Validations exécutées dans l'environnement d'assemblage ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean HTML parse: clean contrôle des headers/version de fichiers modifiés : clean absence de lockfiles, target et node_modules livrés : clean après purge des caches d'audit ``` ## Validations non exécutées dans l'environnement d'assemblage La toolchain Cargo/Rust n'est pas disponible dans cet environnement. Les validations suivantes restent donc autoritatives côté opérateur : ```text cargo fmt cargo check cargo clippy -D warnings tests Desk tests workspace parcours Tauri dev ``` Aucun `npm run build` direct ne fait partie du gate. ## Gate opérateur attendu ```bash cargo fmt --all 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/0.3.15 cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features cargo test --workspace --all-targets --all-features (cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev) ``` Le lancement Tauri sert ici au parcours fonctionnel/visuel du nouvel inventaire. Il ne remplace pas les gates Rust précédents. ## Décisions prises ```text pre.006 reste purement déclarative et Config-only ; la reconstruction concrète des ressources Transport est réservée à pre.007 ; Store et Worker restent réservés à pre.008 ; HTTP block polling exige une couverture par un même rôle logique, potentiellement répartie sur plusieurs endpoints du même réseau ; les profils nécessitant un secret non résolu sont fail-closed avec missing_required_secret ; la sélection frontend d'un profil n'est pas une sélection de ressource runtime. ``` ## Questions ouvertes ```text aucune pour pre.006 ; les choix physiques d'endpoint et la revalidation Start restent explicitement dans pre.007. ```