0.1.1-alpha.5
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/skeletons/000-README.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Index des skeleton specifications PGR
|
||||
|
||||
@@ -19,13 +19,16 @@ Une specification peut se composer avec une fondation plus générale, mais la c
|
||||
|
||||
- [`001-PROJECT_GOVERNANCE_FOUNDATION.md`](001-PROJECT_GOVERNANCE_FOUNDATION.md) — fondation composable pour établir la gouvernance locale, la version, la documentation minimale, le workflow retenu et sa validation initiale sans imposer d'architecture applicative.
|
||||
- [`002-RUST_CARGO_WORKSPACE.md`](002-RUST_CARGO_WORKSPACE.md) — specialization composable d'un workspace Rust/Cargo fondée sur `001`, les profils `500 + 510`, les cinq templates Rust/Cargo et une validation réelle de la toolchain.
|
||||
- [`003-WEB_FRONTEND.md`](003-WEB_FRONTEND.md) — specialization composable d'un frontend Web contrôlé fondée sur les owners `530/540/550/560`, avec TypeScript/Vite recommandés, Sass conditionnel et validation indépendante du host.
|
||||
|
||||
Pour un projet existant, ces specifications servent de références de comparaison et non de recettes à recopier aveuglément. Le chemin canonique passe alors par [`../rules/230-ADOPTION.md`](../rules/230-ADOPTION.md) et son mapping `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER`.
|
||||
|
||||
Les familles Java/Android, Web, JNI et autres domaines sans pièces suffisantes restent différées tant que leurs owners normatifs et artefacts d'instanciation ne permettent pas une baseline réellement actionnable.
|
||||
Les familles Java/Android, JNI et autres domaines sans pièces suffisantes restent différées tant que leurs owners normatifs et artefacts d'instanciation ne permettent pas une baseline réellement actionnable.
|
||||
|
||||
Le skeleton Tauri a fait l'objet d'une décision explicite en `0.0.5-alpha.9` : le host Rust/Tauri est suffisamment cadré par `510` et `710`, mais PGR ne possède pas encore les owners Web/Vite/TypeScript/Sass nécessaires pour matérialiser proprement la stack frontend candidate des projets contrôlés. Aucun `003-TAURI...` n'est donc créé dans `0.0.5`. La décision et ses conditions de sortie sont enregistrées dans [`../studies/002-TAURI_SKELETON_DECISION.md`](../studies/002-TAURI_SKELETON_DECISION.md).
|
||||
Le skeleton Web `003` est matérialisé en `0.1.1-alpha.5` parce que les owners `530/540/550/560`, les guides d'adaptation et la validation frontend indépendante du host permettent désormais une composition sans ownership caché. Il ne fixe ni npm, ni Vite/Sass comme obligations, ni Bootstrap, ni un layout `frontend/` universel.
|
||||
|
||||
Un futur skeleton Tauri devra composer les owners existants avec les profils Web réellement matérialisés ; il ne devra pas faire du skeleton lui-même le propriétaire des règles Vite, TypeScript, Sass, Bootstrap ou du package manager.
|
||||
Le skeleton Tauri a fait l'objet d'une décision explicite en `0.0.5-alpha.9` : son host Rust/Tauri est cadré par `510` et `710`, mais sa promotion avait été différée tant que les owners Web nécessaires n'existaient pas. La décision `DEFER` et ses conditions de sortie restent enregistrées dans [`../studies/002-TAURI_SKELETON_DECISION.md`](../studies/002-TAURI_SKELETON_DECISION.md).
|
||||
|
||||
La création du skeleton Web ne lève pas automatiquement ce `DEFER`. `0.1.1-beta.1` doit encore réconcilier objectivement les conditions de sortie avant que `0.1.4` ne réexamine un éventuel skeleton Tauri, qui devra composer les owners Web au lieu de posséder leurs règles.
|
||||
|
||||
Aucun fichier placeholder ne doit être ajouté pour réserver un skeleton futur.
|
||||
|
||||
143
docs/skeletons/003-WEB_FRONTEND.md
Normal file
143
docs/skeletons/003-WEB_FRONTEND.md
Normal file
@@ -0,0 +1,143 @@
|
||||
<!-- file: docs/skeletons/003-WEB_FRONTEND.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Skeleton — Web frontend
|
||||
|
||||
## Objectif
|
||||
|
||||
Cette specification décrit une specialization composable pour créer une baseline frontend Web contrôlée sans confondre langage, package ecosystem, build tool, styles et host.
|
||||
|
||||
Elle se compose avec [`001-PROJECT_GOVERNANCE_FOUNDATION.md`](001-PROJECT_GOVERNANCE_FOUNDATION.md), sélectionne les owners Web réellement applicables de la famille `500` et utilise les templates/guides `008`, `009` et `010` lorsqu'ils correspondent aux choix du projet.
|
||||
|
||||
Le contrat transversal des skeletons reste possédé par [`../rules/220-SKELETONS.md`](../rules/220-SKELETONS.md).
|
||||
|
||||
## Applicabilité
|
||||
|
||||
Appliquer cette specialization lorsqu'un projet ou sous-projet possède un frontend Web autonome ou embarqué dont la baseline frontend est contrôlée par le projet.
|
||||
|
||||
Elle peut servir de fondation frontend à un host plus spécifique, par exemple Tauri, sans rendre ce host applicable par elle-même.
|
||||
|
||||
Pour un projet existant, cette specification sert de référence de comparaison : l'adoption suit [`../rules/230-ADOPTION.md`](../rules/230-ADOPTION.md) et classe les choix existants `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` plutôt que de réécrire son layout.
|
||||
|
||||
Ne pas appliquer ce skeleton à un backend sans frontend, à une page statique qui n'a besoin d'aucune de ces responsabilités, ni uniquement parce que Vite/TypeScript sont recommandés ailleurs.
|
||||
|
||||
## Owners sélectionnables
|
||||
|
||||
La composition de référence d'un frontend moderne contrôlé est :
|
||||
|
||||
```text
|
||||
GENERAL
|
||||
+ 500 language / ecosystem family
|
||||
+ 530 TypeScript
|
||||
+ 540 JavaScript package ecosystem
|
||||
+ 550 Vite
|
||||
+ 560 CSS / Sass
|
||||
```
|
||||
|
||||
La sélection reste factuelle :
|
||||
|
||||
- `530` est sélectionné lorsque TypeScript est utilisé ; TypeScript **SHOULD** être préféré pour une baseline durable lorsqu'il est compatible avec le besoin ;
|
||||
- `540` est sélectionné lorsqu'un `package.json`, un package manager ou des dépendances JavaScript sont réellement utilisés ;
|
||||
- `550` est sélectionné uniquement si Vite est choisi ; Vite **SHOULD** être préféré pour les frontends compatibles, sans être obligatoire ;
|
||||
- `560` est sélectionné si le frontend possède une chaîne CSS/Sass ; CSS seul reste valide et Sass reste optionnel, bien que recommandé pour une chaîne non triviale ou un package exposant une API Sass utile.
|
||||
|
||||
Le skeleton ne transforme pas une recommandation `SHOULD` en `MUST`.
|
||||
|
||||
## Fondation et fichiers de départ
|
||||
|
||||
Lorsque TypeScript + package ecosystem sont sélectionnés, le projet MAY partir des templates :
|
||||
|
||||
```text
|
||||
templates/web-typescript/package.json
|
||||
templates/web-typescript/tsconfig.json
|
||||
```
|
||||
|
||||
Le guide [`../templates/008-WEB_TYPESCRIPT_PACKAGE.md`](../templates/008-WEB_TYPESCRIPT_PACKAGE.md) possède leur adaptation.
|
||||
|
||||
PGR ne fournit pas de `vite.config.ts` universel. Si Vite est sélectionné, créer ou adapter la configuration réelle à partir des décisions décrites dans [`../templates/009-WEB_VITE.md`](../templates/009-WEB_VITE.md).
|
||||
|
||||
PGR ne fournit pas non plus de `main.scss` ou de thème universel. Si CSS/Sass est sélectionné, organiser les sources selon les besoins réels et suivre [`../templates/010-WEB_CSS_SASS.md`](../templates/010-WEB_CSS_SASS.md).
|
||||
|
||||
Le nom `frontend/` est une convention possible, pas un chemin imposé par ce skeleton.
|
||||
|
||||
## Décisions destinataire avant matérialisation
|
||||
|
||||
Résoudre explicitement au minimum :
|
||||
|
||||
1. la racine et le scope exacts du frontend ;
|
||||
2. TypeScript ou JavaScript, avec justification si une nouvelle baseline durable n'adopte pas la recommandation TypeScript ;
|
||||
3. le package manager réel et la politique de lockfile adaptée au rôle du package ;
|
||||
4. les versions réelles de TypeScript et des dépendances, ainsi que les déclarations `@types/*` réellement nécessaires ;
|
||||
5. Vite ou un build tool alternatif, avec ses chemins `root`, cache, outputs, `base`, ports, plugins et assets lorsqu'ils s'appliquent ;
|
||||
6. CSS seul ou Sass, puis l'implémentation Sass réelle si sélectionnée ;
|
||||
7. le framework CSS éventuel : aucun, Bootstrap, Tailwind CSS ou autre ; ce choix reste local au projet ;
|
||||
8. les entrypoints de styles publics des dépendances et les overrides réellement nécessaires ;
|
||||
9. les scripts de package réellement utiles (`typecheck`, `dev`, `build`, `preview` ou équivalents) ;
|
||||
10. la gate frontend indépendante du host et les éventuels smokes navigateur utiles ;
|
||||
11. les prérequis produits par d'autres owners, s'il en existe, sans les faire absorber par le frontend.
|
||||
|
||||
Aucune décision ouverte ne doit être remplacée silencieusement par une valeur observée dans Games ou KSP.
|
||||
|
||||
## Dépendances et manifest
|
||||
|
||||
Le package réel **SHOULD** rester privé lorsqu'il représente une application non publiée, conformément à `540`.
|
||||
|
||||
Les dépendances de développement telles que TypeScript, Vite, Sass ou packages de déclarations sont ajoutées uniquement si les choix du projet les rendent nécessaires. Le skeleton MUST NOT préremplir `@types/node`, `@types/bootstrap`, `sass-embedded`, Vite ou Bootstrap sans besoin réel ni version décidée.
|
||||
|
||||
Lorsqu'une dépendance fournit déjà ses propres types, ne pas ajouter un package `@types/*` redondant.
|
||||
|
||||
## Styles
|
||||
|
||||
CSS source et Sass source sont des entrées versionnées. Les CSS compilées/minifiées, sourcemaps et copies dans l'output sont générées sauf contrat de distribution explicite.
|
||||
|
||||
Pour du nouveau Sass contrôlé, `@use` / `@forward` sont préférés lorsque les dépendances le permettent. Une compatibilité `@import` peut être conservée pour un package existant qui l'exige encore.
|
||||
|
||||
Le choix d'un framework CSS ne rend ni Bootstrap, ni Tailwind CSS, ni un thème spécifique normatif pour les autres projets.
|
||||
|
||||
## Build et outputs
|
||||
|
||||
Lorsque Vite est sélectionné, le cache et `build.outDir` restent générés et hors Git. Les chemins exacts restent locaux.
|
||||
|
||||
`build.emptyOutDir = true` n'est utilisé que sur un output dédié. `vite preview` reste un smoke/prévisualisation locale et ne devient pas un serveur de production.
|
||||
|
||||
Un autre build tool possède ses propres décisions project-specific tant qu'aucun owner PGR dédié n'existe.
|
||||
|
||||
## Validation initiale
|
||||
|
||||
La validation suit [`../validation/005-WEB_FRONTEND_VALIDATION.md`](../validation/005-WEB_FRONTEND_VALIDATION.md).
|
||||
|
||||
Selon les profils sélectionnés, elle doit pouvoir prouver indépendamment du host, autant que possible :
|
||||
|
||||
```text
|
||||
restore reproductible
|
||||
TypeScript typecheck
|
||||
compilation/transformation des styles
|
||||
build frontend de production
|
||||
smoke navigateur seulement si nécessaire
|
||||
```
|
||||
|
||||
La commande concrète appartient au package manager et aux outils réellement sélectionnés.
|
||||
|
||||
Le host reçoit ensuite sa propre gate d'intégration. Un PASS frontend ne constitue pas un PASS Tauri ou plateforme.
|
||||
|
||||
Une instanciation temporaire MAY être utilisée pour un dry-run de cette specialization. Elle doit employer les toolchains officielles réelles plutôt qu'un audit Python simulant TypeScript/Vite/Sass.
|
||||
|
||||
## Composition avec un host
|
||||
|
||||
Un host peut composer ce skeleton comme fondation frontend, puis ajouter son propre profil/skeleton.
|
||||
|
||||
Cette composition ne transfère jamais au host l'ownership de TypeScript, du package manager, de Vite ou de Sass/CSS.
|
||||
|
||||
Le skeleton Tauri reste `DEFER` pendant `0.1.1`. La présence du présent skeleton Web satisfait une pièce de préparation mais ne décide pas à elle seule la promotion du candidat Tauri.
|
||||
|
||||
## Hors scope
|
||||
|
||||
Cette specification ne possède pas :
|
||||
|
||||
- Tauri ou un autre host natif ;
|
||||
- WASM ou ses bindings/générations ;
|
||||
- backend/serveur Web ;
|
||||
- deployment/operations ;
|
||||
- choix de framework UI/CSS universel ;
|
||||
- configuration de sécurité propre à un host ;
|
||||
- service worker/PWA tant qu'un owner distinct n'est pas justifié.
|
||||
Reference in New Issue
Block a user