# Delta 0.1.4-alpha.2 — réconciliation normative Tauri ## Objet Réconcilier l'owner Tauri `710` et l'étude historique `002` à partir du cadrage `alpha.1` validé, sans matérialiser encore le skeleton `004-TAURI.md`. La tranche sépare explicitement les responsabilités Tauri des choix Web déjà possédés par les owners `530/540/550/560`, précise la frontière commande / permission / capability et rend la politique de sélection des capability files visible comme décision de sécurité. ## Précondition Le history `history/0.1.4/alpha.1.md` doit être présent avec statut `PASS` avant application de ce delta. `alpha.1` a validé : ```text 48 / 48 tests PASS Markdown headers: clean (266 file(s)) Markdown tables: clean (11 table(s), 266 file(s)) Markdown links: clean (343 local link(s), 266 file(s)) 0.1.4 alpha.1 structural audit: clean (96 prior pairs, 7 current Tauri hosts classified, no premature skeleton/adoption) ``` ## Réconciliation de `710-TAURI.md` La révision interne passe de `6` à `7`. La convention contrôlée est recentrée sur ce que Tauri possède réellement : - host Cargo direct `lib + bin` recommandé pour une nouvelle baseline PGR contrôlée ; - `src-tauri/` reste un layout Tauri supporté et n'est pas déclaré invalide ; - `build.rs`, configuration Tauri, capabilities, assemblage Rust, hooks et packaging restent dans le scope Tauri ; - la racine frontend est un point de composition, pas un choix possédé par `710` ; - TypeScript, Vite, CSS/Sass, framework CSS et package manager restent possédés par leurs owners Web ; - TS-RS devient un choix conditionnel de frontière typée plutôt qu'une obligation Tauri générale ; - aucun template technique n'est créé. La frontière de sécurité distingue désormais : ```text commande enregistrée permission ACL + scopes capability assignant les permissions aux fenêtres/webviews ``` La tranche exige une décision explicite sur la sélection des capabilities. Elle enregistre le comportement Tauri 2 courant : si `app.security.capabilities` est absent ou vide, les capability files du répertoire `capabilities/` sont inclus par défaut ; une liste explicite permet de sélectionner ceux qui participent au build. L'ajout d'un capability file sous auto-inclusion devient donc explicitement une modification de surface de sécurité. La revue doit également considérer le cumul des droits lorsqu'une fenêtre/webview appartient à plusieurs capabilities. ## Révision de l'étude `002` La révision interne passe de `2` à `3`. La décision `DEFER` de `0.0.5-alpha.9` reste conservée comme preuve historique mais n'est plus la décision active : ```text motif Web historique LIFT candidat organisationnel ADOPT FOR MATERIALIZATION matérialisation pendant alpha.2 NO matérialisation visée alpha.3 ``` Le corpus courant reste `1` host Games `0.3.6` + `6` hosts KSP `0.3.19`. La future specification doit composer fondation + Rust/Cargo + Web applicable + Tauri + plateformes ciblées, sans recopier les owners. ## Mise à jour du plan et de l'index `docs/plans/010-V0_1_4_TAURI_REEVALUATION_PLAN.md` passe en révision `2` et enregistre : - la gate `alpha.1 PASS` ; - les décisions normatives préparées pour `alpha.2` ; - l'autorisation conditionnelle de matérialiser `004-TAURI.md` en `alpha.3` ; - le point transversal découvert lors de l'utilisation de PGR avec SaseDev Knowledge : sémantique `SHOULD`, autonomie post-adoption et future séparation PGR/Knowledge ; - l'obligation de reprendre ce point lors de la revue d'horizon de fermeture avant de générer le prompt suivant. `docs/000-README.md` passe en révision `42` pour refléter l'état réconcilié du profil et de l'étude. `ROADMAP.md` et `CHANGELOG.md` restent inchangés. La trajectoire publiée `0.1.5` Games / `0.1.6` KSP / `0.1.7` audits Rust n'est pas réécrite avant la revue d'horizon prévue en fermeture de `0.1.4`. ## Frontières Cette tranche MUST NOT : - créer `docs/skeletons/004-TAURI.md` ; - créer un template `tauri.conf.json`, `build.rs` ou capability générique ; - créer un contrat `docs/validation/*TAURI*` séparé ; - modifier `RULES.md` ou `230-ADOPTION.md` pour traiter dès maintenant le point transversal `SHOULD`/autonomie ; - modifier `ROADMAP.md` ou `CHANGELOG.md` ; - commencer l'adoption Games ou KSP. ## Gate opérateur Après application du history `alpha.1`, commit/push de `alpha.1`, puis application du présent delta, exécuter depuis la racine du dépôt : ```bash cat VERSION test -f history/0.1.4/alpha.1.md test -f deltas/0.1.4/alpha.2.md test ! -e history/0.1.4/alpha.2.md test ! -e docs/skeletons/004-TAURI.md grep -A4 '^## Statut$' history/0.1.4/alpha.1.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 assert Path('VERSION').read_text(encoding='utf-8').strip() == '0.1.4-alpha.2' history = Path('history/0.1.4/alpha.1.md').read_text(encoding='utf-8') assert re.search(r'## Statut\s+PASS', history) assert {p.name for p in Path('deltas/0.1.4').glob('*.md')} == {'alpha.1.md', 'alpha.2.md'} assert {p.name for p in Path('history/0.1.4').glob('*.md')} == {'alpha.1.md'} rule = Path('docs/rules/710-TAURI.md').read_text(encoding='utf-8') assert rule.startswith('\n') for phrase in ( '## Commandes, permissions et capabilities', 'commande enregistrée → handler natif connu du système d\'invocation', 'app.security.capabilities', 'inclut par défaut les capability files du répertoire `capabilities/`', 'droits cumulés', 'Le choix ou le renforcement de TS-RS appartient au projet ou au futur skeleton Tauri', 'host SHOULD être une crate Cargo mixte directement lisible', ): assert phrase in rule, phrase for phrase in ( 'TypeScript et Vite sont fortement recommandés', 'Bootstrap est la baseline de présentation privilégiée', 'MUST utiliser TS-RS', ): assert phrase not in rule, phrase study = Path('docs/studies/002-TAURI_SKELETON_DECISION.md').read_text(encoding='utf-8') assert study.startswith('\n') for phrase in ( '## Réexamen décisionnel `0.1.4-alpha.2`', 'DEFER historique pour absence d\'owners Web LIFT', 'candidat organisationnel ADOPT FOR MATERIALIZATION', 'matérialisation visée alpha.3', 'Le `DEFER` de `0.0.5-alpha.9` reste conservé comme décision historique', ): assert phrase in study, phrase plan = Path('docs/plans/010-V0_1_4_TAURI_REEVALUATION_PLAN.md').read_text(encoding='utf-8') assert plan.startswith('\n') for phrase in ( '## Gate `alpha.1` acquise', '## Réconciliation normative préparée en `alpha.2`', '## Point transversal découvert pendant la gate `alpha.1`', 'forte recommandation non obligatoire', 'sans rechercher automatiquement une version PGR plus récente', 'howtos, recettes et snippets pratiques vivent dans Knowledge', 'revue d\'horizon', ): assert phrase in plan, phrase index = Path('docs/000-README.md').read_text(encoding='utf-8') assert index.startswith('\n') assert 'owner Tauri 2 réconcilié en `alpha.2`' in index assert 'candidat organisationnel retenu pour matérialisation contrôlée en `alpha.3`' in index roadmap = Path('ROADMAP.md').read_text(encoding='utf-8') for phrase in ( '`( ) 0.1.4`', '`( ) 0.1.5` — adoption réelle de PGR par `sasedev-games`', '`( ) 0.1.6` — adoption réelle de PGR par `khadhroony-solana-project`', '`( ) 0.1.7` — audits Python read-only', ): assert phrase in roadmap, phrase assert '0.1.8' not in roadmap assert not Path('docs/skeletons/004-TAURI.md').exists() assert not Path('history/0.1.4/alpha.2.md').exists() print( '0.1.4 alpha.2 Tauri normative audit: clean ' '(ACL boundaries explicit, Web ownership separated, historical DEFER lifted, skeleton still deferred to alpha.3)' ) PY git diff --check git add VERSION \ deltas/0.1.4/alpha.2.md \ docs/000-README.md \ docs/plans/010-V0_1_4_TAURI_REEVALUATION_PLAN.md \ docs/rules/710-TAURI.md \ docs/studies/002-TAURI_SKELETON_DECISION.md git diff --cached --check git status --short ``` Le scope attendu du delta `alpha.2` est : ```text M VERSION A deltas/0.1.4/alpha.2.md M docs/000-README.md M docs/plans/010-V0_1_4_TAURI_REEVALUATION_PLAN.md M docs/rules/710-TAURI.md M docs/studies/002-TAURI_SKELETON_DECISION.md ```