# Delta 0.1.0-alpha.2 — clôture stable et identité `rel.N` ## Baseline Baseline attendue : `0.1.0-alpha.1` committée avec `history/0.1.0/alpha.1.md` en `PASS`. Cette tranche MUST être appliquée uniquement après le commit/push complet de `alpha.1` ; elle ne doit pas être superposée au workspace encore non committé de la gate précédente. Version avant application : ```text 0.1.0-alpha.1 ``` Version après application : ```text 0.1.0-alpha.2 ``` ## Objet Corriger la convention normative de clôture stable avant diffusion plus large de PGR : - utiliser `rel.1`, `rel.2`, etc. sans padding pour les nouvelles releases ; - conserver sans renommage tous les artefacts historiques `rel.001*` déjà publiés ; - distinguer le nom de la tranche de clôture de l'identité du commit stable ; - rendre explicite qu'une clôture `FAIL`, `PARTIAL` ou `BLOCKED` conserve le suffixe opérationnel dans son commit ; - rendre explicite que la première tranche `rel.N[/fix.M]` qui obtient réellement le `PASS` stable est committée sous `X.Y.Z` avant création du tag `vX.Y.Z`. La tranche ne modifie aucun profil technologique, skeleton, template, script d'audit ou convention de publication post-tag `publish.001`. ## Scope REPLACE : ```text VERSION docs/rules/200-GOVERNANCE.md docs/rules/210-WORKFLOW.md docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md ``` ADD : ```text deltas/0.1.0/alpha.2.md ``` DELETE : aucun. Le plan actif est révisé parce qu'il enregistre `alpha.1 PASS` et deux horizons différés explicitement décidés pendant la session — audit Python d'un sous-ensemble Clippy après Games/KSP et future famille deployment/operations — sans leur attribuer de numéro ni les absorber dans `0.1.0`. Aucun `history/0.1.0/alpha.2.md` n'est anticipé avant la gate opérateur. ## Convention obtenue La représentation future canonique est : ```text rel.1 rel.1.fix.1 rel.2 ... ``` Pour le message du commit de clôture, le défaut PGR devient : ```text history rel.1 FAIL / PARTIAL / BLOCKED -> X.Y.Z-rel.1 history rel.1.fix.1 FAIL / PARTIAL / BLOCKED -> X.Y.Z-rel.1.fix.1 premier history rel.N[/fix.M] PASS établissant réellement la stable -> X.Y.Z ``` `VERSION` MAY déjà être `X.Y.Z` pendant ces tranches de fermeture : `rel.N` n'est pas une prerelease SemVer. Le tag `vX.Y.Z` intervient uniquement après le commit final `X.Y.Z` contenant le history `PASS` stable. Les fichiers historiques comme : ```text deltas/0.0.5/rel.001.md history/0.0.5/rel.001.md deltas/0.0.5/rel.001.fix.1.md history/0.0.5/rel.001.fix.1.md ``` restent intacts. ## Validation opérateur Après application sur le commit de `0.1.0-alpha.1`, depuis la racine du dépôt : ```bash test "$(cat VERSION)" = '0.1.0-alpha.2' test -f history/0.1.0/alpha.1.md test -f deltas/0.1.0/alpha.2.md test ! -e history/0.1.0/alpha.2.md grep -Fx '' docs/rules/200-GOVERNANCE.md grep -Fx '' docs/rules/210-WORKFLOW.md grep -Fx '' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md grep -F 'représentation canonique n'utilise pas de zéro de padding' docs/rules/200-GOVERNANCE.md grep -F 'première tranche de clôture PASS' docs/rules/200-GOVERNANCE.md grep -F 'history rel.1 FAIL / PARTIAL / BLOCKED' docs/rules/210-WORKFLOW.md grep -F 'premier history rel.N[/fix.M] PASS qui établit réellement la stable' docs/rules/210-WORKFLOW.md grep -F 'La présente règle ne renomme pas `publish.001`' docs/rules/210-WORKFLOW.md grep -F 'sous-ensemble des conventions Rust/Clippy' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md grep -F 'série dédiée au déploiement et à l'exploitation' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.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 history = Path('history/0.1.0/alpha.1.md').read_text(encoding='utf-8') assert re.search(r'## Statut\s+PASS\s', history) governance = Path('docs/rules/200-GOVERNANCE.md').read_text(encoding='utf-8') workflow = Path('docs/rules/210-WORKFLOW.md').read_text(encoding='utf-8') plan = Path('docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md').read_text(encoding='utf-8') for phrase in ( 'rel.1', 'rel.1.fix.1', 'représentation canonique n\'utilise pas de zéro de padding', 'première tranche de clôture PASS', 'Le commit `X.Y.Z` MUST', ): assert phrase in governance or phrase in workflow, phrase for path in ( Path('deltas/0.0.5/rel.001.md'), Path('history/0.0.5/rel.001.md'), Path('deltas/0.0.5/rel.001.fix.1.md'), Path('history/0.0.5/rel.001.fix.1.md'), ): assert path.is_file(), path assert 'publish.001' in workflow assert 'La présente règle ne renomme pas `publish.001`' in workflow assert 'sous-ensemble des conventions Rust/Clippy' in plan assert "série dédiée au déploiement et à l'exploitation" in plan assert '- `( ) 0.1.1`' not in Path('ROADMAP.md').read_text(encoding='utf-8') print('0.1.0 alpha.2 rel identity audit: clean (rel.N unpadded, historical rel.001 preserved, stable commit identity explicit)') PY git diff --check git add VERSION docs/rules/200-GOVERNANCE.md docs/rules/210-WORKFLOW.md \ docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md \ deltas/0.1.0/alpha.2.md git diff --cached --check git status --short ``` Le scope indexé attendu avant ajout du history est : ```text M VERSION A deltas/0.1.0/alpha.2.md M docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md M docs/rules/200-GOVERNANCE.md M docs/rules/210-WORKFLOW.md ``` La revue opérateur doit également confirmer que : - aucune occurrence historique `rel.001*` n'a été renommée ; - `publish.001` reste une convention indépendante et n'est pas modifiée par cette tranche ; - aucune commande de handoff Git automatique n'est encore rendue normative ici — ce sujet appartient à `alpha.3` ; - les horizons Clippy statique et deployment/operations restent de simples candidats différés dans le plan ; - aucun profil Web, Java/Android, WASM, Tauri ou serveur n'est ajouté ou modifié. ## Transition ### PASS Produire `history/0.1.0/alpha.2.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 `0.1.0-alpha.3` consacré au handoff automatique des commandes opérateur après history, au commit/push, au tag stable et aux preuves requises pour `publish.001`. Après remise du history, fournir déjà spontanément le bloc Git exact de fermeture de `alpha.2`, conformément à la décision acquise, même si `alpha.3` sera la tranche qui rendra ce comportement normatif. ### FAIL Consigner le résultat réel dans le history puis ouvrir `0.1.0-alpha.2.fix.1` ou un REPLAN selon la cause. Aucun élément du handoff automatique prévu pour `alpha.3` ne doit être absorbé silencieusement dans le fix.