0.1.1-alpha.3

This commit is contained in:
2026-09-27 10:56:05 +02:00
parent e351f57be4
commit 5033547534
10 changed files with 650 additions and 21 deletions

310
deltas/0.1.1/alpha.3.md Normal file
View File

@@ -0,0 +1,310 @@
<!-- file: deltas/0.1.1/alpha.3.md -->
<!-- version: 1 -->
# 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 :
```text
0.1.1-alpha.2.fix.1
```
Version après application :
```text
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.json` et 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.json` sans 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 :
```text
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 :
```text
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 :
```text
strict
noEmit
noUnusedLocals
noUnusedParameters
noFallthroughCasesInSwitch
```
Elle n'impose pas :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```bash
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 :
```text
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 ;
- `typecheck` reste 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.json` n'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.4` ou `alpha.5` n'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é.