0.1.4-alpha.2

This commit is contained in:
2026-09-29 11:45:01 +02:00
parent 7f475584d6
commit ed794d66a0
7 changed files with 466 additions and 27 deletions

214
deltas/0.1.4/alpha.2.md Normal file
View File

@@ -0,0 +1,214 @@
<!-- file: deltas/0.1.4/alpha.2.md -->
<!-- version: 1 -->
# 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('<!-- file: docs/rules/710-TAURI.md -->\n<!-- version: 7 -->')
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('<!-- file: docs/studies/002-TAURI_SKELETON_DECISION.md -->\n<!-- version: 3 -->')
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('<!-- file: docs/plans/010-V0_1_4_TAURI_REEVALUATION_PLAN.md -->\n<!-- version: 2 -->')
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('<!-- file: docs/000-README.md -->\n<!-- version: 42 -->')
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
```