v0.3.15-pre.003

This commit is contained in:
2026-09-13 08:11:35 +02:00
parent dc126497db
commit bd376dc479
32 changed files with 1198 additions and 105 deletions

333
deltas/0.3.15/pre.003.md Normal file
View File

@@ -0,0 +1,333 @@
<!-- file: deltas/0.3.15/pre.003.md -->
<!-- version: 1 -->
# 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.