8.4 KiB
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 :
0.1.1-alpha.3.fix.2
Version après application :
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 :
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, 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 :
VERSION
docs/000-README.md
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
docs/rules/550-VITE.md
ADD :
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 :
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 :
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, jamaisMUSTuniversel ; - aucun package manager n'est imposé ;
- aucun port, host,
base, alias ou plugin n'est transformé en valeur universelle ; - aucun
vite.config.tsartificiellement générique n'est ajouté ; - cache et outputs sont classifiés comme générés et hors Git ;
emptyOutDirne peut viser qu'un output dédié ;previewn'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.