0.1.1-alpha.5
This commit is contained in:
325
deltas/0.1.1/alpha.5.md
Normal file
325
deltas/0.1.1/alpha.5.md
Normal file
@@ -0,0 +1,325 @@
|
||||
<!-- 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.
|
||||
Reference in New Issue
Block a user