326 lines
12 KiB
Markdown
326 lines
12 KiB
Markdown
<!-- file: deltas/0.1.1/alpha.5.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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 :
|
|
|
|
```text
|
|
0.1.1-alpha.4
|
|
```
|
|
|
|
Version après application :
|
|
|
|
```text
|
|
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` / `@forward` sont préférés pour le nouveau Sass contrôlé ;
|
|
- `@import` reste 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`](../../docs/validation/005-WEB_FRONTEND_VALIDATION.md) définit les couches de preuve réutilisables :
|
|
|
|
```text
|
|
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`](../../docs/skeletons/003-WEB_FRONTEND.md) devient la première specialization Web PGR.
|
|
|
|
Il peut composer :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```bash
|
|
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 :
|
|
|
|
```text
|
|
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 `SHOULD` et conditionnel ;
|
|
- CSS seul reste une baseline valide ;
|
|
- `@use` / `@forward` sont 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.json` générique ;
|
|
- aucun `main.scss` ou `vite.config.ts` artificiel n'est ajouté ;
|
|
- le skeleton `003-WEB_FRONTEND.md` compose les owners au lieu de recopier leurs règles ;
|
|
- npm, Bootstrap, Tailwind CSS, `frontend/`, ports et `base` restent 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 `PASS` frontend n'est pas présenté comme un `PASS` Tauri ;
|
|
- le `DEFER` du 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.
|