v0.2.12-pre.003

This commit is contained in:
2026-08-27 09:33:29 +02:00
parent 0d01017c31
commit 5a165296d9
30 changed files with 806 additions and 111 deletions

250
deltas/0.2.12/pre.003.md Normal file
View File

@@ -0,0 +1,250 @@
<!-- file: deltas/0.2.12/pre.003.md -->
<!-- version: 1 -->
# Delta `0.2.12-pre.003` — composite Config et bootstrap Off-chain
## 1. Base requise
Cette tranche s'applique exclusivement après :
```text
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 à :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```text
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 à :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```text
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
```text
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
```text
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
```text
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 :
```text
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
```bash
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.