0.1.1-alpha.3
This commit is contained in:
310
deltas/0.1.1/alpha.3.md
Normal file
310
deltas/0.1.1/alpha.3.md
Normal 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é.
|
||||
Reference in New Issue
Block a user