Files
pgr/deltas/0.1.1/alpha.2.fix.1.md

6.7 KiB

Delta 0.1.1-alpha.2.fix.1 — correction de la gate d'ownership Web

Baseline et version

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

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

Version avant application :

0.1.1-alpha.2

Version après application :

0.1.1-alpha.2.fix.1

Objet

Corriger uniquement la syntaxe défectueuse de la gate opérateur de alpha.2.

Les nouveaux owners Web et tous les documents normatifs livrés par alpha.2 restent inchangés. Le delta historique deltas/0.1.1/alpha.2.md reste également inchangé.

Le défaut observé était un littéral Python entouré de quotes simples alors que son texte contenait l'apostrophe de s'applique :

'Le profil s'applique uniquement lorsqu'un projet utilise réellement Vite.'

Le fix utilise des littéraux syntaxiquement sûrs dans la nouvelle gate sans modifier les assertions sémantiques.

Scope

REPLACE :

VERSION
docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md

ADD :

deltas/0.1.1/alpha.2.fix.1.md

DELETE : aucun.

Aucun profil, règle normative, template, skeleton, script d'audit ou test n'est modifié par ce correctif.

Validation opérateur

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

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

grep -A2 '^## Statut$' history/0.1.1/alpha.2.md | grep -Fx 'FAIL'
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: 3 -->' 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 - <<'PYGATE'
from pathlib import Path
import re

history = Path('history/0.1.1/alpha.2.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+FAIL\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():
    profile = Path('docs/rules', name).read_text(encoding='utf-8')
    for phrase in phrases:
        assert phrase in profile, (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`',
    'Statut opérateur : **FAIL**.',
    "### alpha.2.fix.1 — correction de la gate d'ownership Web",
):
    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.fix.1 ownership gate: clean (alpha.2 FAIL preserved, 530/540/550/560 reconfirmed, Python literals safe)')
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 docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md \
    deltas/0.1.1/alpha.2.fix.1.md

git diff --cached --check
git status --short

Le scope indexé attendu avant ajout du history du fix est exactement :

M  VERSION
A  deltas/0.1.1/alpha.2.fix.1.md
M  docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md

Revue opérateur complémentaire

Confirmer que :

  • le FAIL de alpha.2 est conservé historiquement ;
  • deltas/0.1.1/alpha.2.md n'est pas réécrit ;
  • RULES.md, docs/000-README.md, docs/architecture/003-RULE_PROFILE_MODEL.md, docs/rules/000-README.md et docs/rules/710-TAURI.md ne sont pas modifiés par le fix ;
  • les profils 530-TYPESCRIPT.md, 540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md, 550-VITE.md et 560-CSS_SASS.md ne sont pas modifiés par le fix ;
  • aucun contenu prévu pour alpha.3 n'est absorbé dans le correctif.

Transition

PASS

Produire history/0.1.1/alpha.2.fix.1.md, l'appliquer puis committer/pousser le fix. Reprendre ensuite la trajectoire normale avec 0.1.1-alpha.3, consacré à TypeScript et à l'écosystème de package.

FAIL

Consigner le diagnostic réel dans history/0.1.1/alpha.2.fix.1.md et rester dans alpha.2.fix.M. Le scope MUST rester limité à la correction de la gate d'ownership Web tant qu'aucun défaut plus large ne justifie un REPLAN.