Files
pgr/deltas/0.1.1/alpha.2.md
2026-09-27 10:18:43 +02:00

10 KiB

Delta 0.1.1-alpha.2 — frontières d'ownership frontend Web

Baseline et version

Baseline attendue : commit opérateur de 0.1.1-alpha.1, réalisé après application de history/0.1.1/alpha.1.md avec statut PASS.

Le hash de ce commit n'est pas anticipé.

Version avant application :

0.1.1-alpha.1

Version après application :

0.1.1-alpha.2

Objet

Matérialiser les frontières d'ownership frontend nécessaires avant d'écrire les configurations détaillées de alpha.3 à alpha.5.

La tranche crée quatre profils indépendants dans la famille 500 :

530  TypeScript
540  JavaScript package ecosystem
550  Vite
560  CSS / Sass

Elle inscrit également les trois préférences validées pendant la revue de alpha.1 : TypeScript, Vite et Sass sont fortement recommandés dans leurs scopes applicables pour les nouveaux frontends contrôlés, donc exprimés en SHOULD, mais aucun n'est une obligation universelle.

La tranche ne crée encore aucun template package.json, tsconfig.json ou vite.config.ts, aucun skeleton Web, aucun audit frontend et aucune politique finale de lockfile. Ces responsabilités restent prévues dans les tranches suivantes.

Scope

REPLACE :

VERSION
RULES.md
docs/000-README.md
docs/architecture/003-RULE_PROFILE_MODEL.md
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
docs/rules/000-README.md
docs/rules/710-TAURI.md

ADD :

deltas/0.1.1/alpha.2.md
docs/rules/530-TYPESCRIPT.md
docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
docs/rules/550-VITE.md
docs/rules/560-CSS_SASS.md

DELETE : aucun.

ROADMAP.md, CHANGELOG.md, les templates, skeletons, scripts, tests, validations et studies restent inchangés.

Aucun history/0.1.1/alpha.2.md n'est anticipé.

Décisions normatives

TypeScript

Pour un frontend contrôlé portant une logique durable non triviale, TypeScript SHOULD être préféré au JavaScript non typé. Du JavaScript direct reste valide lorsqu'il est plus proportionné.

Le type-check TypeScript et la génération éventuelle de bindings depuis une autre source de vérité sont des responsabilités distinctes du bundler. TS-RS reste un outil de frontière Rust/TypeScript lorsqu'un owner plus spécifique l'exige ; il n'est pas une dépendance TypeScript universelle.

Écosystème de package

package.json, le package manager concret, les scripts de package, les dépendances téléchargées et la décision de lockfile appartiennent au profil 540.

PGR MUST NOT imposer npm par défaut. La politique du lockfile sera définie en alpha.3 à partir du rôle du package et de la reproductibilité recherchée, pas à partir de l'absence de lockfile observée dans Games.

Vite

Pour un frontend contrôlé compatible avec ses capacités, Vite SHOULD être le build tool/dev server privilégié. Une alternative justifiée reste permise.

Le profil Vite possède sa configuration, son cache et ses outputs ; il ne possède ni TypeScript, ni Sass/CSS, ni le package manager, ni Tauri, ni WASM.

CSS / Sass

CSS direct reste une baseline valide. Sass SHOULD être préféré lorsqu'une chaîne de styles non triviale ou une dépendance Sass/SCSS configurable en tire une valeur claire.

Bootstrap est un exemple réel de bibliothèque pouvant être personnalisée à partir de ses sources Sass et de variables/maps ; il reste un choix de skeleton/projet, pas une dépendance Web universelle.

Pour du nouveau code Sass, @use / @forward SHOULD être préférés lorsque compatibles. @import MAY rester utilisé pour la compatibilité avec des dépendances existantes qui l'exigent.

Classification Games de cadrage

La classification préparatoire est inscrite dans le plan :

TypeScript durable            ADOPT
Vite                          ADOPT
package.json                  ADOPT
npm concret                   KEEP-LOCAL
lockfiles Games               KEEP-LOCAL jusqu'à décision alpha.3
Sass                          ADOPT quand applicable
Bootstrap                     KEEP-LOCAL
frontend/ layout              KEEP-LOCAL / candidat skeleton
ports / aliases / plugins     KEEP-LOCAL
WASM dans scripts             DEFER

Aucun OVERRIDE n'est nécessaire avant l'adoption réelle de Games en 0.1.5.

Validation opérateur

Après application du history PASS, commit/push de alpha.1, puis application du présent delta :

test "$(cat VERSION)" = '0.1.1-alpha.2'
git cat-file -e HEAD:history/0.1.1/alpha.1.md
test -f history/0.1.1/alpha.1.md
test -f deltas/0.1.1/alpha.2.md
test ! -e history/0.1.1/alpha.2.md

for path in     docs/rules/530-TYPESCRIPT.md     docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md     docs/rules/550-VITE.md     docs/rules/560-CSS_SASS.md; do
    test -f "$path"
done

grep -A2 '^## Statut$' history/0.1.1/alpha.1.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 13 -->' RULES.md
grep -Fx '<!-- version: 25 -->' docs/000-README.md
grep -Fx '<!-- version: 6 -->' docs/architecture/003-RULE_PROFILE_MODEL.md
grep -Fx '<!-- version: 2 -->' docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
grep -Fx '<!-- version: 15 -->' docs/rules/000-README.md
grep -Fx '<!-- version: 6 -->' docs/rules/710-TAURI.md

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

python3 -B - <<'PYGATE'
from pathlib import Path
import re

history = Path('history/0.1.1/alpha.1.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+PASS\s', history)

expected = {
    '530-TYPESCRIPT.md': (
        'TypeScript **SHOULD** être préféré',
        'TS-RS',
        'ni Vite',
    ),
    '540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md': (
        'MUST NOT imposer npm',
        'Lockfile',
        'alpha.3',
    ),
    '550-VITE.md': (
        'Vite **SHOULD** être le build tool/dev server privilégié',
        'Le profil s'applique uniquement lorsqu'un projet utilise réellement Vite.',
        'alpha.4',
    ),
    '560-CSS_SASS.md': (
        'Sass **SHOULD** être préféré',
        'Bootstrap constitue un exemple concret',
        '`@use` / `@forward`',
        '`@import` Sass est déprécié',
        'alpha.5',
    ),
}
for name, phrases in expected.items():
    text = Path('docs/rules', name).read_text(encoding='utf-8')
    for phrase in phrases:
        assert phrase in text, (name, phrase)

rules = Path('RULES.md').read_text(encoding='utf-8')
rules_index = Path('docs/rules/000-README.md').read_text(encoding='utf-8')
architecture = Path('docs/architecture/003-RULE_PROFILE_MODEL.md').read_text(encoding='utf-8')
tauri = Path('docs/rules/710-TAURI.md').read_text(encoding='utf-8')
plan = Path('docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md').read_text(encoding='utf-8')
roadmap = Path('ROADMAP.md').read_text(encoding='utf-8')

for owner in ('530-TYPESCRIPT.md', '540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md', '550-VITE.md', '560-CSS_SASS.md'):
    assert owner in rules
    assert owner in rules_index

for phrase in (
    '530 — TypeScript',
    '540 — JavaScript package ecosystem',
    '550 — Vite',
    '560 — CSS / Sass',
    'Un frontend minimal peut n'en sélectionner qu'une partie.',
):
    assert phrase in architecture, phrase

for phrase in (
    'TypeScript et Vite sont fortement recommandés mais restent des `SHOULD`',
    'Sass est également fortement recommandé',
    'profils `530`, `550` et `560`',
):
    assert phrase in tauri, phrase

for phrase in (
    'Décisions de revue après `alpha.1`',
    '**TypeScript** : fortement recommandé',
    '**Vite** : fortement recommandé',
    '**Sass** : fortement recommandé',
    '`@use` / `@forward`',
    '| TypeScript pour les frontends durables | `ADOPT` |',
    '| npm comme package manager concret | `KEEP-LOCAL` |',
    '| commandes/génération WASM dans les scripts | `DEFER` |',
):
    assert phrase in plan, phrase

assert '0.1.8' not in roadmap
assert 'skeleton Tauri avant owners Web suffisants' in roadmap

print('0.1.1 alpha.2 ownership audit: clean (530/540/550/560 independent, SHOULD recommendations explicit, Games classified)')
PYGATE

git diff --check
git add VERSION RULES.md docs/000-README.md     docs/architecture/003-RULE_PROFILE_MODEL.md     docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md     docs/rules/000-README.md docs/rules/710-TAURI.md     docs/rules/530-TYPESCRIPT.md     docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md     docs/rules/550-VITE.md docs/rules/560-CSS_SASS.md     deltas/0.1.1/alpha.2.md
git diff --cached --check
git status --short

Le scope indexé attendu avant ajout du history est :

M  RULES.md
M  VERSION
A  deltas/0.1.1/alpha.2.md
M  docs/000-README.md
M  docs/architecture/003-RULE_PROFILE_MODEL.md
M  docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md
M  docs/rules/000-README.md
A  docs/rules/530-TYPESCRIPT.md
A  docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
A  docs/rules/550-VITE.md
A  docs/rules/560-CSS_SASS.md
M  docs/rules/710-TAURI.md

La revue qualitative doit confirmer que :

  • SHOULD représente bien « fortement recommandé » et qu'aucun des profils 530, 550, 560 n'est activé universellement ;
  • TypeScript n'est pas rendu dépendant de Rust ou TS-RS ;
  • Vite est recommandé sans interdire un autre build tool ;
  • Sass est recommandé conditionnellement et CSS direct reste valide ;
  • Bootstrap reste un exemple/choix de skeleton, pas une dépendance universelle ;
  • npm et la politique Games des lockfiles restent non généralisés ;
  • WASM, serveur Rust et skeleton Tauri restent hors scope de la tranche.

Transition

PASS

Produire history/0.1.1/alpha.2.md, puis préparer 0.1.1-alpha.3 consacré aux règles et artefacts TypeScript + écosystème de package : tsconfig, manifest, scripts utiles, sélection du package manager et politique du lockfile.

FAIL

Consigner le diagnostic réel dans history/0.1.1/alpha.2.md et rester dans alpha.2.fix.N sauf REPLAN justifié. Le fix MUST rester borné au défaut d'ownership ou de formulation observé.