Files
khadhroony-solana-project/deltas/0.2.12/pre.003.md
2026-08-27 09:33:29 +02:00

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.