diff --git a/VERSION b/VERSION index 89424a3..ae7ab7f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.1-alpha.3.fix.1 +0.1.1-alpha.3.fix.2 diff --git a/deltas/0.1.1/alpha.3.fix.2.md b/deltas/0.1.1/alpha.3.fix.2.md new file mode 100644 index 0000000..c9474d3 --- /dev/null +++ b/deltas/0.1.1/alpha.3.fix.2.md @@ -0,0 +1,199 @@ + + + +# Delta 0.1.1-alpha.3.fix.2 — correction de la gate des déclarations de types + +## Baseline et version + +Baseline attendue : commit opérateur de `0.1.1-alpha.3.fix.1`, réalisé après application de `history/0.1.1/alpha.3.fix.1.md` avec statut `FAIL`. + +Le hash de ce commit n'est pas anticipé. + +Version avant application : + +```text +0.1.1-alpha.3.fix.1 +``` + +Version après application : + +```text +0.1.1-alpha.3.fix.2 +``` + +## Objet + +Corriger uniquement la syntaxe défectueuse de la gate opérateur de `alpha.3.fix.1`. + +Les règles et guides livrés par `alpha.3.fix.1` restent inchangés. Le delta historique `deltas/0.1.1/alpha.3.fix.1.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 `l'expérience` : + +```python +'qualité TypeScript et à l'expérience IDE' +``` + +Le fix utilise des littéraux syntaxiquement sûrs dans la nouvelle gate et généralise cette précaution aux assertions contenant des apostrophes, sans modifier leur sens. + +## Scope + +REPLACE : + +```text +VERSION +docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md +``` + +ADD : + +```text +deltas/0.1.1/alpha.3.fix.2.md +``` + +DELETE : aucun. + +Aucune règle normative, aucun 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.3.fix.1`, puis application du présent delta : + +```bash +test "$(cat VERSION)" = '0.1.1-alpha.3.fix.2' +git cat-file -e HEAD:history/0.1.1/alpha.3.fix.1.md +test -f history/0.1.1/alpha.3.fix.1.md +test -f deltas/0.1.1/alpha.3.fix.1.md +test -f deltas/0.1.1/alpha.3.fix.2.md +test ! -e history/0.1.1/alpha.3.fix.2.md + +grep -A2 '^## Statut$' history/0.1.1/alpha.3.fix.1.md | grep -Fx 'FAIL' +grep -Fx '' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md +grep -Fx '' docs/rules/530-TYPESCRIPT.md +grep -Fx '' docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md +grep -Fx '' docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md + +python3 -B - <<'PYGATE' +from pathlib import Path +import json +import re + +history = Path('history/0.1.1/alpha.3.fix.1.md').read_text(encoding='utf-8') +assert re.search(r'## Statut\s+FAIL\s', history) + +typescript = Path('docs/rules/530-TYPESCRIPT.md').read_text(encoding='utf-8') +for phrase in ( + 'Déclarations de types externes et intégration IDE', + 'fournit déjà ses propres fichiers de déclaration TypeScript', + '@types/', + '`devDependencies`', + '`@types/node`', + '`@types/bootstrap`', + 'Un projet qui ne consomme que le CSS/Sass de Bootstrap', + '`compilerOptions.types`', + 'bibliothèque publiée', +): + assert phrase in typescript, phrase + +packages = Path('docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md').read_text(encoding='utf-8') +for phrase in ( + 'Dépendances de développement et packages de déclarations', + 'la dépendance runtime fournit déjà ses propres types', + '@types/', + '`@types/node` est pertinent', + '`@types/bootstrap` est pertinent', + 'Le template PGR générique conserve volontairement un `package.json` sans `devDependencies` préremplies', + 'Pour une bibliothèque publiée', +): + assert phrase in packages, phrase + +guide = Path('docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md').read_text(encoding='utf-8') +for phrase in ( + '`devDependencies` et déclarations de types', + 'fournit-il déjà ses propres types ?', + 'ne pas ajouter un @types redondant', + '"@types/node": ""', + '"@types/bootstrap": ""', + "qualité TypeScript et à l'expérience IDE", +): + assert phrase in guide, phrase + +package = json.loads(Path('templates/web-typescript/package.json').read_text(encoding='utf-8')) +assert package == { + 'name': 'project-web', + 'private': True, + 'scripts': {'typecheck': 'tsc --noEmit'}, +} + +tsconfig = json.loads(Path('templates/web-typescript/tsconfig.json').read_text(encoding='utf-8')) +assert tsconfig == { + 'compilerOptions': { + 'strict': True, + 'noEmit': True, + 'noUnusedLocals': True, + 'noUnusedParameters': True, + 'noFallthroughCasesInSwitch': True, + } +} + +plan = Path('docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md').read_text(encoding='utf-8') +for phrase in ( + 'Statut opérateur : **FAIL**.', + "### alpha.3.fix.2 — correction de la gate des déclarations de types", + 'types embarqués → @types si nécessaire', + 'Aucun défaut normatif du correctif', + 'assertions contenant des apostrophes', +): + assert phrase in plan, phrase + +assert Path('docs/rules/550-VITE.md').read_text(encoding='utf-8').splitlines()[1] == '' +assert Path('docs/rules/560-CSS_SASS.md').read_text(encoding='utf-8').splitlines()[1] == '' +assert Path('docs/rules/710-TAURI.md').read_text(encoding='utf-8').splitlines()[1] == '' + +print('0.1.1 alpha.3.fix.2 type declarations gate: clean (alpha.3.fix.1 FAIL preserved, type declarations 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.3.fix.2.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.3.fix.2.md +M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md +``` + +## Revue opérateur complémentaire + +Confirmer que : + +- le `FAIL` de `alpha.3.fix.1` est conservé historiquement ; +- `deltas/0.1.1/alpha.3.fix.1.md` n'est pas réécrit ; +- `docs/rules/530-TYPESCRIPT.md`, `docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md` et `docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md` ne sont pas modifiés par le fix ; +- `templates/web-typescript/package.json` et `templates/web-typescript/tsconfig.json` ne sont pas modifiés par le fix ; +- aucun contenu Vite, CSS/Sass, WASM ou Tauri n'est absorbé dans le correctif. + +## Transition + +### PASS + +Produire `history/0.1.1/alpha.3.fix.2.md`, l'appliquer puis committer/pousser le fix. Reprendre ensuite la trajectoire normale avec `0.1.1-alpha.4`, consacré à Vite, au dev server, aux caches et aux outputs de production. + +### FAIL + +Consigner le diagnostic réel dans `history/0.1.1/alpha.3.fix.2.md` et rester dans `alpha.3.fix.M`. Le scope MUST rester limité à la correction de la gate 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 dac2a63..7448c64 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 @@ -377,9 +377,17 @@ La revue opérateur après PASS relève toutefois une précision appartenant exa ### alpha.3.fix.1 — déclarations de types externes -Préciser la découverte et la classification des packages de déclarations TypeScript sans modifier le template générique avec des dépendances fictives. +Statut opérateur : **FAIL**. -Le correctif doit imposer l'ordre de décision `types embarqués → @types si nécessaire`, recommander `devDependencies` pour les déclarations purement de développement d'une application privée, distinguer `@types/node` et `@types/bootstrap` selon leur applicabilité réelle, conserver la nuance des bibliothèques publiées et maintenir Vite/CSS/Sass hors scope. +Le correctif a livré la règle `types embarqués → @types si nécessaire`, la classification conditionnelle de `@types/node` / `@types/bootstrap`, la distinction application privée / bibliothèque publiée et l'intégration IDE attendue. Les `48/48` tests et les trois audits Markdown sont propres, et le scope Git correspond au delta. + +La gate spécifique n'a toutefois pas atteint son message final : le littéral Python `'qualité TypeScript et à l'expérience IDE'` utilise des quotes simples autour d'un texte contenant l'apostrophe de `l'expérience`, provoquant un `SyntaxError`. Aucun défaut normatif du correctif n'est établi. + +### alpha.3.fix.2 — correction de la gate des déclarations de types + +Corriger uniquement la syntaxe de validation de `alpha.3.fix.1`, sans modifier les règles TypeScript/package, le guide `008-WEB_TYPESCRIPT_PACKAGE.md` ni les templates JSON. + +La gate corrigée doit reconfirmer le `FAIL` historique de `alpha.3.fix.1`, les règles de découverte des types externes et la séparation application/bibliothèque, puis rejouer les tests et audits documentaires. Toutes les assertions contenant des apostrophes doivent utiliser des littéraux Python syntaxiquement sûrs. ### alpha.4 — Vite, dev server et outputs diff --git a/history/0.1.1/alpha.3.fix.2.md b/history/0.1.1/alpha.3.fix.2.md new file mode 100644 index 0000000..5911b31 --- /dev/null +++ b/history/0.1.1/alpha.3.fix.2.md @@ -0,0 +1,106 @@ + + + +# History 0.1.1-alpha.3.fix.2 — correction de la gate des déclarations de types + +## Statut + +PASS + +La gate opérateur de `0.1.1-alpha.3.fix.2` exécutée le `2026-09-27` est propre. + +Le correctif ne modifie aucune règle TypeScript/package ni aucun template : il corrige uniquement la syntaxe de validation qui avait fait échouer `alpha.3.fix.1`, puis reconfirme le contenu déjà livré sur les déclarations de types externes. + +## Baseline opérateur + +`0.1.1-alpha.3.fix.1` a été clôturée avec son history `FAIL`, puis committée et poussée avant application de `alpha.3.fix.2` : + +```text +commit 889d9cb +message 0.1.1-alpha.3.fix.1 +push origin/master PASS +``` + +Le history `FAIL` de `alpha.3.fix.1` est présent dans `HEAD` avant la gate du fix. + +## Contrôles d'identité + +Les contrôles opérateur ont confirmé : + +```text +VERSION 0.1.1-alpha.3.fix.2 +history/0.1.1/alpha.3.fix.1.md présent dans HEAD +deltas/0.1.1/alpha.3.fix.1.md présent +deltas/0.1.1/alpha.3.fix.2.md présent +history/0.1.1/alpha.3.fix.2.md absent pendant la gate +history alpha.3.fix.1 FAIL +docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md version 6 +docs/rules/530-TYPESCRIPT.md version 3 +docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md version 3 +docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md version 2 +``` + +## Gate spécifique + +La gate corrigée atteint son message final : + +```text +0.1.1 alpha.3.fix.2 type declarations gate: clean (alpha.3.fix.1 FAIL preserved, type declarations reconfirmed, Python literals safe) +``` + +Elle reconfirme notamment : + +- le `FAIL` historique de `alpha.3.fix.1` ; +- la priorité donnée aux types embarqués par une dépendance avant tout `@types/*` externe ; +- le caractère conditionnel de `@types/node` et `@types/bootstrap` ; +- la distinction entre `devDependencies` d'une application privée et types requis par les consommateurs d'une bibliothèque publiée ; +- l'absence de modification des profils Vite, CSS/Sass et Tauri ; +- l'utilisation de littéraux Python syntaxiquement sûrs pour les assertions contenant des apostrophes. + +## Tests Python + +La suite complète a affiché : + +```text +Ran 48 tests in 0.716s + +OK +``` + +Soit `48/48` tests `PASS`. + +## Audits Markdown + +Les audits ont affiché : + +```text +Markdown header audit: clean (215 file(s)) +Markdown table audit: clean (9 table(s), 215 file(s)) +Markdown link audit: clean (228 local link(s), 215 file(s)) +``` + +## Hygiène Git et scope + +`git diff --check` et `git diff --cached --check` n'ont produit aucune erreur. + +Le scope indexé observé avant ajout du présent history est exactement : + +```text +M VERSION +A deltas/0.1.1/alpha.3.fix.2.md +M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md +``` + +Aucune règle normative, aucun template et aucun contenu Vite/CSS/Sass/Tauri n'a été modifié par le fix. + +## Résultat + +`0.1.1-alpha.3.fix.2` est validée `PASS`. + +La trajectoire normale reprend avec : + +```text +0.1.1-alpha.4 +``` + +Cette tranche est consacrée à Vite, au dev server, aux caches, aux outputs de production et au statut des assets, sans rouvrir TypeScript/package ni anticiper CSS/Sass.