# Delta `0.3.15-pre.003` — mapping Config des capabilities WS et composite Raw Ingest Desk ## Base requise ```text 0.3.15-pre.002-fix.001 appliquée workspace.package.version = 0.3.15-pre.2.fix.1 deltas/0.3.15/pre.002-fix.001.md présent ``` ## Gate de la base Le gate opérateur communiqué après `pre.002-fix.001` est propre : ```text cargo fmt --all : PASS cargo fmt --all -- --check : PASS General Rust rule audit : clean Rust export completeness audit : 0 candidate(s) KSP workspace Rust rule audit : clean Markdown table audit : clean (318 table(s), 187 file(s)) cargo check --workspace : PASS cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS ksp-onchain-transport-lib unit tests : 395 passed / 0 failed ksp-onchain-transport-lib public_api : 54 passed / 0 failed ksp-onchain-transport-lib release_completeness : 47 passed / 0 failed live smoke tests : ignored / opt-in uniquement ``` Ce gate qualifie la base directe de `pre.003` avant toute modification Config. ## Objectif Implémenter strictement la tranche `pre.003` du plan `036` : ```text porter les capabilities WS explicites dans le schema std.transport mapper ces capabilities vers WsSubscriptionKind sans second enum runtime committer des déclarations conservatrices sur les profils Transport existants committer les profils Helius nécessaires à la future Desk sans inférence provider ajouter le composite Raw Transaction Ingest Desk forcer la cohérence Transport + Store par réseau dans ce composite enregistrer le nouveau composite dans le registry Config synchroniser les ressources Config packagées des Desk existantes préserver l'absence de frontend et de runtime Worker dans cette tranche ``` L'enforcement par les constructeurs Worker reste exclusivement réservé à `pre.004`. ## Schema et mapping des capabilities WS `std.transport.schema.json` accepte désormais sur chaque endpoint WebSocket le champ optionnel : ```text capabilities: array unique borné à 10 entrées ``` Descripteurs admis : ```text account block logs program root signature slot slots_updates vote helius_transaction ``` Le mapping Config convertit chaque descripteur vers le `WsSubscriptionKind` Transport existant puis utilise `WsEndpointSettings::with_subscription_capabilities(...)`. Aucun enum Config public supplémentaire n'est créé et aucune capability n'est dérivée du champ `provider`. L'absence du champ reste backward-readable et conserve la sémantique fail-closed introduite par Transport en `pre.002`. ## Déclarations committed conservatrices Les endpoints `solana_standard` committed déclarent exactement la surface stable utilisée par KSP : ```text Account Logs Program Root Signature Slot ``` Ils ne déclarent pas : ```text Block SlotsUpdates Vote HeliusTransaction ``` En particulier, `blockSubscribe` n'est jamais supposé disponible par simple appartenance au protocole Solana standard. Les endpoints `helius_laserstream` committed déclarent : ```text Account Logs Program Root Signature Slot SlotsUpdates HeliusTransaction ``` Ils ne déclarent ni `Block` ni `Vote`. ## Profils Helius committed Deux profils Transport sont ajoutés : ```text helius_devnet helius_mainnet ``` Chacun compose : ```text HTTP public du même réseau pour hydration WS HeliusLaserStream du même réseau KSP_SECRET_HELIUS_API_KEY résolu uniquement côté Config/backend capability HeliusTransaction explicitement déclarée ``` Le secret ne traverse aucune nouvelle projection publique ou frontend. ## Composite Raw Transaction Ingest Desk Le nouveau document : ```text config/composite.ksp-app-raw-transaction-ingest-desk.json ``` est enregistré sous : ```text cfg.composite.ksp-app-raw-transaction-ingest-desk ``` Il utilise le schema composite générique existant et possède `devnet_public` comme profil par défaut. Profils applicatifs committed : ```text devnet_public -> Transport devnet_public + Store devnet helius_devnet -> Transport helius_devnet + Store devnet orbitflare_devnet -> Transport orbitflare_devnet + Store devnet mainnet_public -> Transport mainnet_public + Store mainnet helius_mainnet -> Transport helius_mainnet + Store mainnet publicnode_mainnet -> Transport publicnode_mainnet + Store mainnet publicnode_testnet -> Transport publicnode_testnet + Store testnet ``` Chaque profil compose également `cfg.std.logging/supertrace`. `mainnet_backfill_pool` est volontairement absent : un profil explicitement façonné pour Backfill ne devient pas une dépendance implicite du Worker live. Cette séparation préserve les deux producteurs indépendants du même RAW Store. ## Registry et packaging Config Le registry Config passe de 15 à 16 descripteurs avec le nouveau composite. Les cinq Desk existantes utilisant le runtime Config packagé embarquent donc désormais 16 ressources : ```text ksp-app-backfill-desk ksp-app-config-desk ksp-app-solprices-desk ksp-app-store-desk ksp-app-wallet-desk ``` Le nouveau composite est uniquement une ressource Config partagée à ce stade ; aucune nouvelle crate Desk n'est créée en `pre.003`. Les canaris exacts de packaging, registry et inventaire Config sont recalibrés à 16 ressources/descripteurs. ## Tests et canaris ajoutés ou étendus La tranche couvre notamment : ```text mapping exact SolanaStandard des capabilities déclarées mapping exact HeliusLaserStream des capabilities déclarées profils committed standard : Logs oui / Block non profils committed Helius : HeliusTransaction oui / Block et Vote non redaction de KSP_SECRET_HELIUS_API_KEY dans les projections Debug résolution des sept profils du composite Raw Ingest Desk égalité de réseau Store / HTTP / WS / gRPC pour chaque profil applicatif inventaire exact du registry public présence du composite dans les ressources packagées des cinq Desk existantes présence du composite dans l'inventaire Config Desk ``` ## Documentation `ksp-config-lib/README.md` et `USAGE.md` restent version-neutral et documentent : ```text le nouveau composite Raw Ingest Desk la déclaration explicite capabilities des endpoints WS les descripteurs admis l'absence d'inférence par provider la surface conservatrice standard committed les profils Helius committed et leur secret Config-owned la cohérence Transport + Store du composite applicatif ``` Le plan `036` et la validation `032` sont réconciliés avec les faits de `pre.003` sans transformer le forecast en tableau. ## Fichiers ajoutés ```text config/composite.ksp-app-raw-transaction-ingest-desk.json crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-raw-transaction-ingest-desk.json deltas/0.3.15/pre.003.md ``` ## Fichiers modifiés ```text Cargo.toml config/examples/std.transport.example.json config/schemas/std.transport.schema.json config/std.transport.json crates/ksp-app-backfill-desk/tauri.conf.json crates/ksp-app-backfill-desk/tests/desktop_contract.rs crates/ksp-app-config-desk/tauri.conf.json crates/ksp-app-config-desk/tests/desktop_contract.rs crates/ksp-app-config-desk/unit_tests/profiles.rs crates/ksp-app-solprices-desk/tauri.conf.json crates/ksp-app-solprices-desk/tests/desktop_contract.rs crates/ksp-app-store-desk/tauri.conf.json crates/ksp-app-store-desk/tests/desktop_contract.rs crates/ksp-app-wallet-desk/tauri.conf.json crates/ksp-app-wallet-desk/tests/desktop_contract.rs crates/ksp-app-wallet-desk/tests/release_compliance.rs crates/ksp-config-lib/README.md crates/ksp-config-lib/USAGE.md crates/ksp-config-lib/src/lib.rs crates/ksp-config-lib/src/registry.rs crates/ksp-config-lib/src/transport.rs crates/ksp-config-lib/tests/ownership.rs crates/ksp-config-lib/tests/public_api.rs crates/ksp-config-lib/unit_tests/composite.rs crates/ksp-config-lib/unit_tests/fixtures/std.transport.json crates/ksp-config-lib/unit_tests/registry.rs crates/ksp-config-lib/unit_tests/transport.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 Cette tranche modifie Config/runtime mapping et packaging : ```text header Cargo.toml : 596 -> 597 workspace.package.version : 0.3.15-pre.2.fix.1 -> 0.3.15-pre.3 ``` Tous les crates workspace héritent de cette version. ## 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 JSON parse audit : clean std.transport JSON Schema validation : PASS composite JSON Schema validation : PASS capability declarations committed : PASS composite Transport/Store network coupling statique : PASS packaged Config resource inventory : 16/16 sur les cinq Desk existantes versions de fichiers Rust modifiés : incrémentées exactement d'une unité ``` ## Validations non exécutées dans l'environnement d'assemblage La toolchain Cargo/Rust n'est pas disponible dans l'environnement d'assemblage. Le gate opérateur doit confirmer : ```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-config-lib --all-targets --all-features cargo test --workspace --all-targets --all-features ``` ## Décisions prises ```text Config porte la déclaration de capability ; Transport reste propriétaire de sa sémantique typed aucune capability n'est inférée depuis un provider name les profils standard committed n'annoncent pas Block sans preuve explicite d'endpoint les profils Helius committed n'annoncent ni Block ni Vote les profils Helius peuvent hydrater via HTTP public du même réseau le composite Raw Ingest couple toujours Transport et Store du même réseau mainnet_backfill_pool reste hors composite Raw Ingest aucun frontend et aucun Start/Stop Worker ne sont ouverts avant les tranches prévues ``` ## Questions ouvertes ```text aucune pour pre.003 ``` La prochaine responsabilité reste `pre.004` : faire appliquer les capabilities WS déclarées par les constructeurs Worker avant toute I/O.