Files
pgr/deltas/0.1.1/alpha.3.fix.2.md

200 lines
6.9 KiB
Markdown

<!-- file: deltas/0.1.1/alpha.3.fix.2.md -->
<!-- version: 1 -->
# 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 '<!-- version: 6 -->' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
grep -Fx '<!-- version: 3 -->' docs/rules/530-TYPESCRIPT.md
grep -Fx '<!-- version: 3 -->' docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
grep -Fx '<!-- version: 2 -->' 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/<nom>',
'`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/<nom>',
'`@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": "<si Node est réellement utilisé>"',
'"@types/bootstrap": "<si les API JavaScript Bootstrap sont réellement utilisées et nécessitent des types externes>"',
"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] == '<!-- version: 1 -->'
assert Path('docs/rules/560-CSS_SASS.md').read_text(encoding='utf-8').splitlines()[1] == '<!-- version: 1 -->'
assert Path('docs/rules/710-TAURI.md').read_text(encoding='utf-8').splitlines()[1] == '<!-- version: 6 -->'
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.