8.7 KiB
Delta 0.3.15-pre.006 — inventaire Config-only des routes Raw Transaction Ingest
Base requise
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 :
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
Yellowstone gRPC activé sur le réseau logique ;
HTTP getTransaction composable sur un même rôle logique.
standard-logs-hydrated
WebSocket SolanaStandard activé ;
capability explicite Logs ;
HTTP getTransaction composable sur un même rôle logique.
standard-block-direct
WebSocket SolanaStandard activé ;
capability explicite Block.
Aucun HTTP n'est exigé pour cette route directe.
helius-transaction-hydrated
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 :
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 :
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 :
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
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 :
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 :
(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
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
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
aucun
Version Cargo
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
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 :
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
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
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
aucune pour pre.006 ; les choix physiques d'endpoint et la revalidation Start restent explicitement dans pre.007.