272 lines
8.7 KiB
Markdown
272 lines
8.7 KiB
Markdown
<!-- file: deltas/0.3.15/pre.006.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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.
|
|
```
|