Files
2026-09-13 08:11:35 +02:00

10 KiB

Delta 0.3.15-pre.003 — mapping Config des capabilities WS et composite Raw Ingest Desk

Base requise

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 :

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 :

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 :

capabilities: array unique borné à 10 entrées

Descripteurs admis :

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 :

Account
Logs
Program
Root
Signature
Slot

Ils ne déclarent pas :

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 :

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 :

helius_devnet
helius_mainnet

Chacun compose :

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 :

config/composite.ksp-app-raw-transaction-ingest-desk.json

est enregistré sous :

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 :

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 :

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 :

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 :

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

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

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

aucun

Version Cargo

Cette tranche modifie Config/runtime mapping et packaging :

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

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 :

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

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

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.