# Delta 0.1.1-alpha.2.fix.1 — correction de la gate d'ownership Web ## Baseline et version Baseline attendue : commit opérateur de `0.1.1-alpha.2`, réalisé après application de `history/0.1.1/alpha.2.md` avec statut `FAIL`. Le hash de ce commit n'est pas anticipé. Version avant application : ```text 0.1.1-alpha.2 ``` Version après application : ```text 0.1.1-alpha.2.fix.1 ``` ## Objet Corriger uniquement la syntaxe défectueuse de la gate opérateur de `alpha.2`. Les nouveaux owners Web et tous les documents normatifs livrés par `alpha.2` restent inchangés. Le delta historique `deltas/0.1.1/alpha.2.md` reste également inchangé. Le défaut observé était un littéral Python entouré de quotes simples alors que son texte contenait l'apostrophe de `s'applique` : ```python 'Le profil s'applique uniquement lorsqu'un projet utilise réellement Vite.' ``` Le fix utilise des littéraux syntaxiquement sûrs dans la nouvelle gate sans modifier les assertions sémantiques. ## Scope REPLACE : ```text VERSION docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md ``` ADD : ```text deltas/0.1.1/alpha.2.fix.1.md ``` DELETE : aucun. Aucun profil, règle normative, template, skeleton, script d'audit ou test n'est modifié par ce correctif. ## Validation opérateur Après application du history `FAIL`, commit/push de `alpha.2`, puis application du présent delta : ```bash test "$(cat VERSION)" = '0.1.1-alpha.2.fix.1' git cat-file -e HEAD:history/0.1.1/alpha.2.md test -f history/0.1.1/alpha.2.md test -f deltas/0.1.1/alpha.2.md test -f deltas/0.1.1/alpha.2.fix.1.md test ! -e history/0.1.1/alpha.2.fix.1.md grep -A2 '^## Statut$' history/0.1.1/alpha.2.md | grep -Fx 'FAIL' grep -Fx '' RULES.md grep -Fx '' docs/000-README.md grep -Fx '' docs/architecture/003-RULE_PROFILE_MODEL.md grep -Fx '' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md grep -Fx '' docs/rules/000-README.md grep -Fx '' docs/rules/710-TAURI.md python3 -B - <<'PYGATE' from pathlib import Path import re history = Path('history/0.1.1/alpha.2.md').read_text(encoding='utf-8') assert re.search(r'## Statut\s+FAIL\s', history) expected = { '530-TYPESCRIPT.md': ( 'TypeScript **SHOULD** être préféré', 'TS-RS', 'ni Vite', ), '540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md': ( 'MUST NOT imposer npm', 'Lockfile', 'alpha.3', ), '550-VITE.md': ( 'Vite **SHOULD** être le build tool/dev server privilégié', "Le profil s'applique uniquement lorsqu'un projet utilise réellement Vite.", 'alpha.4', ), '560-CSS_SASS.md': ( 'Sass **SHOULD** être préféré', 'Bootstrap constitue un exemple concret', '`@use` / `@forward`', '`@import` Sass est déprécié', 'alpha.5', ), } for name, phrases in expected.items(): profile = Path('docs/rules', name).read_text(encoding='utf-8') for phrase in phrases: assert phrase in profile, (name, phrase) rules = Path('RULES.md').read_text(encoding='utf-8') rules_index = Path('docs/rules/000-README.md').read_text(encoding='utf-8') architecture = Path('docs/architecture/003-RULE_PROFILE_MODEL.md').read_text(encoding='utf-8') tauri = Path('docs/rules/710-TAURI.md').read_text(encoding='utf-8') plan = Path('docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md').read_text(encoding='utf-8') roadmap = Path('ROADMAP.md').read_text(encoding='utf-8') for owner in ('530-TYPESCRIPT.md', '540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md', '550-VITE.md', '560-CSS_SASS.md'): assert owner in rules assert owner in rules_index for phrase in ( '530 — TypeScript', '540 — JavaScript package ecosystem', '550 — Vite', '560 — CSS / Sass', "Un frontend minimal peut n'en sélectionner qu'une partie.", ): assert phrase in architecture, phrase for phrase in ( 'TypeScript et Vite sont fortement recommandés mais restent des `SHOULD`', 'Sass est également fortement recommandé', 'profils `530`, `550` et `560`', ): assert phrase in tauri, phrase for phrase in ( 'Décisions de revue après `alpha.1`', '**TypeScript** : fortement recommandé', '**Vite** : fortement recommandé', '**Sass** : fortement recommandé', '`@use` / `@forward`', '| TypeScript pour les frontends durables | `ADOPT`', '| npm comme package manager concret | `KEEP-LOCAL`', '| commandes/génération WASM dans les scripts | `DEFER`', 'Statut opérateur : **FAIL**.', "### alpha.2.fix.1 — correction de la gate d'ownership Web", ): assert phrase in plan, phrase assert '0.1.8' not in roadmap assert 'skeleton Tauri avant owners Web suffisants' in roadmap print('0.1.1 alpha.2.fix.1 ownership gate: clean (alpha.2 FAIL preserved, 530/540/550/560 reconfirmed, Python literals safe)') PYGATE 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 git diff --check git add VERSION docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md \ deltas/0.1.1/alpha.2.fix.1.md git diff --cached --check git status --short ``` Le scope indexé attendu avant ajout du history du fix est exactement : ```text M VERSION A deltas/0.1.1/alpha.2.fix.1.md M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md ``` ## Revue opérateur complémentaire Confirmer que : - le `FAIL` de `alpha.2` est conservé historiquement ; - `deltas/0.1.1/alpha.2.md` n'est pas réécrit ; - `RULES.md`, `docs/000-README.md`, `docs/architecture/003-RULE_PROFILE_MODEL.md`, `docs/rules/000-README.md` et `docs/rules/710-TAURI.md` ne sont pas modifiés par le fix ; - les profils `530-TYPESCRIPT.md`, `540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md`, `550-VITE.md` et `560-CSS_SASS.md` ne sont pas modifiés par le fix ; - aucun contenu prévu pour `alpha.3` n'est absorbé dans le correctif. ## Transition ### PASS Produire `history/0.1.1/alpha.2.fix.1.md`, l'appliquer puis committer/pousser le fix. Reprendre ensuite la trajectoire normale avec `0.1.1-alpha.3`, consacré à TypeScript et à l'écosystème de package. ### FAIL Consigner le diagnostic réel dans `history/0.1.1/alpha.2.fix.1.md` et rester dans `alpha.2.fix.M`. Le scope MUST rester limité à la correction de la gate d'ownership Web tant qu'aucun défaut plus large ne justifie un REPLAN.