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

6.9 KiB

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 :

0.1.1-alpha.3.fix.1

Version après application :

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 :

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

VERSION
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md

ADD :

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 :

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 :

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.