# Delta `0.2.12-pre.009-fix.001` — build Price Desk et source de vérité de version Tauri ## Base requise ```text 0.2.12-pre.009 ``` ## Cause Le gate opérateur de `pre.009` passe intégralement jusqu'aux builds finaux : ```text fmt/audits/check/clippy/tests/workspace PASS smoke live composite SOL Prices PASS cargo tauri build Wallet Desk PASS cargo tauri build SOL Prices Desk FAIL ``` Le `beforeBuildCommand` du Price Desk exécute `tsc && vite build` et TypeScript rejette une fonction morte : ```text TS6133 appendMarketPriceCell is declared but its value is never read ``` Le gate a également montré qu'un canari ajouté en `pre.009` couplait à tort `package.json`, `tauri.conf.json` et `CARGO_PKG_VERSION`. Cette égalité aurait imposé de modifier toutes les apps Tauri à chaque bump global du workspace, même hors scope. ## Version technique ```text delivery 0.2.12-pre.009-fix.001 workspace Cargo 0.2.12-pre.9.fix.1 ``` Conformément à `VER-ID-007`, le fix modifie une source TypeScript consommée par le build et avance donc la version Cargo. ## Correction build `crates/ksp-app-solprices-desk/frontend/ts/main.ts` supprime `appendMarketPriceCell`, devenue inutilisée après le rendu UX actuel. Aucun appel n'est remplacé et aucun comportement de refresh/rendu n'est changé. ## Correction version desktop La politique durable devient : ```text Cargo/workspace version source de vérité KSP tauri.conf.json top-level version absent Tauri bundle version dérivée de Cargo package.json version metadata frontend privée non autoritative ``` Les trois Desks Config/Wallet/SOL Prices sont alignés immédiatement sur ce contrat. Leurs `tauri.conf.json` omettent `version` et leurs canaris n'exigent plus d'égalité avec `package.json` ou `CARGO_PKG_VERSION`. Les `package.json` ne sont pas modifiés par ce fix : ils restent `private: true` et ne participent pas à l'identité de release KSP. ## Règles Ajout dans `docs/rules/VERSION_WORKFLOW.md` : ```text VER-ID-015 version bundle Tauri dérivée de Cargo; pas de version dupliquée dans tauri.conf VER-ID-016 package.json privé non autoritatif et non couplé au workspace ``` ## Fichiers ajoutés ```text deltas/0.2.12/pre.009-fix.001.md ``` ## Fichiers modifiés ```text Cargo.toml docs/rules/VERSION_WORKFLOW.md crates/ksp-app-config-desk/tauri.conf.json crates/ksp-app-config-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-solprices-desk/tauri.conf.json crates/ksp-app-solprices-desk/tests/desktop_contract.rs crates/ksp-app-solprices-desk/frontend/ts/main.ts docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md docs/validation/015-V0_2_12_SOL_PRICES_DESK.md ``` ## Fichiers supprimés ```text aucun ``` ## Hors scope préservé ```text MarketPriceService/providers/wire MarketPriceRuntime hors build fix refresh individuel/multiple/global Wallet balance/moyenne/équivalent Config/composites/resources frontend UX hors suppression dead code CHANGELOG/ROADMAP/prompt suivant ``` ## Validations sandbox ```text python3 scripts/audit_rust_workspace_rules.py PASS python3 scripts/audit_markdown_tables.py README.md ... deltas PASS JSON Tauri/package PASS trois tauri.conf.json sans champ version PASS package.json des trois apps private=true PASS contrôle TypeScript noResolve: TS6133 absent PASS cargo fmt/check/clippy/test/tauri build NOT RUN — cargo/deps frontend indisponibles dans le sandbox ``` ## 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-app-solprices-desk cargo test --workspace cargo test -p ksp-app-solprices-desk --test market_price_composition_live_smoke -- --ignored --nocapture (cd crates/ksp-app-solprices-desk && cargo tauri build) ``` Le critère décisif de fermeture est le `cargo tauri build` Price Desk. Une fois vert, `pre.009` est fermée et `pre.010` peut rester strictement documentaire/mécanique.