227 lines
8.4 KiB
Markdown
227 lines
8.4 KiB
Markdown
<!-- file: deltas/0.1.1/alpha.4.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.1-alpha.4 — Vite, dev server et outputs
|
|
|
|
## Baseline et version
|
|
|
|
Baseline attendue : commit opérateur de `0.1.1-alpha.3.fix.2`, réalisé après application de `history/0.1.1/alpha.3.fix.2.md` avec statut `PASS`.
|
|
|
|
Le hash de ce commit n'est pas anticipé.
|
|
|
|
Version avant application :
|
|
|
|
```text
|
|
0.1.1-alpha.3.fix.2
|
|
```
|
|
|
|
Version après application :
|
|
|
|
```text
|
|
0.1.1-alpha.4
|
|
```
|
|
|
|
## Objet
|
|
|
|
Compléter l'owner `550-VITE.md` avec un contrat générique de dev server, cache, outputs et assets, puis documenter l'adaptation d'un projet Vite sans inventer un `vite.config.ts` universel.
|
|
|
|
La tranche conserve Vite comme recommandation `SHOULD`, pas comme obligation.
|
|
|
|
Elle ne modifie pas :
|
|
|
|
- la baseline TypeScript/package de `alpha.3` ;
|
|
- les règles de déclarations `@types/*` ;
|
|
- le profil CSS/Sass réservé à `alpha.5` ;
|
|
- le profil Tauri ;
|
|
- WASM, backend ou deployment/operations.
|
|
|
|
## Décisions matérialisées
|
|
|
|
Le contrat Vite distingue désormais explicitement :
|
|
|
|
```text
|
|
sources versionnées
|
|
cache Vite reproductible
|
|
outputs build générés
|
|
assets sources
|
|
assets copiés/transformés
|
|
```
|
|
|
|
Le cache et les outputs `SHOULD` rester hors Git et `SHOULD` être externalisés hors de l'arborescence source lorsqu'un emplacement de build externe est raisonnablement disponible.
|
|
|
|
`build.emptyOutDir = true` n'est acceptable que sur un répertoire dédié dont Vite possède entièrement le contenu généré.
|
|
|
|
Le dev server reste local/loopback par défaut. L'exposition réseau est une décision explicite. `server.allowedHosts = true` et `server.cors = true` ne sont pas des défauts PGR.
|
|
|
|
Lorsqu'une intégration dépend d'un port déterministe, le couple `server.port` + `server.strictPort = true` est recommandé. Les ports eux-mêmes restent locaux.
|
|
|
|
`vite preview` est classifié comme prévisualisation/smoke local du build, jamais comme serveur de production.
|
|
|
|
## Pas de `vite.config.ts` générique artificiel
|
|
|
|
La tranche ajoute [`docs/templates/009-WEB_VITE.md`](../../docs/templates/009-WEB_VITE.md), mais aucun fichier copiable `templates/web-vite/vite.config.ts`.
|
|
|
|
Cette absence est volontaire : le corpus prouve l'owner et les responsabilités, mais pas une valeur universelle pour `root`, `base`, `cacheDir`, `outDir`, ports, aliases ou plugins.
|
|
|
|
Un template exécutable pourra être ajouté ultérieurement si une configuration minimale réellement neutre est démontrée. PGR ne crée pas un fichier vide ou rempli de placeholders uniquement pour satisfaire un catalogue.
|
|
|
|
## Scope
|
|
|
|
REPLACE :
|
|
|
|
```text
|
|
VERSION
|
|
docs/000-README.md
|
|
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
|
|
docs/rules/550-VITE.md
|
|
```
|
|
|
|
ADD :
|
|
|
|
```text
|
|
docs/templates/009-WEB_VITE.md
|
|
deltas/0.1.1/alpha.4.md
|
|
```
|
|
|
|
DELETE : aucun.
|
|
|
|
## Validation opérateur
|
|
|
|
Après application du history `PASS`, commit/push de `alpha.3.fix.2`, puis application du présent delta :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.1.1-alpha.4'
|
|
git cat-file -e HEAD:history/0.1.1/alpha.3.fix.2.md
|
|
test -f history/0.1.1/alpha.3.fix.2.md
|
|
test -f deltas/0.1.1/alpha.4.md
|
|
test ! -e history/0.1.1/alpha.4.md
|
|
|
|
grep -A2 '^## Statut$' history/0.1.1/alpha.3.fix.2.md | grep -Fx 'PASS'
|
|
grep -Fx '<!-- version: 27 -->' docs/000-README.md
|
|
grep -Fx '<!-- version: 7 -->' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
|
|
grep -Fx '<!-- version: 2 -->' docs/rules/550-VITE.md
|
|
grep -Fx '<!-- version: 1 -->' docs/templates/009-WEB_VITE.md
|
|
|
|
python3 -B - <<'PYGATE'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
history = Path("history/0.1.1/alpha.3.fix.2.md").read_text(encoding="utf-8")
|
|
assert re.search(r"## Statut\s+PASS\s", history)
|
|
|
|
vite = Path("docs/rules/550-VITE.md").read_text(encoding="utf-8")
|
|
for phrase in (
|
|
"Vite **SHOULD** être le build tool/dev server privilégié",
|
|
"PGR ne fournit pas de `vite.config.ts` universel",
|
|
"`cacheDir` **SHOULD** être externalisé",
|
|
"Le contenu de `build.outDir` est un output généré",
|
|
"`build.emptyOutDir = true`",
|
|
"`publicDir` est une capacité optionnelle",
|
|
"PGR MUST NOT imposer le nom `frontend/`",
|
|
"PGR MUST NOT imposer `./`, `/` ou un chemin de sous-répertoire universel",
|
|
"Le dev server **SHOULD** rester limité à la machine locale/loopback",
|
|
"`server.port` avec `server.strictPort = true`",
|
|
"`server.allowedHosts = true` et `server.cors = true` **SHOULD NOT**",
|
|
"Il MUST NOT être présenté comme serveur de production",
|
|
"le build de production via le package manager choisi **SHOULD** faire partie de la gate",
|
|
):
|
|
assert phrase in vite, phrase
|
|
|
|
guide = Path("docs/templates/009-WEB_VITE.md").read_text(encoding="utf-8")
|
|
for phrase in (
|
|
"ne fournit volontairement pas de `vite.config.ts` copiable universel",
|
|
'"dev": "vite"',
|
|
'"build": "vite build"',
|
|
'"preview": "vite preview"',
|
|
"typecheck -> tsc --noEmit",
|
|
"build -> vite build",
|
|
"Le nom `frontend/` observé dans Games est une convention locale",
|
|
"PGR ne copie donc pas automatiquement `base: \"./\"`",
|
|
"Le cache Vite est reproductible",
|
|
"`build.outDir` contient des artefacts générés",
|
|
"server.allowedHosts = true",
|
|
"server.cors = true",
|
|
"server.strictPort true",
|
|
"Il ne constitue pas un serveur de production PGR",
|
|
"PGR ne livre pas encore de `vite.config.ts` exécutable générique",
|
|
):
|
|
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 (
|
|
"### alpha.3.fix.2 — correction de la gate des déclarations de types",
|
|
"Statut opérateur : **PASS**.",
|
|
"### alpha.4 — Vite, dev server et outputs",
|
|
"sans créer un `vite.config.ts` universel artificiel",
|
|
"TypeScript reste validé séparément ; CSS/Sass reste réservé à `alpha.5`.",
|
|
):
|
|
assert phrase in plan, phrase
|
|
|
|
index = Path("docs/000-README.md").read_text(encoding="utf-8")
|
|
assert "templates/009-WEB_VITE.md" in index
|
|
|
|
assert not Path("templates/web-vite/vite.config.ts").exists()
|
|
assert Path("docs/rules/530-TYPESCRIPT.md").read_text(encoding="utf-8").splitlines()[1] == "<!-- version: 3 -->"
|
|
assert Path("docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md").read_text(encoding="utf-8").splitlines()[1] == "<!-- version: 3 -->"
|
|
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.4 Vite contract audit: clean (outputs/cache explicit, dev server bounded, no fake universal config, alpha.5 untouched)")
|
|
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/550-VITE.md docs/templates/009-WEB_VITE.md \
|
|
deltas/0.1.1/alpha.4.md
|
|
|
|
git diff --cached --check
|
|
git status --short
|
|
```
|
|
|
|
Le scope indexé attendu avant ajout du history de `alpha.4` est exactement :
|
|
|
|
```text
|
|
M VERSION
|
|
A deltas/0.1.1/alpha.4.md
|
|
M docs/000-README.md
|
|
M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
|
|
M docs/rules/550-VITE.md
|
|
A docs/templates/009-WEB_VITE.md
|
|
```
|
|
|
|
## Revue opérateur complémentaire
|
|
|
|
Confirmer que :
|
|
|
|
- Vite reste `SHOULD`, jamais `MUST` universel ;
|
|
- aucun package manager n'est imposé ;
|
|
- aucun port, host, `base`, alias ou plugin n'est transformé en valeur universelle ;
|
|
- aucun `vite.config.ts` artificiellement générique n'est ajouté ;
|
|
- cache et outputs sont classifiés comme générés et hors Git ;
|
|
- `emptyOutDir` ne peut viser qu'un output dédié ;
|
|
- `preview` n'est pas présenté comme serveur de production ;
|
|
- TypeScript/package ne sont pas réouverts ;
|
|
- CSS/Sass reste réservé à `alpha.5` ;
|
|
- Tauri/WASM/deployment restent hors scope.
|
|
|
|
## Transition
|
|
|
|
### PASS
|
|
|
|
Produire `history/0.1.1/alpha.4.md`, l'appliquer puis committer/pousser `alpha.4`. Continuer avec `0.1.1-alpha.5`, consacré à CSS/Sass et à la validation frontend indépendante du host.
|
|
|
|
### FAIL
|
|
|
|
Consigner le diagnostic réel dans `history/0.1.1/alpha.4.md`, puis produire `alpha.4.fix.N` ou effectuer un REPLAN si le défaut révèle une frontière d'ownership incorrecte. Ne pas absorber `alpha.5` dans un correctif Vite.
|