Files
pgr/deltas/0.1.4/alpha.2.md
2026-09-29 11:45:01 +02:00

9.0 KiB

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é :

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 :

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 :

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 :

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 :

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