# Delta 0.1.1-alpha.1 — audit de la stable et cadrage frontend Web ## Baseline et sources Baseline PGR autoritaire : `pgr-v0.1.0.zip`, archive source téléchargée depuis le tag Gitea `v0.1.0`, accompagnée du rapport externe `pgr-0.1.0-publish.001-report.md` avec statut `PASS`. SHA-256 vérifiés : ```text pgr-v0.1.0.zip bc8f3a8117d04afc1280344eceaaac8c6a4724ca94c285a6234fe42c1023b2be pgr-0.1.0-publish.001-report.md a64dc4a5a81e1776b641894d8493eec3ef315932fffb2881e52ff4147eb8b6a5 games-v0.3.6(1).zip ad6e44a1332eb7d6069cf1189d9433f0fbb8fac19c5aac9f4641ac45c1c556e8 khadhroony-solana-project-v0.3.17.zip 2a9cabcb9f147a348dcf8d24df8bc6c5029089b6d49feb17bd4a42b4293c329a ``` Le fichier Games fourni sous le nom local `games-v0.3.6(1).zip` a exactement le SHA-256 de la baseline canonique `games-v0.3.6.zip` attendue par le prompt `007`. KSP `0.3.17` est uniquement un corpus secondaire de corroboration pour éviter de confondre règles frontend génériques et choix d'un host particulier. Il n'est ni requis par la baseline `0.1.1`, ni modifié, ni adopté dans cette tranche. Version avant application : ```text 0.1.0 ``` Version après application : ```text 0.1.1-alpha.1 ``` ## Objet Exécuter `prompts/007-V0_1_1_START_PROMPT.md` : vérifier intégralement la stable `v0.1.0`, ses règles, profils, templates, skeletons, audits, décisions différées et chaîne de gouvernance, puis auditer le corpus Games réellement fourni et créer le plan `0.1.1` avant toute normalisation Web importante. `alpha.1` reste un gate de cadrage. Aucun owner Web, template frontend, skeleton, audit ou règle normative n'est encore créé. ## Résultat de l'audit d'intake La stable PGR et son rapport post-tag concordent : archive SHA-256 attendue, CRC propre, racine unique `pgr/`, `221` fichiers, `33` répertoires, aucun symlink et absence normale de `.git`. La suite de tests donne `48/48 PASS`. Les audits Markdown sont propres : `198` fichiers pour les headers, `8` tables sur `198` fichiers et `193` liens locaux sur `198` fichiers. Les cinq templates TOML Rust/Cargo sont parsables et aucun output de build courant n'est embarqué. Les `72` couples delta/history de `0.0.1` à `0.1.0` sont complets. `0.1.0` conserve explicitement `alpha.2 FAIL`, `alpha.2.fix.1 PASS`, `alpha.3 FAIL`, `alpha.3.fix.1 PASS`, puis `rel.1 PASS`. Le commit stable et le tag suivent la nouvelle convention sans réécrire les historiques antérieurs. La stable possède déjà les profils `510` Rust/Cargo, `520` Java/Maven/Gradle, `610` Android et `710` Tauri. Le skeleton Tauri reste correctement `DEFER`; la décision existante identifie précisément TypeScript, Vite, Sass/CSS, outputs et validation frontend indépendante comme responsabilités encore manquantes. Le corpus Games fourni est sain et correspond au hash canonique attendu. Il contient trois packages frontend réels : deux hosts Web directs et un host Tauri. Tous exercent TypeScript, Vite, `frontend/` et des sorties/cache externes à l'arborescence source. Sass/Bootstrap n'est exercé que là où la chaîne de styles le requiert. Les lockfiles Node sont ignorés par Games, mais cette politique reste locale et n'est pas généralisée par `alpha.1`. KSP `0.3.17` contient six applications Tauri avec frontend Vite/TypeScript et corrobore le caractère transversal de ces owners, sans devenir un corpus d'adoption dans cette release. Le plan conserve explicitement WASM, serveur Rust/Actix et deployment hors scope, et ne lève pas le `DEFER` Tauri. ## Scope REPLACE : ```text VERSION README.md docs/000-README.md ``` ADD : ```text docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md deltas/0.1.1/alpha.1.md ``` DELETE : aucun. `RULES.md`, `ROADMAP.md`, `CHANGELOG.md`, les règles, profils, templates, skeletons, scripts, studies, validations et histories existants restent inchangés dans `alpha.1`. Aucun `history/0.1.1/alpha.1.md` n'est anticipé avant la gate opérateur. ## Validation opérateur Après application sur la stable `0.1.0`, depuis la racine du dépôt : ```bash test "$(cat VERSION)" = '0.1.1-alpha.1' test -f docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md test -f deltas/0.1.1/alpha.1.md test ! -e history/0.1.1/alpha.1.md grep -Fx '' README.md grep -Fx '' docs/000-README.md grep -F '007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md' README.md docs/000-README.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 - <<'PY' from pathlib import Path import re expected = { '0.0.1': 12, '0.0.2': 12, '0.0.3': 10, '0.0.4': 9, '0.0.5': 19, '0.1.0': 10, } for release, count in expected.items(): deltas = {path.name for path in Path('deltas', release).glob('*.md')} histories = {path.name for path in Path('history', release).glob('*.md')} assert len(deltas) == count, (release, len(deltas)) assert deltas == histories, (release, sorted(deltas ^ histories)) statuses = {} for path in Path('history/0.1.0').glob('*.md'): text = path.read_text(encoding='utf-8') match = re.search(r'## Statut\s+(PASS|FAIL|PARTIAL|BLOCKED)\s', text) assert match is not None, path statuses[path.name] = match.group(1) assert statuses['alpha.2.md'] == 'FAIL' assert statuses['alpha.2.fix.1.md'] == 'PASS' assert statuses['alpha.3.md'] == 'FAIL' assert statuses['alpha.3.fix.1.md'] == 'PASS' assert statuses['rel.1.md'] == 'PASS' roadmap = Path('ROADMAP.md').read_text(encoding='utf-8') for release in range(1, 8): assert f'- `( ) 0.1.{release}`' in roadmap, release assert '0.1.8' not in roadmap assert 'skeleton Tauri avant owners Web suffisants' in roadmap assert 'WASM' in roadmap assert 'serveur Web Rust / Actix Web ou alternative' in roadmap assert 'deployment & operations' in roadmap prompt = Path('prompts/007-V0_1_1_START_PROMPT.md').read_text(encoding='utf-8') for phrase in ( 'Version cible : `0.1.1`', 'Première tranche attendue : `0.1.1-alpha.1`', 'ad6e44a1332eb7d6069cf1189d9433f0fbb8fac19c5aac9f4641ac45c1c556e8', 'TypeScript et configuration applicable', 'Vite, dev server et contrat de build outputs', 'package manager, manifest et lockfile sans imposer arbitrairement npm', 'Le skeleton Tauri reste `DEFER` pendant cette release.', ): assert phrase in prompt, phrase study = Path('docs/studies/002-TAURI_SKELETON_DECISION.md').read_text(encoding='utf-8') for phrase in ( 'DEFER', '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', ): assert phrase in study, phrase plan = Path('docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md').read_text(encoding='utf-8') for phrase in ( 'Frontières d\'ownership à décider', 'alpha.2 — frontières d\'ownership Web', 'alpha.3 — TypeScript et écosystème de package', 'alpha.4 — Vite, dev server et outputs', 'alpha.5 — CSS/Sass et validation frontend', 'beta.1 — réconciliation et preuve de préparation Tauri', 'La réussite de `0.1.1` devra produire les owners nécessaires à ce réexamen, mais ne lèvera pas automatiquement le `DEFER`.', 'WASM, sans numéro réservé', 'serveur Web Rust / Actix Web ou alternative', ): assert phrase in plan, phrase print('0.1.1 alpha.1 structural audit: clean (72 prior pairs, Web scope bounded, Tauri DEFER preserved)') PY git diff --check git add VERSION README.md docs/000-README.md \ docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md \ deltas/0.1.1/alpha.1.md git diff --cached --check git status --short ``` Le scope indexé attendu avant ajout du history est : ```text M README.md M VERSION A deltas/0.1.1/alpha.1.md M docs/000-README.md A docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md ``` La revue opérateur doit également confirmer que : - le plan n'impose pas npm, Sass ou Bootstrap comme obligation frontend universelle ; - la politique Games sur les lockfiles reste une observation locale, pas une règle PGR acquise ; - les numéros/frontières exacts des futurs owners Web restent à décider en `alpha.2` ; - aucun profil WASM ou serveur Rust n'est créé par proximité ; - aucun skeleton Tauri n'est créé et son `DEFER` n'est pas levé ; - Games et KSP restent des corpus externes non modifiés ; - aucun nouveau numéro de release au-delà de `0.1.7` n'est réservé. ## Transition ### PASS Produire `history/0.1.1/alpha.1.md` à partir des résultats réellement observés. Dans la même réponse, si aucune décision nouvelle n'est ouverte, préparer séparément le delta `0.1.1-alpha.2` consacré aux frontières d'ownership Web et à la classification `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` des choix Games pertinents. Après remise du history, fournir automatiquement le bloc Git exact de fermeture conformément à `docs/templates/006-OPERATOR_COMMAND_HANDOFF.md`, puis indiquer l'application du delta suivant seulement après succès du commit/push. ### FAIL Consigner le résultat réel dans le history, puis ouvrir `0.1.1-alpha.1.fix.1` ou un REPLAN selon la cause. Un fix de `alpha.1` doit rester limité au cadrage et ne doit pas absorber les décisions normatives prévues pour `alpha.2`.