9.8 KiB
Delta 0.1.1-alpha.3 — TypeScript et écosystème de package
Baseline et version
Baseline attendue : commit opérateur de 0.1.1-alpha.2.fix.1, réalisé après application de history/0.1.1/alpha.2.fix.1.md avec statut PASS.
Le hash de ce commit n'est pas anticipé.
Version avant application :
0.1.1-alpha.2.fix.1
Version après application :
0.1.1-alpha.3
Objet
Détailler les owners 530 TypeScript et 540 JavaScript package ecosystem, puis fournir une baseline minimale réutilisable pour une application Web TypeScript privée.
La tranche définit :
- une baseline TypeScript stricte et indépendante du bundler ;
- le script canonique
typecheck; - la responsabilité de
package.jsonet de la sélection explicite du package manager ; - une politique de lockfile fondée sur le rôle du package et la reproductibilité ;
- une paire minimale
package.json+tsconfig.jsonsans version TypeScript, package manager, Vite, Sass, framework UI, host ou WASM imposés.
Vite reste réservé à alpha.4. CSS/Sass et la validation frontend réconciliée restent réservés à alpha.5.
Scope
REPLACE :
VERSION
docs/000-README.md
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
docs/rules/530-TYPESCRIPT.md
docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
ADD :
deltas/0.1.1/alpha.3.md
docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md
templates/web-typescript/package.json
templates/web-typescript/tsconfig.json
DELETE : aucun.
RULES.md, ROADMAP.md, CHANGELOG.md, les profils 550, 560, 710, les skeletons, scripts Python, tests et matrices de validation restent inchangés.
Aucun history/0.1.1/alpha.3.md n'est anticipé.
Décisions TypeScript
La baseline générique contrôlée active :
strict
noEmit
noUnusedLocals
noUnusedParameters
noFallthroughCasesInSwitch
Elle n'impose pas :
target
module
moduleResolution
lib
types
jsx
include/exclude
aliases
Vite
WASM
Tauri
Ces choix dépendent du runtime, du host, du bundler ou du layout réel.
Le script typecheck SHOULD exposer la vérification TypeScript indépendamment du bundler. Le template utilise :
tsc --noEmit
Le package manager reste responsable de l'invocation réelle de ce script.
Décisions package manager / manifest
PGR ne choisit toujours pas npm, pnpm, yarn, Bun ou un autre outil par défaut.
Le projet MUST rendre son choix de package manager explicite dans un owner local approprié. Le champ packageManager de package.json MAY être utilisé lorsque la toolchain le permet, mais PGR ne peut pas y inscrire une version fictive dans son template générique.
Pour une application non publiée, private: true SHOULD être utilisé.
Le template package.json n'invente ni version de package, ni dépendance, ni champ de publication. Il fournit seulement un nom d'exemple, private: true et le script typecheck.
Politique de lockfile
La politique PGR est désormais :
application privée / déployable
-> lockfile SHOULD être versionné
bibliothèque publiée
-> lockfile MAY être versionné pour dev/CI
mais le manifest reste le contrat consommateur
template / fixture sans résolution réelle
-> lockfile MAY être absent
Un package SHOULD NOT conserver plusieurs lockfiles concurrents sauf migration temporaire explicitement documentée.
Lorsqu'un lockfile est versionné, CI SHOULD utiliser le mode gelé/immutable/clean-install équivalent du package manager choisi.
La politique historique Games sans lockfile n'est donc ni réécrite ni qualifiée rétroactivement de défaut. Son adoption 0.1.5 décidera package par package entre ADOPT et OVERRIDE.
Templates
Les deux fichiers copiables sont :
templates/web-typescript/package.json
templates/web-typescript/tsconfig.json
Ils sont volontairement du JSON strict, donc ne portent pas de commentaires internes file/version.
Leur contrat et leurs étapes d'adaptation sont documentés dans :
docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md
La paire ne constitue pas encore un skeleton frontend.
Validation opérateur
Après application du history PASS, commit/push de alpha.2.fix.1, puis application du présent delta :
test "$(cat VERSION)" = '0.1.1-alpha.3'
git cat-file -e HEAD:history/0.1.1/alpha.2.fix.1.md
test -f history/0.1.1/alpha.2.fix.1.md
test -f deltas/0.1.1/alpha.3.md
test ! -e history/0.1.1/alpha.3.md
grep -A2 '^## Statut$' history/0.1.1/alpha.2.fix.1.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 26 -->' docs/000-README.md
grep -Fx '<!-- version: 4 -->' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
grep -Fx '<!-- version: 2 -->' docs/rules/530-TYPESCRIPT.md
grep -Fx '<!-- version: 2 -->' docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
grep -Fx '<!-- version: 1 -->' 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.2.fix.1.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+PASS\s', history)
typescript = Path('docs/rules/530-TYPESCRIPT.md').read_text(encoding='utf-8')
for phrase in (
'strict = true',
'noEmit = true',
'noUnusedLocals = true',
'noUnusedParameters = true',
'noFallthroughCasesInSwitch = true',
'typecheck',
'tsc --noEmit',
'MUST NOT les figer',
):
assert phrase in typescript, phrase
packages = Path('docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md').read_text(encoding='utf-8')
for phrase in (
'private: true',
'MUST sélectionner explicitement son package manager',
'typecheck',
'SHOULD** être versionné',
'SHOULD NOT** conserver simultanément plusieurs lockfiles',
'MUST NOT transformer `npm ci` en commande universelle',
'`ADOPT` cette recommandation',
'`OVERRIDE`',
):
assert phrase in packages, phrase
package = json.loads(Path('templates/web-typescript/package.json').read_text(encoding='utf-8'))
tsconfig = json.loads(Path('templates/web-typescript/tsconfig.json').read_text(encoding='utf-8'))
assert package == {
'name': 'project-web',
'private': True,
'scripts': {'typecheck': 'tsc --noEmit'},
}
assert tsconfig == {
'compilerOptions': {
'strict': True,
'noEmit': True,
'noUnusedLocals': True,
'noUnusedParameters': True,
'noFallthroughCasesInSwitch': True,
}
}
guide = Path('docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md').read_text(encoding='utf-8')
for phrase in (
'package manager concret',
'version TypeScript',
'target ECMAScript',
'Vite ou autre bundler',
"n'acceptent pas un header commentaire PGR",
'npm run typecheck',
'pnpm typecheck',
'yarn typecheck',
):
assert phrase in guide, phrase
plan = Path('docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md').read_text(encoding='utf-8')
for phrase in (
'Statut opérateur : **PASS**.',
'application privée ou déployable `SHOULD` versionner le lockfile',
"`DEFER` jusqu'à l'adoption `0.1.5`",
'script canonique `typecheck`',
'Vite reste réservé à `alpha.4`',
):
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 TypeScript/package audit: clean (strict typecheck, package-manager neutral, role-based lockfile policy, 2 JSON templates parsed)')
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/000-README.md \
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md \
docs/rules/530-TYPESCRIPT.md docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md \
docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md \
templates/web-typescript/package.json templates/web-typescript/tsconfig.json \
deltas/0.1.1/alpha.3.md
git diff --cached --check
git status --short
Le scope indexé attendu avant ajout du history est exactement :
M VERSION
A deltas/0.1.1/alpha.3.md
M docs/000-README.md
M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
M docs/rules/530-TYPESCRIPT.md
M docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
A docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md
A templates/web-typescript/package.json
A templates/web-typescript/tsconfig.json
Revue opérateur complémentaire
Confirmer que :
- la baseline TypeScript générique ne fige aucun choix propre à Vite, Node, WASM ou Tauri ;
typecheckreste une preuve indépendante et ne devient pas une responsabilité du bundler ;- PGR ne sélectionne aucun package manager universel ;
- le lockfile est recommandé pour les applications privées/déployables sans imposer la même politique aux bibliothèques publiées ;
- le template
package.jsonn'invente aucune version de dépendance ou de package manager ; - les deux JSON restent des templates minimaux, pas un skeleton frontend ;
- aucun contenu de
alpha.4oualpha.5n'est absorbé.
Transition
PASS
Produire history/0.1.1/alpha.3.md, l'appliquer puis committer/pousser la tranche. Préparer ensuite 0.1.1-alpha.4 consacré à Vite, au dev server et aux outputs.
FAIL
Consigner le diagnostic réel dans history/0.1.1/alpha.3.md et rester dans alpha.3.fix.M sauf REPLAN explicitement justifié.