Files
pgr/deltas/0.0.5/rel.001.fix.1.md

171 lines
5.6 KiB
Markdown

<!-- file: deltas/0.0.5/rel.001.fix.1.md -->
<!-- version: 1 -->
# Delta 0.0.5 rel.001.fix.1 — correction de la gate stable pré-tag
## Baseline et version
Baseline : état stable `0.0.5` issu de `rel.001`, avec `history/0.0.5/rel.001.md` appliqué et committé en `FAIL`.
`VERSION` reste :
```text
0.0.5
```
Ce correctif est strictement documentaire et opérationnel. Il ne change ni la version produit, ni le scope fonctionnel validé par `rc.1`, ni les fichiers de présentation stable déjà promus par `rel.001`.
## Diagnostic corrigé
La gate `rel.001` devait confirmer la présence exacte du heading stable `## 0.0.5` dans `CHANGELOG.md`. Le delta livré a généré une chaîne Python simple contenant un retour à la ligne physique :
```python
assert '## 0.0.5
' in changelog
```
Le heredoc est donc invalide et produit `SyntaxError: unterminated string literal` avant la preuve attendue.
`rel.001.fix.1` remplace cette forme fragile par une vérification ligne par ligne :
```python
assert '## 0.0.5' in changelog.splitlines()
```
Le delta historique `rel.001.md` reste immuable.
## Scope
REPLACE :
```text
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
```
ADD :
```text
deltas/0.0.5/rel.001.fix.1.md
```
DELETE : aucun.
Aucun fichier `VERSION`, `README`, `ROADMAP`, `CHANGELOG`, règle, script, test, template ou skeleton n'est modifié par ce correctif.
## Validation opérateur pré-tag
Après application sur le commit qui contient le history `FAIL` de `rel.001` :
```bash
test "$(cat VERSION)" = '0.0.5'
git cat-file -e HEAD:history/0.0.5/rel.001.md
test -f history/0.0.5/rel.001.md
test -f deltas/0.0.5/rel.001.fix.1.md
test -f prompts/006-V0_1_0_START_PROMPT.md
test ! -e history/0.0.5/rel.001.fix.1.md
grep -A2 '^## Statut$' history/0.0.5/rel.001.md | grep -Fx 'FAIL'
grep -Fx '<!-- version: 16 -->' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
grep -Fx '<!-- version: 14 -->' README.md
grep -Fx '<!-- version: 8 -->' ROADMAP.md
grep -Fx '<!-- version: 9 -->' CHANGELOG.md
grep -Fx '## 0.0.5' CHANGELOG.md
grep -F -- '- `(x) 0.0.5`' ROADMAP.md
grep -F 'Le skeleton Tauri contrôlé reste `DEFER`' prompts/006-V0_1_0_START_PROMPT.md
python3 -B - <<'PYGATE'
from pathlib import Path
import re
expected = {
'alpha.1.md': 'PASS',
'alpha.2.md': 'PASS',
'alpha.3.md': 'FAIL',
'alpha.3.fix.1.md': 'PASS',
'alpha.4.md': 'PASS',
'alpha.5.md': 'FAIL',
'alpha.5.fix.1.md': 'PASS',
'alpha.6.md': 'FAIL',
'alpha.6.fix.1.md': 'FAIL',
'alpha.6.fix.2.md': 'FAIL',
'alpha.6.fix.3.md': 'PASS',
'alpha.7.md': 'FAIL',
'alpha.7.fix.1.md': 'PASS',
'alpha.8.md': 'PASS',
'alpha.9.md': 'PASS',
'beta.1.md': 'PASS',
'rc.1.md': 'PASS',
'rel.001.md': 'FAIL',
}
for name, status in expected.items():
delta = Path('deltas/0.0.5', name)
history = Path('history/0.0.5', name)
assert delta.is_file(), name
assert history.is_file(), name
text = history.read_text(encoding='utf-8')
assert re.search(rf'## Statut\s+{status}\s', text), (name, status)
pending = {p.name for p in Path('deltas/0.0.5').glob('*.md')} - \
{p.name for p in Path('history/0.0.5').glob('*.md')}
assert pending == {'rel.001.fix.1.md'}, pending
roadmap = Path('ROADMAP.md').read_text(encoding='utf-8')
assert '- `(x) 0.0.5`' in roadmap
assert '- `( ) 0.1.0`' in roadmap
assert '(d) skeleton Tauri pour projets contrôlés' in roadmap
assert 'saselang-bible' not in roadmap
changelog = Path('CHANGELOG.md').read_text(encoding='utf-8')
assert '## 0.0.5' in changelog.splitlines()
assert '## 0.0.5 (candidate)' not in changelog
prompt = Path('prompts/006-V0_1_0_START_PROMPT.md').read_text(encoding='utf-8')
assert 'pgr-v0.0.5.zip' in prompt
assert 'pgr-0.0.5-publish.001-report.md' in prompt
assert '0.1.0-alpha.1' in prompt
assert 'Le skeleton Tauri contrôlé reste `DEFER`' in prompt
plan = Path('docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md').read_text(encoding='utf-8')
assert "La gate opérateur de `rel.001` est toutefois `FAIL`" in plan
assert '`rel.001.fix.1` corrige uniquement cette preuve de clôture' in plan
print('0.0.5 rel.001.fix.1 stable history audit: clean (18 prior histories, failed rel preserved, corrected pre-tag proof)')
PYGATE
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 docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md \
deltas/0.0.5/rel.001.fix.1.md
git diff --cached --check
git status --short
```
Le scope attendu avant ajout du history du fix est exactement :
```text
A deltas/0.0.5/rel.001.fix.1.md
M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
```
## Revue opérateur complémentaire
Confirmer que `VERSION` reste `0.0.5`, que la présentation stable de `rel.001` reste inchangée, que le `FAIL` de `rel.001` est conservé historiquement, que le fix ne modifie aucun owner fonctionnel et qu'aucun tag n'est créé avant le history PASS de ce correctif.
## Transition
### PASS
Produire séparément `history/0.0.5/rel.001.fix.1.md`, l'appliquer puis committer/pousser la clôture stable corrigée. Ensuite seulement créer et publier le tag canonique `v0.0.5`, télécharger son archive source depuis Gitea et exécuter la vérification externe `publish.001`.
### FAIL
Consigner le diagnostic réel dans `history/0.0.5/rel.001.fix.1.md`, ne pas tagger et poursuivre avec un nouveau `.fix.N` ou un REPLAN si le problème dépasse la gate de clôture.