12 KiB
Delta 0.1.1-alpha.5 — CSS/Sass, validation frontend et skeleton Web
Baseline et version
Baseline attendue : commit opérateur de 0.1.1-alpha.4, réalisé après application de history/0.1.1/alpha.4.md avec statut PASS.
Le hash de ce commit n'est pas anticipé.
Version avant application :
0.1.1-alpha.4
Version après application :
0.1.1-alpha.5
Objet
Compléter l'owner 560-CSS_SASS.md, définir une validation frontend réutilisable indépendante du host et matérialiser un skeleton Web uniquement parce que les owners 530/540/550/560 sont désormais suffisamment séparés et actionnables.
La tranche conserve les décisions suivantes :
- CSS reste valide sans Sass ;
- Sass reste optionnel mais recommandé (
SHOULD) lorsqu'il apporte une valeur réelle ; @use/@forwardsont préférés pour le nouveau Sass contrôlé ;@importreste une compatibilité possible pour les dépendances qui l'exigent encore ;- les sources CSS/Sass et leurs outputs générés sont distingués sans ambiguïté ;
- un package de styles est consommé via son entrypoint public/documenté plutôt que par un chemin interne arbitraire ;
- Bootstrap/Tailwind CSS/alternative restent des choix de projet ou skeleton, pas des obligations de
560; - la validation frontend est séparée de la validation du host ;
- le skeleton Web compose des owners existants et ne devient pas leur propriétaire.
Le DEFER Tauri n'est pas levé par cette tranche.
Validation frontend indépendante du host
docs/validation/005-WEB_FRONTEND_VALIDATION.md définit les couches de preuve réutilisables :
restore reproductible
TypeScript typecheck
styles si preuve distincte
build frontend de production
browser smoke si nécessaire
host integration séparée
La matrice évite les doublons : si Sass est déjà compilé par le build Vite et qu'aucun contrat Sass autonome n'existe, une seconde compilation identique n'est pas requise.
Un PASS frontend ne vaut jamais automatiquement PASS du host.
Skeleton Web
docs/skeletons/003-WEB_FRONTEND.md devient la première specialization Web PGR.
Il peut composer :
GENERAL + 500 + 530 + 540 + 550 + 560
mais chaque profil reste sélectionné selon les faits du projet. TypeScript et Vite restent des recommandations SHOULD; Sass reste conditionnel.
Le skeleton MUST NOT imposer :
npm
Bootstrap
Tailwind CSS
frontend/
vite.config.ts générique
main.scss générique
port fixe
base fixe
WASM
Tauri
backend
deployment
Pas de faux templates techniques
La tranche ajoute un guide CSS/Sass :
docs/templates/010-WEB_CSS_SASS.md
mais aucun templates/web-css/main.scss ni autre source de style factice.
Le skeleton réutilise les templates TypeScript/package existants et les guides Vite/CSS-Sass. Les valeurs réellement dépendantes du projet restent à décider pendant l'instanciation.
Scope
REPLACE :
VERSION
README.md
docs/000-README.md
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
docs/rules/560-CSS_SASS.md
docs/skeletons/000-README.md
docs/validation/001-VALIDATION_MATRIX.md
ADD :
docs/skeletons/003-WEB_FRONTEND.md
docs/templates/010-WEB_CSS_SASS.md
docs/validation/005-WEB_FRONTEND_VALIDATION.md
deltas/0.1.1/alpha.5.md
DELETE : aucun.
Validation opérateur
Après application du history PASS, commit/push de alpha.4, puis application du présent delta :
test "$(cat VERSION)" = '0.1.1-alpha.5'
git cat-file -e HEAD:history/0.1.1/alpha.4.md
test -f history/0.1.1/alpha.4.md
test -f deltas/0.1.1/alpha.5.md
test ! -e history/0.1.1/alpha.5.md
grep -A2 '^## Statut$' history/0.1.1/alpha.4.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 18 -->' README.md
grep -Fx '<!-- version: 28 -->' docs/000-README.md
grep -Fx '<!-- version: 8 -->' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
grep -Fx '<!-- version: 2 -->' docs/rules/560-CSS_SASS.md
grep -Fx '<!-- version: 6 -->' docs/skeletons/000-README.md
grep -Fx '<!-- version: 1 -->' docs/skeletons/003-WEB_FRONTEND.md
grep -Fx '<!-- version: 1 -->' docs/templates/010-WEB_CSS_SASS.md
grep -Fx '<!-- version: 14 -->' docs/validation/001-VALIDATION_MATRIX.md
grep -Fx '<!-- version: 1 -->' docs/validation/005-WEB_FRONTEND_VALIDATION.md
python3 -B - <<'PYGATE'
from pathlib import Path
import re
history = Path("history/0.1.1/alpha.4.md").read_text(encoding="utf-8")
assert re.search(r"## Statut\s+PASS\s", history)
styles = Path("docs/rules/560-CSS_SASS.md").read_text(encoding="utf-8")
for phrase in (
"Sass **SHOULD** être préféré",
"Sass n'est donc jamais requis",
"MUST NOT être modifié manuellement",
"`@use` / `@forward`",
"L'ancien `@import` Sass est déprécié",
"entrypoint Sass public",
"`sass-embedded` **SHOULD** être préféré",
"Un package npm apportant uniquement des styles n'impose pas l'ajout de déclarations `@types/*`",
"un build Vite réussi peut constituer la preuve de compilation des styles",
"005-WEB_FRONTEND_VALIDATION.md",
):
assert phrase in styles, phrase
guide = Path("docs/templates/010-WEB_CSS_SASS.md").read_text(encoding="utf-8")
for phrase in (
"ne fournit volontairement pas de `main.scss`",
"CSS seul reste valide",
"sass-embedded",
"@use",
"@forward",
"Les dépendances `@types/*` ne concernent que les API JavaScript/TypeScript",
"PGR ne fixe ni Bootstrap, ni Bootswatch",
"host gate séparée",
):
assert phrase in guide, phrase
validation = Path("docs/validation/005-WEB_FRONTEND_VALIDATION.md").read_text(encoding="utf-8")
for phrase in (
"Le frontend **SHOULD** être validable indépendamment du host",
"Un résultat frontend `PASS`",
"restauration reproductible des dépendances",
"type-check TypeScript",
"build frontend de production",
"preview / smoke navigateur",
"PGR MUST NOT imposer `npm ci`",
"PGR SHOULD NOT lancer deux compilations équivalentes",
"Un host tel que Tauri",
"Il ne vaut pas `PASS` Tauri",
):
assert phrase in validation, phrase
skeleton = Path("docs/skeletons/003-WEB_FRONTEND.md").read_text(encoding="utf-8")
for phrase in (
"GENERAL",
"+ 530 TypeScript",
"+ 540 JavaScript package ecosystem",
"+ 550 Vite",
"+ 560 CSS / Sass",
"Le skeleton ne transforme pas une recommandation `SHOULD` en `MUST`",
"PGR ne fournit pas de `vite.config.ts` universel",
"PGR ne fournit pas non plus de `main.scss`",
"Le nom `frontend/` est une convention possible",
"le package manager réel",
"Bootstrap, Tailwind CSS ou autre",
"Le skeleton Tauri reste `DEFER` pendant `0.1.1`",
):
assert phrase in skeleton, phrase
matrix = Path("docs/validation/001-VALIDATION_MATRIX.md").read_text(encoding="utf-8")
assert "005-WEB_FRONTEND_VALIDATION.md" in matrix
index = Path("docs/000-README.md").read_text(encoding="utf-8")
for target in (
"templates/010-WEB_CSS_SASS.md",
"validation/005-WEB_FRONTEND_VALIDATION.md",
"skeletons/003-WEB_FRONTEND.md",
):
assert target in index, target
skeleton_index = Path("docs/skeletons/000-README.md").read_text(encoding="utf-8")
assert "003-WEB_FRONTEND.md" in skeleton_index
assert "La création du skeleton Web ne lève pas automatiquement ce `DEFER`." in skeleton_index
plan = Path("docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md").read_text(encoding="utf-8")
for phrase in (
"### alpha.4 — Vite, dev server et outputs",
"Statut opérateur : **PASS**.",
"### alpha.5 — CSS/Sass et validation frontend",
"Les owners `530/540/550/560` sont désormais assez complets",
"Le skeleton ne lève pas le `DEFER` Tauri",
):
assert phrase in plan, phrase
study = Path("docs/studies/002-TAURI_SKELETON_DECISION.md").read_text(encoding="utf-8")
assert "DEFER" in study
for phrase in (
"TypeScript et conventions Web contrôlées",
"Vite et ownership des commandes/dev server/build outputs",
"Sass/CSS et statut des artefacts générés",
"validation frontend indépendante de la validation Tauri",
"choix Bootstrap ou alternative clairement classifié",
):
assert phrase in study, phrase
assert not Path("templates/web-vite/vite.config.ts").exists()
assert not Path("templates/web-css/main.scss").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/550-VITE.md").read_text(encoding="utf-8").splitlines()[1] == "<!-- version: 2 -->"
assert Path("docs/rules/710-TAURI.md").read_text(encoding="utf-8").splitlines()[1] == "<!-- version: 6 -->"
assert "0.1.8" not in Path("ROADMAP.md").read_text(encoding="utf-8")
print("0.1.1 alpha.5 Web frontend audit: clean (CSS/Sass bounded, host-independent validation explicit, Web skeleton composable, Tauri DEFER preserved)")
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 README.md docs/000-README.md \
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md \
docs/rules/560-CSS_SASS.md \
docs/skeletons/000-README.md docs/skeletons/003-WEB_FRONTEND.md \
docs/templates/010-WEB_CSS_SASS.md \
docs/validation/001-VALIDATION_MATRIX.md docs/validation/005-WEB_FRONTEND_VALIDATION.md \
deltas/0.1.1/alpha.5.md
git diff --cached --check
git status --short
Le scope indexé attendu avant ajout du history de alpha.5 est exactement :
M README.md
M VERSION
A deltas/0.1.1/alpha.5.md
M docs/000-README.md
M docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
M docs/rules/560-CSS_SASS.md
M docs/skeletons/000-README.md
A docs/skeletons/003-WEB_FRONTEND.md
A docs/templates/010-WEB_CSS_SASS.md
M docs/validation/001-VALIDATION_MATRIX.md
A docs/validation/005-WEB_FRONTEND_VALIDATION.md
Revue opérateur complémentaire
Confirmer que :
- Sass reste
SHOULDet conditionnel ; - CSS seul reste une baseline valide ;
@use/@forwardsont préférés sans casser les dépendances encore basées sur@import;- aucun CSS compilé n'est présenté comme source à modifier ;
- aucune dépendance Sass/Vite/Bootstrap n'est injectée dans le template
package.jsongénérique ; - aucun
main.scssouvite.config.tsartificiel n'est ajouté ; - le skeleton
003-WEB_FRONTEND.mdcompose les owners au lieu de recopier leurs règles ; - npm, Bootstrap, Tailwind CSS,
frontend/, ports etbaserestent des décisions locales ; - la validation frontend peut être exécutée séparément du host autant que le graphe réel le permet ;
- un
PASSfrontend n'est pas présenté comme unPASSTauri ; - le
DEFERdu skeleton Tauri reste intact ; - WASM, backend et deployment restent hors scope.
Transition
PASS
Produire history/0.1.1/alpha.5.md, l'appliquer puis committer/pousser alpha.5. Continuer avec 0.1.1-beta.1 pour la réconciliation large, le dry-run proportionné du skeleton Web et la preuve factuelle de préparation du futur réexamen Tauri.
FAIL
Consigner le diagnostic réel dans history/0.1.1/alpha.5.md, puis produire alpha.5.fix.N ou effectuer un REPLAN si le défaut révèle une frontière d'ownership incorrecte. Ne pas absorber beta.1 dans un correctif CSS/Sass.