8.8 KiB
Delta 0.2.12-pre.003 — composite Config et bootstrap Off-chain
1. Base requise
Cette tranche s'applique exclusivement après :
v0.2.11
+ 0.2.12-pre.001
+ 0.2.12-pre.001-fix.001
+ 0.2.12-pre.002
+ 0.2.12-pre.002-fix.001
Le retour opérateur du 27 août 2026 clôt proprement pre.002-fix.001 : cargo fmt, installation npm, audits Rust/Markdown, cargo check --workspace, Clippy workspace, cargo test -p ksp-app-solprices-desk et cargo tauri dev passent sans warning Rust. cargo test --workspace n'a pas été rejoué dans ce retour précis et n'est pas revendiqué comme tel.
La version workspace passe à :
0.2.12-pre.3
2. Responsabilité de la tranche
pre.003 matérialise uniquement la composition Config du nouveau Desk et son bootstrap Off-chain provider-neutral :
nouveau composite SOL Prices Desk
nouveau descriptor Config
registry Config 10 -> 11 descriptors
resources Config packagées 10 -> 11 dans les trois Desks
Logging du SOL Prices Desk sélectionné par composite
ResolvedOffchainTransportConfig construit au bootstrap
MarketPriceService détenu indirectement par Config
provenance Composite conservée
Diagnostics bootstrap sûrs
instrumentation frontend durable pour les contrôles existants
La tranche n'introduit encore aucun MarketPriceRuntime, row provider, observation affichée ni commande de refresh.
3. Composite SOL Prices Desk
Le document ajouté est :
config/composite.ksp-app-solprices-desk.json
file_id = cfg.composite.ksp-app-solprices-desk
schema = schema.composite
Il contient exactement les profils prévus :
public_keyless (default)
logging -> cfg.std.logging / console_info
offchain_transport -> cfg.std.offchain_transport / public_keyless
all_free
logging -> cfg.std.logging / console_info
offchain_transport -> cfg.std.offchain_transport / all_free
tests
logging -> cfg.std.logging / console_info
offchain_transport -> cfg.std.offchain_transport / public_keyless
Les composants sont résolus par file_id; aucun filename physique n'est connu du code applicatif.
4. Registry et packaging atomiques
ksp-config-lib enregistre le nouveau descriptor avec le schema composite existant. L'inventaire passe à 11 descriptors : 6 documents Config et 5 schemas.
Comme prepare_packaged_runtime travaille sur le registry logique complet, la même tranche ajoute le nouveau resource mapping aux trois applications packagées :
ksp-app-config-desk 11 resources
ksp-app-wallet-desk 11 resources
ksp-app-solprices-desk 11 resources
Les canaris historiques de Config Desk et Wallet Desk sont mis à jour pour rendre cette atomicité durable.
5. Bootstrap Config -> Off-chain
SOL Prices Desk charge son composite via FILE_ID_COMPOSITE_KSP_APP_SOLPRICES_DESK puis vérifie explicitement les composants obligatoires :
logging -> FILE_ID_STD_LOGGING
offchain_transport -> FILE_ID_STD_OFFCHAIN_TRANSPORT
Le profil Logging du composite alimente le runtime Logging existant. Le profil Off-chain sélectionné est ensuite transmis à :
ConfigDocumentEngine::resolve_offchain_transport_config_profile
Le résultat ResolvedOffchainTransportConfig reste détenu par l'état backend. Pour le profil default public_keyless, le service construit par Config expose les huit entrées provider-neutral déjà définies par 0.2.11.
Aucune dépendance provider, URL, API key, rate limit ou logique HTTP n'est recréée dans la crate applicative.
6. État runtime exposé
get_runtime_status reste une commande de diagnostic et expose uniquement des projections sûres supplémentaires :
active_composite_profile
active_logging_profile
active_offchain_profile
config_document_count
application_version
fallback_logging_active
shell_phase
startup_diagnostic sûr
Aucun provider individuel, prix, credential, endpoint ou payload Off-chain n'est projeté dans cette tranche.
7. Logging frontend durable
Conformément à KSP-APP-027, les contrôles frontend existants sont instrumentés via le bridge commun :
clic / action utilisateur debug
transition de vue debug
demande IPC debug
fin technique IPC trace
échec contrôlé error/warn selon le chemin existant
Les logs ne sérialisent pas de valeurs métier ou secrètes. Le canari ajouté impose ce comportement avant l'arrivée des boutons prix : les futurs refresh row/many/all devront journaliser l'action, l'ID opaque/count/code sûr lorsque nécessaire, jamais prix brut, API key, header ou payload provider.
8. Tests et canaris ajoutés/étendus
ksp-config-lib couvre désormais :
inventaire exact des 11 descriptors
public constants du nouveau composite
provenance Composite du profil Off-chain
construction du service public_keyless depuis le composite
interdiction de hardcoder le nouveau filename hors Config
SOL Prices Desk couvre :
profils composite public_keyless / all_free / tests
mapping logging + offchain_transport exact
provenance Composite
service provider-neutral à huit entrées pour public_keyless
11 resources packagées
absence de MarketPriceRuntime avant pre.004
absence de refresh avant pre.005
logging debug des contrôles/navigation
logging debug/trace du wrapper IPC
9. Fichiers ajoutés
config/composite.ksp-app-solprices-desk.json
crates/ksp-app-solprices-desk/src/offchain_runtime.rs
crates/ksp-app-solprices-desk/tests/config_composition.rs
deltas/0.2.12/pre.003.md
10. Fichiers modifiés
Cargo.toml
crates/ksp-app-config-desk/tauri.conf.json
crates/ksp-app-config-desk/tests/desktop_contract.rs
crates/ksp-app-solprices-desk/package.json
crates/ksp-app-solprices-desk/tauri.conf.json
crates/ksp-app-solprices-desk/frontend/main.html
crates/ksp-app-solprices-desk/frontend/ts/main.ts
crates/ksp-app-solprices-desk/src/app_state.rs
crates/ksp-app-solprices-desk/src/bootstrap.rs
crates/ksp-app-solprices-desk/src/constants.rs
crates/ksp-app-solprices-desk/src/dto_common.rs
crates/ksp-app-solprices-desk/src/errors.rs
crates/ksp-app-solprices-desk/src/lib.rs
crates/ksp-app-solprices-desk/tests/desktop_contract.rs
crates/ksp-app-solprices-desk/tests/desktop_security.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/src/lib.rs
crates/ksp-config-lib/src/registry.rs
crates/ksp-config-lib/tests/ownership.rs
crates/ksp-config-lib/tests/public_api.rs
crates/ksp-config-lib/unit_tests/offchain_transport.rs
crates/ksp-config-lib/unit_tests/registry.rs
docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md
docs/validation/015-V0_2_12_SOL_PRICES_DESK.md
11. Fichiers volontairement inchangés
crates/ksp-offchain-transport-lib/**
crates/ksp-app-wallet-desk/src/**
crates/ksp-app-wallet-desk/frontend/**
crates/ksp-app-config-desk/src/**
crates/ksp-app-config-desk/frontend/**
README.md
ROADMAP.md
CHANGELOG.md
prompts/017-V0_2_12_START_PROMPT.md
L'intégration Off-chain de Wallet Desk reste propriétaire des tranches ultérieures. Le présent changement Wallet/Config Desk est strictement limité à la cohérence des resources packagées et de leurs canaris.
12. Validations exécutées dans le sandbox
Après matérialisation de la tranche et du delta :
python3 scripts/audit_rust_workspace_rules.py PASS
General Rust rule audit clean
Rust export completeness audit 0 candidate
KSP workspace Rust rule audit clean
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.12
PASS
JSON parse composite/package/tauri.conf modifiés PASS
Le sandbox ne possède pas cargo; les commandes Cargo ne sont donc pas déclarées PASS localement.
13. Gate opérateur attendu
cargo fmt --all
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.2.12
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-config-lib
cargo test -p ksp-app-solprices-desk
cargo test --workspace
(cd crates/ksp-app-solprices-desk && cargo tauri dev)
Le cargo tauri dev doit confirmer que le Desk démarre avec le composite default public_keyless, que Diagnostics affiche les profils composite/Off-chain et 11 documents Config, et qu'aucune table prix ni requête de refresh n'est encore présente.