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

5.6 KiB

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 :

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 :

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 :

assert '## 0.0.5' in changelog.splitlines()

Le delta historique rel.001.md reste immuable.

Scope

REPLACE :

docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md

ADD :

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 :

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 :

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.