diff --git a/VERSION b/VERSION index 77942b3..603ddf4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.5-alpha.6.fix.1 +0.0.5-alpha.6.fix.2 diff --git a/deltas/0.0.5/alpha.6.fix.2.md b/deltas/0.0.5/alpha.6.fix.2.md new file mode 100644 index 0000000..454b664 --- /dev/null +++ b/deltas/0.0.5/alpha.6.fix.2.md @@ -0,0 +1,167 @@ + + + +# 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. diff --git a/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md b/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md index 6cbe6f3..ab3e938 100644 --- a/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +++ b/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md @@ -1,5 +1,5 @@ - + # Plan 0.0.5 — réconciliation réelle avec KSP et sasedev-games @@ -102,17 +102,27 @@ Les préférences récurrentes de l'organisation — frontend sous `frontend/`, La politique `gen/` n'est pas généralisée : les sorties purement reproductibles restent générées, mais les projets mobiles modifiés intentionnellement doivent être classifiés selon leur rôle réel. L'échec du POC Tauri mobile Games ne constitue pas un rejet général de Tauri Android/iOS pour les autres produits. -### alpha.7 — complétude du profil Rust strict +La gate `alpha.6.fix.1` révèle un second défaut de quoting Python (`l'extérieur` dans une chaîne simple) et la revue opérateur demande une seconde passe sur les règles réelles KSP/Games. `alpha.6.fix.2` corrige le gate et renforce la convention des projets contrôlés avec le layout direct sans `src-tauri/`, `lib.rs`/`main.rs`/`tauri.rs`, TS-RS lorsque le frontend TypeScript partage des DTO Rust, modules de fenêtres/responsabilités et préférence pour l'intégration explicite des plugins. Les règles Rust générales et la nomenclature des crates restent volontairement dans `alpha.7/alpha.8`. -La clarification Tauri réexpose une divergence déjà visible dans l'historique de conception : le profil Rust strict retenu pour les projets contrôlés prévoit notamment l'absence de `use` non-trait, les chemins explicites les plus courts, les réexports `use self::...`, les blocs homogènes par type/visibilité, l'ordre alphabétique des blocs monolignes et la séparation des blocs, alors que `510-RUST_CARGO.md` reste partiellement plus permissif. +### alpha.7 — profil Rust strict, chemins et nomenclature explicite -Cette tranche doit réconcilier les décisions historiques avec KSP/Games, attribuer chaque propriété au bon owner (`rustfmt`, Clippy, audit existant ou nouvel audit monotâche) et n'automatiser que ce qui peut être contrôlé de façon fiable. Elle ne doit pas réimporter `audit_rust_general_rules.py` en bloc. +Réconcilier les décisions historiques avec les règles effectivement versionnées dans KSP/Games. KSP sert de référence stricte pour les `use` réservés aux traits, chemins externes publics les plus courts, réexports `self::`, alias interdits, façade crate-root et contrôle de flux explicite ; Games confirme le noyau mais montre quelles règles doivent rester sélectionnables ou adaptables. -### alpha.8 — décision de skeleton Tauri pour projets contrôlés +Cette tranche doit également formaliser une convention générique de nomenclature des crates pour les projets contrôlés : préfixe projet/abréviation, responsabilité lisible et suffixe de rôle ou cible (`lib`, `api`, `worker`, `cli`, `desk`, `desktop`, `tauri`, `wasm`, etc.) seulement lorsque ce suffixe apporte une information réelle. Les vocabulaires exacts KSP/Games restent locaux. -Vérifier si le profil Tauri obtenu et les owners Web disponibles permettent une skeleton specification utile pour les projets que l'organisation contrôle. Le candidat à évaluer utilise `frontend/`, Vite, TypeScript, Sass et Bootstrap, conserve WASM dans une unité séparée par défaut et privilégie l'ajout explicite des plugins à partir de leur documentation plutôt qu'une commande opaque. +Aucun gros audit composite n'est importé. Les contrôles déjà possédés par Clippy, rustc ou l'audit de façade restent chez leur owner. -Si les profils Web nécessaires ne sont pas encore assez matérialisés pour posséder proprement ces choix, consigner explicitement le report au lieu de fabriquer un skeleton décoratif ou de faire de `710-TAURI.md` un owner Web de substitution. +### alpha.8 — formatage Rust structurel et audits monotâches + +Réconcilier les règles KSP de blocs homogènes, visibilité, ordre alphabétique, espacement, modules et réexports avec les conventions plus légères de Games. Décider précisément ce qui appartient à `rustfmt`, aux audits PGR existants (`blank_lines`, `const_blocks`) ou à un nouvel audit monotâche justifié. + +La tranche ne doit pas créer un parser Rust général ni imposer un ordre alphabétique lorsqu'un ordre métier/protocolaire est sémantique. Elle peut conclure qu'aucun nouveau script n'est nécessaire pour une propriété déjà correctement possédée. + +### alpha.9 — décision de skeleton Tauri pour projets contrôlés + +Vérifier si le profil Tauri obtenu et les owners Web disponibles permettent une skeleton specification utile pour les projets que l'organisation contrôle. Le candidat à évaluer utilise le host Cargo direct sans `src-tauri/`, `frontend/`, Vite, TypeScript, Sass et Bootstrap, centralise l'assemblage/les commandes dans `tauri.rs`, utilise TS-RS pour les DTO Rust partagés avec le frontend, conserve WASM dans une unité séparée par défaut et privilégie l'ajout explicite des plugins à partir de leur documentation. + +Si les profils Web nécessaires ne sont pas encore assez matérialisés pour posséder proprement Vite/TypeScript/Sass/Bootstrap, consigner explicitement le report de ces choix tout en conservant les conventions Tauri déjà prouvées ; ne pas fabriquer un skeleton décoratif ni faire de `710-TAURI.md` un owner Web de substitution. ### beta.1 — réconciliation intégrée diff --git a/docs/rules/710-TAURI.md b/docs/rules/710-TAURI.md index 9b9dcbd..1ce505b 100644 --- a/docs/rules/710-TAURI.md +++ b/docs/rules/710-TAURI.md @@ -1,5 +1,5 @@ - + # Profil Tauri 2 @@ -52,6 +52,42 @@ Les éléments suivants appartiennent néanmoins au scope Tauri lorsqu'ils exist Leur emplacement exact reste une décision du projet ou du skeleton retenu tant qu'il est supporté par la toolchain. +## Convention renforcée pour les projets contrôlés + +Le contrat universel ci-dessus reste compatible avec des projets Tauri imposés de l'extérieur. Pour un **nouveau projet Tauri contrôlé par l'organisation** qui sélectionne le profil strict PGR, les conventions suivantes forment en revanche la baseline recommandée et ne doivent pas être abandonnées sans raison documentée. + +Le host SHOULD être une crate Cargo mixte directement lisible, sans couche `src-tauri/` ajoutée uniquement pour reproduire `create-tauri-app`. Le layout recommandé est : + +```text +/ +├── Cargo.toml +├── build.rs +├── package.json +├── tsconfig.json +├── tauri.conf.json +├── capabilities/ +├── src/ +└── frontend/ +``` + +Un fichier comme `vite.config.ts` appartient également à la racine lorsque Vite est le bundler sélectionné. Un projet externe MAY conserver `src-tauri/` ou une autre organisation lorsque cette structure est imposée ou qu'une migration n'apporte pas de valeur suffisante. + +Dans le host Rust : + +- `src/lib.rs` SHOULD rester une façade de modules/réexports ; +- `src/main.rs` SHOULD rester un launcher mince vers une fonction publique de la bibliothèque applicative ; +- `src/tauri.rs` SHOULD posséder l'assemblage Tauri et les wrappers `#[tauri::command]`, qui délèguent aux modules propriétaires plutôt que porter la logique métier ; +- une fenêtre ou responsabilité UI non triviale SHOULD posséder un module cohérent, avec sous-modules si nécessaire ; les helpers réellement partagés entre plusieurs fenêtres/responsabilités SHOULD être déplacés dans des modules communs dédiés ; +- un préfixe local comme `tw_` MAY être utilisé pour identifier les modules de fenêtres, mais PGR n'impose pas ce préfixe à tous les projets. + +Lorsque le frontend sélectionné est TypeScript, les structures, énumérations et DTO Rust **possédés par le host** et partagés avec le frontend MUST utiliser TS-RS comme source de génération dans le profil strict, sauf incompatibilité technique explicitement documentée. Le contrat Rust reste la source de vérité ; les bindings générés ne sont pas modifiés manuellement et SHOULD rester hors Git lorsqu'ils sont entièrement reproductibles. Le skeleton MAY normaliser leur sortie sous `frontend/ts/bindings/`. + +Pour les projets contrôlés, `frontend/` est le répertoire recommandé pour les sources Web versionnées. Vite + TypeScript + Sass constitue la stack candidate par défaut et Bootstrap est la baseline de présentation privilégiée lorsque le projet a besoin d'un framework CSS généraliste. Tailwind CSS n'est pas interdit par le profil Tauri, mais il n'est pas le choix PGR par défaut et son adoption demande une décision explicite du projet. Ces choix restent possédés par le futur skeleton et les profils Web correspondants. + +L'intégration d'un plugin SHOULD préférer les étapes explicites décrites par sa documentation — dépendance Cargo, initialisation Rust, package frontend et capabilities nécessaires — afin que chaque modification reste visible et revue. `cargo tauri add` MAY être utilisé lorsque ce raccourci apporte une vraie valeur, mais il n'est pas la voie canonique imposée aux projets contrôlés. + +WASM reste normalement une unité séparée de la crate Tauri. Une adaptation WASM réutilisable SHOULD donc posséder sa propre crate/package et ses propres profils ; elle n'est intégrée au host Tauri que lorsqu'une composition architecturale explicite l'exige. + ## Ownership du build et hooks frontend Lorsqu'une validation concerne l'intégration Tauri complète, le CLI Tauri est l'owner de l'orchestration. @@ -162,7 +198,7 @@ Ce profil ne crée pas : - de plugin obligatoire ; - de nombre ou taille de fenêtres ; - de politique de bundle unique ; -- de layout `src-tauri/` ou `frontend/` obligatoire ; +- de layout universel imposé aux projets externes ; la convention stricte des projets contrôlés est définie séparément ci-dessus ; - de version exacte de Tauri, `tauri-build` ou du CLI. Ces décisions appartiennent au projet, à un profil plus spécifique ou à une skeleton specification seulement lorsqu'une valeur réutilisable est réellement démontrée. diff --git a/docs/studies/001-KSP_GAMES_RECONCILIATION.md b/docs/studies/001-KSP_GAMES_RECONCILIATION.md index d172a9a..80702f1 100644 --- a/docs/studies/001-KSP_GAMES_RECONCILIATION.md +++ b/docs/studies/001-KSP_GAMES_RECONCILIATION.md @@ -1,5 +1,5 @@ - + # Étude de réconciliation PGR / KSP / sasedev-games @@ -167,6 +167,22 @@ La règle de validation commune reste confirmée : lorsqu'une propriété dépen Le CLI Tauri fournit une commande `add`, mais les documentations officielles des plugins détaillent également l'ajout explicite de la dépendance Cargo, l'initialisation Rust et, lorsqu'ils existent, les bindings frontend. PGR ne doit donc pas imposer la commande de commodité : un projet qui privilégie le contrôle manuel des manifests peut suivre explicitement ces étapes et revoir chaque modification. +#### Seconde passe de réconciliation des conventions Tauri/Rust + +La clarification opérateur de `alpha.6.fix.1` déclenche une seconde lecture des règles versionnées plutôt qu'une simple extrapolation depuis les fichiers de configuration. Cette passe confirme plusieurs niveaux de preuve. + +**Commun aux `8` hosts Tauri observés** : les `6` Desk KSP et les `2` hosts Games placent directement à la racine de leur crate `Cargo.toml`, `build.rs`, `package.json`, `tsconfig.json` et `tauri.conf.json`; tous possèdent `src/lib.rs`, `src/main.rs`, `src/tauri.rs` et `frontend/`; aucun ne possède `src-tauri/`. Cette convergence justifie une forte recommandation PGR pour les nouveaux projets contrôlés sans imposer une migration mécanique aux projets externes. + +**Commun et déjà normatif dans les corpus** : KSP `KSP-APP-010..013` et Games `GAME-PLATFORM-010` convergent vers une bibliothèque applicative avec façade `lib.rs`, un launcher `main.rs` mince et un `tauri.rs` qui assemble Tauri et expose les wrappers de commandes. Games `GAME-PLATFORM-009` confirme aussi que l'adaptation WASM réutilisable reste distincte de la crate Tauri. + +**KSP plus strict mais réutilisable** : `KSP-APP-023` place les sources Web sous `frontend/`, TypeScript sous `frontend/ts/`, Sass sous `frontend/sass/` et les bindings TS-RS sous `frontend/ts/bindings/`, les DTO Rust restant la source de vérité. La baseline KSP `0.3.16` contient `41` fichiers Rust applicatifs utilisant TS-RS dans les apps Desk. Games n'a pas encore ce contrat TS-RS : PGR le classe donc comme convention stricte des projets contrôlés, pas comme invariant universel de Tauri. + +**Fortement recommandé mais pas universel** : le préfixe KSP `tw_`, le splashscreen commun, les paires de ports fixes, le plugin tracing précis et les détails de shell sont locaux. En revanche, un module cohérent par fenêtre/responsabilité, des helpers communs séparés et l'ajout explicite/revu des plugins sont des patterns réutilisables. + +**Rust au-delà de Tauri** : `RULES_RUST.md` KSP contient un profil beaucoup plus complet que Games : `use` non-traits interdits, chemins externes explicites les plus courts, réexports `self::`, alias interdits, blocs de visibilité/ordre, contrôle de flux explicite et façade stricte. Games confirme le noyau façade/chemins/erreurs mais pas toutes les contraintes de style. Ces écarts doivent être traités en tranches Rust dédiées, avec KSP comme référence stricte et Games comme pression pour classifier correctement `MUST`/`SHOULD`/override. + +**Nomenclature des crates** : KSP encode explicitement le rôle (`ksp--lib`, `ksp--api`, `ksp-app--`, workers/jobs), tandis que Games conserve lui aussi des noms révélant rôle et cible (`game-logging-lib`, `*-desktop`, `*-tauri`, `*-wasm`, `engine-v1-*`). PGR doit donc étudier une convention générale « préfixe projet + responsabilité + suffixe de rôle/cible » sans figer les vocabulaires propres à KSP ou Games. + ### Web / Vite / WASM Les corpus et la clarification opérateur permettent désormais de séparer trois choses : @@ -189,7 +205,7 @@ Les responsabilités suivantes sont utiles dans leurs projets mais ne fournissen - firewall de dépendances, protocoles Solana, transports, Store, workers/jobs, tracing targets et materialization de KSP ; - générations de moteur, assets de jeux, Uroburas, serveurs temps réel, distribution Android/Web et politiques de hosting de Games ; -- choix de noms de crates, répertoires de config, schémas, routes, plugins et ressources propres à chaque application ; +- noms métier exacts des crates, répertoires de config, schémas, routes, plugins et ressources propres à chaque application ; la convention générique de noms exprimant préfixe projet, responsabilité et rôle reste à réconcilier en `alpha.7` ; - seuils Clippy, identifiants courts autorisés, ports de développement et paramètres de fenêtres lorsqu'ils n'expriment aucun invariant réutilisable. Ces éléments servent à tester que PGR permet des règles locales spécifiques ; ils ne doivent pas être aspirés dans le référentiel central. diff --git a/history/0.0.5/alpha.6.fix.2.md b/history/0.0.5/alpha.6.fix.2.md new file mode 100644 index 0000000..d259b1a --- /dev/null +++ b/history/0.0.5/alpha.6.fix.2.md @@ -0,0 +1,110 @@ + + + +# History 0.0.5-alpha.6.fix.2 — convention Tauri contrôlée et gate robuste + +## Statut + +FAIL + +La gate opérateur de `0.0.5-alpha.6.fix.2` exécutée le `2026-09-25` est mécaniquement propre : les `37` tests Python réussissent, les trois audits Markdown passent, le contrôle ciblé du profil Tauri s'exécute sans erreur et le scope Git correspond exactement au delta. + +La revue fonctionnelle immédiatement postérieure révèle toutefois que la politique de version Tauri/frontend reste incorrectement généralisée. Le profil conserve une préférence pour l'omission de `tauri.conf.json > version` afin d'hériter de Cargo et traite trop facilement `package.json > version` comme une donnée non synchronisée. L'objectif réel n'est pas de supprimer ces champs, mais d'éviter leur modification à chaque `alpha`, `.fix`, beta ou RC lorsqu'ils ne portent qu'un jalon produit `X.Y.Z`. + +Le statut global est donc `FAIL` malgré une gate mécanique verte. Le correctif suivant doit rétablir une classification explicite des valeurs de version et corriger uniquement cette politique sans rouvrir les autres décisions Tauri déjà stabilisées. + +## Baseline et version + +La tranche part du commit opérateur de `0.0.5-alpha.6.fix.1` : + +```text +33bf835 0.0.5-alpha.6.fix.1 +``` + +Le push vers `origin/master` a réussi avant l'application de `alpha.6.fix.2`. + +La version contrôlée après application du delta est : + +```text +0.0.5-alpha.6.fix.2 +``` + +`history/0.0.5/alpha.6.fix.1.md` est présent avec statut `FAIL`; `deltas/0.0.5/alpha.6.fix.2.md` est présent et `history/0.0.5/alpha.6.fix.2.md` était absent pendant la gate. + +## Validation opérateur observée + +L'opérateur a fourni les sorties du `2026-09-25` depuis `~/Projects/pgr`, à `10:19:33`–`10:22:30`. + +Les contrôles de présence, statut et révision ont réussi. La suite Python globale a exécuté `37` tests, tous réussis : + +```text +Ran 37 tests in 0.518s + +OK +``` + +Les audits documentaires affichent : + +```text +Markdown header audit: clean (150 file(s)) +Markdown table audit: clean (7 table(s), 150 file(s)) +Markdown link audit: clean (148 local link(s), 150 file(s)) +``` + +Le contrôle ciblé affiche : + +```text +0.0.5 alpha.6.fix.2 Tauri convention audit: clean (8 hosts reconciled, strict controlled layout separated from universal framework) +``` + +`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic. + +Le scope Git observé 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 +``` + +## Défaut fonctionnel découvert après la gate + +La relecture des archives autoritaires montre que la convention historique existe dans **les deux corpus** : + +- KSP `VER-ID-015/016` fait de Cargo la source de vérité du bundle, impose l'absence de `tauri.conf.json > version` et ne synchronise pas `package.json` avec chaque version workspace ; +- Games `VER-TAURI-001..004` reprend la version Cargo comme source produit, omet `tauri.conf.json > version` et ne met `package.json > version` à jour qu'à certains jalons. + +Cette convergence historique explique la règle matérialisée dans PGR, mais ne suffit pas à la rendre correcte comme politique générale. Elle confond deux objectifs différents : + +```text +réduire le churn des prereleases +≠ +supprimer les champs de version utiles +``` + +Le contrat souhaité est plutôt : + +- `VERSION` porte l'identité exacte de la tranche active ; +- les miroirs techniques qui ont besoin de cette granularité peuvent suivre exactement `VERSION` ; +- `tauri.conf.json > version` et `package.json > version`, lorsqu'ils sont utiles au même produit, peuvent porter le jalon stable cible `X.Y.Z` et rester inchangés pendant les prereleases/fixes ; +- les prereleases réellement distribuées peuvent adopter une politique plus fine lorsque leur packaging l'exige. + +Cette distinction correspond à la conception PGR antérieure qui classait déjà les versions selon leur rôle plutôt que d'exiger une égalité globale. + +## Résultat + +`0.0.5-alpha.6.fix.2` est enregistré `FAIL` malgré une gate mécanique verte, car la politique de version Tauri/frontend reste fonctionnellement incorrecte. + +## Transition + +Appliquer le présent history puis committer/pousser `0.0.5-alpha.6.fix.2`. + +La correction suivante est : + +```text +0.0.5-alpha.6.fix.3 +``` + +Comme ce troisième fix atteint le seuil de revue obligatoire, le plan doit être réexaminé. Le correctif doit rester limité à la classification/synchronisation des versions et confirmer explicitement si `alpha.6` peut ensuite être clôturée sans absorber les tranches Rust ou skeleton suivantes.