# Delta 0.1.5 rel.1 — promotion stable pré-tag ## Baseline et version Baseline : `0.1.5-rc.1.fix.1`, avec `history/0.1.5/rc.1.fix.1.md` appliqué et committé. Ce delta MUST NOT être appliqué avant ce commit. Version avant application : ```text 0.1.5-rc.1.fix.1 ``` Version après application : ```text 0.1.5 ``` `rel.1` identifie la clôture opérationnelle ; il ne fait pas partie de la version SemVer du produit. ## Objet Promouvoir mécaniquement la RC corrigée vers la stable `0.1.5` sans rouvrir les trois contrats stabilisés et sans commencer `0.1.6`. La tranche finalise uniquement la présentation et les métadonnées de release : version stable, roadmap terminée, changelog sans marqueur `candidate`, README/index en état stable et plan `011` historique. Aucun owner normatif, skeleton, template, audit Python, étude d'horizon ou prompt de reprise n'est modifié par `rel.1`. La validation de cette tranche est **pré-tag**. Le tag `v0.1.5`, son archive source Gitea et le rapport `pgr-0.1.5-publish.001-report.md` ne sont pas déclarés existants par ce delta. Ils suivent uniquement un history `rel.1` `PASS`, le commit stable `0.1.5` et la publication réelle du tag. ## Scope REPLACE : ```text VERSION README.md ROADMAP.md CHANGELOG.md docs/000-README.md docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md ``` ADD : ```text deltas/0.1.5/rel.1.md ``` DELETE : aucun. Le history `rc.1.fix.1` est livré séparément. Le history `rel.1` sera produit uniquement après la gate opérateur. ## Validation opérateur pré-tag Après application sur le commit contenant `history/0.1.5/rc.1.fix.1.md` : ```bash cat VERSION test -f history/0.1.5/rc.1.fix.1.md test -f deltas/0.1.5/rel.1.md test -f prompts/012-V0_1_6_START_PROMPT.md test -f docs/studies/005-V0_1_5_HORIZON_REVIEW.md test ! -e history/0.1.5/rel.1.md grep -Fx '0.1.5' VERSION grep -A2 '^## Statut$' history/0.1.5/rc.1.md | grep -Fx 'FAIL' grep -A2 '^## Statut$' history/0.1.5/rc.1.fix.1.md | grep -Fx 'PASS' grep -Fx '' README.md grep -F 'La stable autoritaire courante est `0.1.5`' README.md grep -F 'La release `0.1.5` stabilise la sémantique `MUST / SHOULD / MAY`' README.md grep -F 'plan historique de la stable `0.1.5`' README.md grep -Fx '' CHANGELOG.md grep -Fx '## 0.1.5' CHANGELOG.md ! grep -Fx '## 0.1.5 (candidate)' CHANGELOG.md grep -F 'forte recommandation non obligatoire' CHANGELOG.md grep -Fx '' ROADMAP.md grep -F -- '- `(x) 0.1.5`' ROADMAP.md grep -F -- '- `( ) 0.1.6`' ROADMAP.md grep -F -- '- `( ) 0.1.7`' ROADMAP.md grep -F -- '- `( ) 0.1.8`' ROADMAP.md ! grep -F -- '- `( ) 0.1.9`' ROADMAP.md grep -Fx '' docs/000-README.md grep -F 'plan historique de la stable `0.1.5`' docs/000-README.md grep -F 'prompts/012-V0_1_6_START_PROMPT.md' docs/000-README.md grep -Fx '' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md grep -F 'Gate `rc.1.fix.1` acquise et promotion stable' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md grep -F 'Le plan devient historique avec la stable `0.1.5`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md grep -F 'pgr-0.1.5-publish.001-report.md' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md grep -Fx '' RULES.md grep -Fx '' docs/rules/210-WORKFLOW.md grep -Fx '' docs/rules/230-ADOPTION.md grep -Fx '' docs/rules/300-DOCUMENTATION.md grep -Fx '' docs/rules/400-VALIDATION.md grep -Fx '' docs/studies/005-V0_1_5_HORIZON_REVIEW.md grep -Fx '' prompts/012-V0_1_6_START_PROMPT.md python3 -B -c "from pathlib import Path; import re; expected={'alpha.1.md':'PARTIAL','alpha.1.fix.1.md':'PASS','alpha.2.md':'PASS','alpha.3.md':'PASS','alpha.4.md':'PASS','beta.1.md':'PASS','rc.1.md':'FAIL','rc.1.fix.1.md':'PASS'}; assert all(Path('deltas/0.1.5',n).is_file() and Path('history/0.1.5',n).is_file() and re.search(rf'## Statut\s+{st}\s',Path('history/0.1.5',n).read_text(encoding='utf-8')) for n,st in expected.items()); assert {p.name for p in Path('deltas/0.1.5').glob('*.md')} - {p.name for p in Path('history/0.1.5').glob('*.md')} == {'rel.1.md'}; print('0.1.5 rel.1 stable gate audit: clean (8 prior histories including alpha.1 PARTIAL and rc.1 FAIL/fix PASS, rel.1 pending)')" python3 -B -c "from pathlib import Path; s=Path('CHANGELOG.md').read_text(encoding='utf-8').split('## 0.1.5',1)[1].split('## 0.1.4',1)[0]; assert all(x not in s for x in ('alpha.1','alpha.2','alpha.3','alpha.4','beta.1','rc.1','rc.1.fix.1','rel.1')); print('0.1.5 stable changelog: clean')" git diff --exit-code -- history/0.1.4 git diff --exit-code -- RULES.md docs/objectives/001-PROJECT_OBJECTIVES.md docs/architecture/002-GOVERNANCE_ARCHITECTURE.md docs/rules/210-WORKFLOW.md docs/rules/220-SKELETONS.md docs/rules/230-ADOPTION.md docs/rules/300-DOCUMENTATION.md docs/rules/400-VALIDATION.md docs/rules/500-LANGUAGES.md docs/rules/530-TYPESCRIPT.md docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md docs/rules/700-FRAMEWORKS.md docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md docs/skeletons/003-WEB_FRONTEND.md docs/templates/003-NEW_SESSION_PROMPT.md docs/templates/007-EXISTING_PROJECT_ADOPTION.md docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md docs/studies/005-V0_1_5_HORIZON_REVIEW.md prompts/012-V0_1_6_START_PROMPT.md python3 -B -m unittest discover -s tests -v python3 -B scripts/audit_text_hygiene.py VERSION README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts scripts tests templates .gitignore .settings 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 status --short git add VERSION README.md ROADMAP.md CHANGELOG.md deltas/0.1.5/rel.1.md docs/000-README.md docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md git diff --cached --check git status --short ``` ## Scope Git attendu ```text M CHANGELOG.md M README.md M ROADMAP.md M VERSION A deltas/0.1.5/rel.1.md M docs/000-README.md M docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md ``` ## Transition après PASS Si cette gate pré-tag est `PASS` : 1. produire `history/0.1.5/rel.1.md` avec les preuves opérateur réelles ; 2. appliquer ce history ; 3. `git add -A`, `git diff --cached --check`, puis committer **`0.1.5`** sans suffixe `rel.1` ; 4. pousser `master` ; 5. vérifier un workspace propre ; 6. créer et pousser le tag annoté `v0.1.5` ; 7. télécharger l'archive Gitea du tag et produire `pgr-0.1.5-publish.001-report.md` après vérification indépendante ; 8. seulement après `publish.001 PASS`, ouvrir `0.1.6` avec `prompts/012-V0_1_6_START_PROMPT.md` et une archive Games récente explicitement autoritaire.