diff --git a/VERSION b/VERSION index e374f3c..d55c7e5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.1-alpha.2 +0.1.1-alpha.2.fix.1 diff --git a/deltas/0.1.1/alpha.2.fix.1.md b/deltas/0.1.1/alpha.2.fix.1.md new file mode 100644 index 0000000..6d69a00 --- /dev/null +++ b/deltas/0.1.1/alpha.2.fix.1.md @@ -0,0 +1,204 @@ + + + +# 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. diff --git a/docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md b/docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md index 2dc4ea8..3855170 100644 --- a/docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md +++ b/docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md @@ -1,5 +1,5 @@ - + # Plan 0.1.1 — fondation frontend Web contrôlée @@ -336,9 +336,17 @@ Auditer `v0.1.0`, `publish.001`, Games `0.3.6`, les décisions Tauri/horizon, pu ### alpha.2 — frontières d'ownership Web -Décider et matérialiser la composition minimale des owners nécessaires à TypeScript, package manager/manifest, Vite et styles. La décision retenue est `530 / 540 / 550 / 560`, quatre profils indépendants de la famille `500`. +Statut opérateur : **FAIL**. -La tranche inscrit les recommandations `SHOULD` TypeScript/Vite/Sass sans les transformer en `MUST`, puis classifie explicitement les choix Games selon `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` sans migrer Games. Les détails de configuration restent dans les tranches spécialisées suivantes. +La tranche a matérialisé les quatre owners `530 / 540 / 550 / 560`, leurs frontières indépendantes et les recommandations `SHOULD` TypeScript/Vite/Sass. Les `48` tests et les trois audits Markdown sont restés propres et le scope Git observé correspond au delta. + +La gate spécifique n'a toutefois pas pu atteindre son message final : le littéral Python `'Le profil s'applique uniquement lorsqu'un projet utilise réellement Vite.'` utilise des quotes simples autour d'un texte contenant l'apostrophe de `s'applique`, provoquant un `SyntaxError`. Aucun défaut normatif des profils livrés n'est établi. + +### alpha.2.fix.1 — correction de la gate d'ownership Web + +Corriger uniquement la syntaxe de validation de `alpha.2`, sans modifier les profils `530/540/550/560`, `710-TAURI.md`, les index ou l'architecture déjà livrés. + +La gate corrigée doit reconfirmer le `FAIL` historique de `alpha.2`, les quatre owners indépendants, les recommandations `SHOULD`, la classification Games, le maintien du `DEFER` Tauri, puis rejouer les tests et audits documentaires. ### alpha.3 — TypeScript et écosystème de package diff --git a/history/0.1.1/alpha.2.fix.1.md b/history/0.1.1/alpha.2.fix.1.md new file mode 100644 index 0000000..5325ec0 --- /dev/null +++ b/history/0.1.1/alpha.2.fix.1.md @@ -0,0 +1,108 @@ + + + +# History 0.1.1-alpha.2.fix.1 — correction de la gate d'ownership Web + +## Statut + +PASS + +La gate opérateur de `0.1.1-alpha.2.fix.1` exécutée le `2026-09-27` est propre. + +Le correctif reste strictement limité au défaut de syntaxe de la gate de `alpha.2`. Aucun profil Web, index normatif, document d'architecture ou profil Tauri n'a été réécrit par le fix. + +## Baseline opérateur + +La tranche `0.1.1-alpha.2` et son history `FAIL` ont été commités puis poussés avant application du fix : + +```text +commit dc63b54 +message 0.1.1-alpha.2 +push origin/master PASS +``` + +Le history `FAIL` reste présent dans `HEAD` et le delta historique `alpha.2.md` est conservé. + +## Contrôles d'identité + +Les contrôles opérateur ont confirmé : + +```text +VERSION 0.1.1-alpha.2.fix.1 +history/0.1.1/alpha.2.md présent dans HEAD +deltas/0.1.1/alpha.2.md présent +deltas/0.1.1/alpha.2.fix.1.md présent +history/0.1.1/alpha.2.fix.1.md absent pendant la gate +history alpha.2 FAIL +RULES.md version 13 +docs/000-README.md version 25 +docs/architecture/003-RULE_PROFILE_MODEL.md version 6 +docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md version 3 +docs/rules/000-README.md version 15 +docs/rules/710-TAURI.md version 6 +``` + +## Gate spécifique + +La gate Python corrigée atteint son message final : + +```text +0.1.1 alpha.2.fix.1 ownership gate: clean (alpha.2 FAIL preserved, 530/540/550/560 reconfirmed, Python literals safe) +``` + +Elle reconfirme notamment : + +- le statut `FAIL` historique de `alpha.2` ; +- les owners indépendants `530 TypeScript`, `540 JavaScript package ecosystem`, `550 Vite` et `560 CSS / Sass` ; +- les recommandations `SHOULD` TypeScript, Vite et Sass ; +- la classification Games préparatoire ; +- le maintien de `0.1.8` hors roadmap ; +- le maintien du `DEFER` du skeleton Tauri. + +## Tests Python + +La suite complète a affiché : + +```text +Ran 48 tests in 0.711s + +OK +``` + +Soit `48/48` tests `PASS`. + +## Audits Markdown + +Les audits ont affiché : + +```text +Markdown header audit: clean (208 file(s)) +Markdown table audit: clean (9 table(s), 208 file(s)) +Markdown link audit: clean (219 local link(s), 208 file(s)) +``` + +## Hygiène Git et scope + +`git diff --check` et `git diff --cached --check` n'ont produit aucune erreur. + +Le scope indexé observé 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 +``` + +Aucun contenu prévu pour `alpha.3` n'a été absorbé dans le fix. + +## Décision + +`0.1.1-alpha.2.fix.1` est validée `PASS`. + +La trajectoire normale reprend avec : + +```text +0.1.1-alpha.3 +``` + +Cette tranche est consacrée à TypeScript et à l'écosystème de package : `tsconfig`, `package.json`, scripts, sélection explicite du package manager et politique de lockfile. Vite reste réservé à `alpha.4` et CSS/Sass à `alpha.5`.