Files
pgr/deltas/0.1.5/rel.1.md
2026-10-01 11:02:04 +02:00

157 lines
7.0 KiB
Markdown

<!-- file: deltas/0.1.5/rel.1.md -->
<!-- version: 1 -->
# 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 '<!-- version: 34 -->' 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 '<!-- version: 22 -->' 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 '<!-- version: 19 -->' 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 '<!-- version: 53 -->' 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 '<!-- version: 8 -->' 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 '<!-- version: 16 -->' RULES.md
grep -Fx '<!-- version: 9 -->' docs/rules/210-WORKFLOW.md
grep -Fx '<!-- version: 3 -->' docs/rules/230-ADOPTION.md
grep -Fx '<!-- version: 5 -->' docs/rules/300-DOCUMENTATION.md
grep -Fx '<!-- version: 2 -->' docs/rules/400-VALIDATION.md
grep -Fx '<!-- version: 2 -->' docs/studies/005-V0_1_5_HORIZON_REVIEW.md
grep -Fx '<!-- version: 1 -->' 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.