# Delta 0.0.5-alpha.6.fix.2 — convention Tauri contrôlée et gate robuste ## Baseline et version Baseline attendue : commit opérateur complet de `0.0.5-alpha.6.fix.1`, réalisé après application de `history/0.0.5/alpha.6.fix.1.md` avec statut `FAIL`. Version avant application : ```text 0.0.5-alpha.6.fix.1 ``` Version après application : ```text 0.0.5-alpha.6.fix.2 ``` ## Cause du fix `alpha.6.fix.1` conserve une gate Python invalide : une phrase contenant `l'extérieur` est placée dans une chaîne simple et son apostrophe provoque encore `SyntaxError: unterminated string literal`. La revue opérateur demande en parallèle de confronter le profil non seulement aux configurations Tauri mais aux règles complètes KSP/Games. Cette seconde passe montre qu'une convention de projet contrôlé plus riche est déjà éprouvée et doit être distinguée du contrat Tauri universel. ## Scope REPLACE : ```text VERSION docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md docs/rules/710-TAURI.md docs/studies/001-KSP_GAMES_RECONCILIATION.md ``` ADD : ```text deltas/0.0.5/alpha.6.fix.2.md ``` DELETE : aucun. ## Décisions Le fix établit pour les nouveaux projets Tauri contrôlés une convention forte mais adaptable : - host Cargo direct, sans `src-tauri/` ajouté par réflexe ; - fichiers Tauri/frontend principaux à la racine de la crate et sources Rust sous `src/` ; - frontend versionné sous `frontend/` ; - `lib.rs` comme façade, `main.rs` comme launcher mince et `tauri.rs` comme owner de l'assemblage et des wrappers `#[tauri::command]` ; - modules cohérents par fenêtre/responsabilité et modules communs pour les helpers réellement partagés ; - TS-RS obligatoire dans le profil strict lorsque des DTO/enum/struct Rust possédés par le host sont partagés avec un frontend TypeScript, sauf incompatibilité documentée ; - bindings générés reconstruisibles et non modifiés manuellement ; - intégration explicite des plugins préférée à une commande de commodité opaque ; - WASM séparé du host Tauri par défaut. Vite, TypeScript, Sass et Bootstrap restent le candidat de stack/skeleton pour les projets contrôlés ; ils ne deviennent pas des invariants universels du framework Tauri tant que leurs owners Web ne sont pas matérialisés. ## Replanification La seconde lecture des règles KSP/Games montre que `alpha.7` serait trop large si elle mélangeait conventions sémantiques, nomenclature et tous les audits de formatage. Le forecast devient : ```text alpha.7 profil Rust strict + chemins + nomenclature des crates alpha.8 formatage Rust structurel + audits monotâches alpha.9 décision de skeleton Tauri pour projets contrôlés beta.1 réconciliation intégrée ``` KSP est utilisé comme référence stricte ; Games sert à identifier ce qui doit rester `SHOULD`, sélectionnable ou project-specific. ## Validation opérateur Après application du history `FAIL` de `alpha.6.fix.1`, commit/push de cette tranche, puis application du présent fix : ```bash test "$(cat VERSION)" = '0.0.5-alpha.6.fix.2' test -f history/0.0.5/alpha.6.fix.1.md test -f deltas/0.0.5/alpha.6.fix.2.md test ! -e history/0.0.5/alpha.6.fix.2.md grep -A2 '^## Statut$' history/0.0.5/alpha.6.fix.1.md | grep -Fx 'FAIL' grep -Fx '' docs/rules/710-TAURI.md grep -Fx '' docs/studies/001-KSP_GAMES_RECONCILIATION.md grep -Fx '' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md python3 -B -m unittest discover -s tests -v python3 -B scripts/audit_markdown_headers.py \ README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts python3 -B scripts/audit_markdown_tables.py \ README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts python3 -B scripts/audit_markdown_links.py \ README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts python3 -B - <<'PY' from pathlib import Path import re history = Path("history/0.0.5/alpha.6.fix.1.md").read_text(encoding="utf-8") assert re.search(r"## Statut\s+FAIL\s", history) tauri = Path("docs/rules/710-TAURI.md").read_text(encoding="utf-8") for phrase in ( "## Convention renforcée pour les projets contrôlés", "sans couche `src-tauri/` ajoutée uniquement pour reproduire `create-tauri-app`", "`src/tauri.rs` SHOULD posséder l'assemblage Tauri et les wrappers `#[tauri::command]`", "partagés avec le frontend MUST utiliser TS-RS comme source de génération", "WASM reste normalement une unité séparée de la crate Tauri", ): assert phrase in tauri, phrase study = Path("docs/studies/001-KSP_GAMES_RECONCILIATION.md").read_text(encoding="utf-8") for phrase in ( "Commun aux `8` hosts Tauri observés", "aucun ne possède `src-tauri/`", "KSP plus strict mais réutilisable", "Nomenclature des crates", ): assert phrase in study, phrase plan = Path("docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md").read_text(encoding="utf-8") for phrase in ( "### alpha.7 — profil Rust strict, chemins et nomenclature explicite", "### alpha.8 — formatage Rust structurel et audits monotâches", "### alpha.9 — décision de skeleton Tauri pour projets contrôlés", ): assert phrase in plan, phrase print("0.0.5 alpha.6.fix.2 Tauri convention audit: clean (8 hosts reconciled, strict controlled layout separated from universal framework)") PY git diff --check git add VERSION \ docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md \ docs/rules/710-TAURI.md \ docs/studies/001-KSP_GAMES_RECONCILIATION.md \ deltas/0.0.5/alpha.6.fix.2.md git diff --cached --check git status --short ``` La sortie Git attendue avant ajout du history est exactement : ```text M VERSION A deltas/0.0.5/alpha.6.fix.2.md M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md M docs/rules/710-TAURI.md M docs/studies/001-KSP_GAMES_RECONCILIATION.md ``` ## Transition ### PASS Créer/appliquer `history/0.0.5/alpha.6.fix.2.md`, committer/pousser le fix, puis poursuivre avec `alpha.7`. ### FAIL Rester dans `0.0.5-alpha.6.fix.M`. Ne pas commencer la réconciliation Rust tant que la convention Tauri et sa gate ne sont pas fermées proprement.