Files
2026-09-13 17:36:06 +02:00

158 lines
5.6 KiB
Markdown

<!-- file: deltas/0.3.15/pre.007.md -->
<!-- version: 1 -->
# Delta `0.3.15-pre.007`
## Objet
Revalider au Start la sélection logique issue de l'inventaire `pre.006`, reconstruire les ressources Transport exactes attendues par les cinq familles Worker V1, puis les valider via les constructeurs publics du Worker sans ouvrir Store ni lancer de Worker.
## Requête Start sûre
Le préflight backend reçoit uniquement :
```text
profile_id
route_id
inventory_generation
commitment = confirmed | finalized
```
`profile_id` est ajouté au contrat candidat de `pre.001`. Depuis le passage réseau-centrique de `pre.006-fix.001`, un même `route_id` peut exister sur plusieurs réseaux ; le backend doit donc recevoir l'identité logique du profil réseau sélectionné pour reconstruire sans état frontend implicite.
Aucun endpoint, URL, provider choisi par le frontend, credential, token, metadata secrète, URI Store, source key ou handle runtime ne traverse IPC.
## Préflight `validate_route_start`
Le backend :
1. refuse une génération nulle ou différente de la génération courante avec `stale_inventory` ;
2. capture `ConfigEnvironment` ;
3. reconstruit l'inventaire avec le même snapshot d'environnement et la même génération ;
4. vérifie que le profil et la route existent encore et restent `Configured` ;
5. recharge le composite réseau explicite ;
6. résout Store et reproouve le réseau logique ;
7. résout le Transport de base et les sources provider-specific nécessaires ;
8. reconstruit la ressource exacte de la famille Worker ;
9. détruit immédiatement la ressource après validation ;
10. renvoie uniquement une projection sûre profil/réseau/route/génération/commitment.
Les erreurs lower-layer sont encapsulées derrière les codes/messages bornés du Desk ; les contextes physiques ne sont pas projetés au frontend.
## Reconstruction exacte des cinq routes
```text
yellowstone-hydrated
YellowstoneGrpcChannel::prepare
YellowstoneSubscribeRequest transaction-bearing
HttpTransportPool same-network / getTransaction
RawTransactionIngestYellowstoneSource::new
standard-logs-hydrated
endpoint SolanaStandard + capability Logs
SolanaLogsSubscribeFilter::AllWithVotes
HttpTransportPool same-network / getTransaction
RawTransactionIngestStandardLogsSource::new
standard-block-direct
endpoint SolanaStandard + capability Block
SolanaBlockSubscribeFilter::All
RawTransactionIngestStandardBlockSource::new
helius-transaction-hydrated
source transport.helius same-network
endpoint HeliusLaserStream + capability HeliusTransaction
filtre transaction général borné
HttpTransportPool de base same-network / getTransaction
RawTransactionIngestHeliusTransactionSource::new
http-block-polling
HttpTransportPool same-network
rôle unique composant getSlot + getBlocksWithLimit + getBlock
RawTransactionIngestHttpBlockPollingSource::new
```
HTTP conserve la sélection physique de ses endpoints dans `HttpTransportPool`. Pour WS et Yellowstone gRPC, `pre.007` exige exactement un endpoint activé matching dans le profil source résolu ; une ambiguïté est refusée au lieu d'être arbitrée silencieusement par le Desk.
## Frontières maintenues
Cette tranche n'introduit pas :
```text
Store::open
connexion WebSocket active
YellowstoneGrpcChannel::connect
RawTransactionIngestRuntimeResources
RawTransactionIngestWorker::start_with_runtime_resources
Worker handle
request_stop
état Running
multi-route runtime
```
Le Store lifecycle et le Start/Stop mono-route réel restent la responsabilité de `pre.008`.
## Dépendances
Le Desk ajoute uniquement la dépendance directe :
```text
ksp-worker-raw-transaction-ingest-lib
```
Aucune dépendance directe vers `ksp-store-lib`, `ksp-store-api`, un backend Store physique, `ksp-worker-api`, Job Backfill, `reqwest`, `tonic` ou Yellowstone provider crate n'est ajoutée.
## Tests et canaris
Ajouts/corrections :
- canari génération stale avant toute reconstruction ;
- commitments strictement bornés à `confirmed` / `finalized` ;
- reconstruction sans I/O des routes Standard Block et HTTP Polling sur les profils réseau committés ;
- inventaire de modules mis à jour avec `route_start` ;
- surface publique toujours limitée à `run` ;
- vérification statique des cinq constructeurs Worker exacts ;
- vérification de l'absence de Store/Worker launch ;
- sécurité DTO Start/ack sans matériel physique ;
- accès aux helpers crate-shared via `crate::` conformément aux règles Rust KSP.
## Version
```text
header racine : 605 -> 606
workspace : 0.3.15-pre.6.fix.3 -> 0.3.15-pre.7
```
## Validations disponibles dans l'environnement d'assemblage
```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 ...
clean
JSON/TOML parse
clean
```
La toolchain Cargo/rustfmt n'est pas disponible dans l'environnement d'assemblage ; aucune commande Cargo locale n'est donc déclarée PASS.
## 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)
```
Aucun `npm run build` direct n'est exécuté ; Tauri possède le cycle frontend.