0.0.5-rel.001.fix.1

This commit is contained in:
2026-09-25 18:27:36 +02:00
parent 436680207f
commit bfa78a1249
3 changed files with 261 additions and 1 deletions

View File

@@ -0,0 +1,170 @@
<!-- 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.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md -->
<!-- version: 15 -->
<!-- version: 16 -->
# Plan 0.0.5 — réconciliation réelle avec KSP et sasedev-games
@@ -170,6 +170,8 @@ La vérification post-tag doit produire, si le mécanisme reste retenu, `pgr-0.0
La promotion `rel.001` clôt le présent plan sans modifier le scope fonctionnel : `VERSION = 0.0.5`, `ROADMAP.md` marque `0.0.5` terminé, le changelog perd son marqueur `candidate`, les index décrivent le plan comme historique et le prompt `006` reste conditionnel à la publication effective du tag et à son rapport post-tag PASS.
La gate opérateur de `rel.001` est toutefois `FAIL` pour un défaut strictement local à sa commande de validation : l'assertion Python qui cherchait le heading `## 0.0.5` a été livrée avec une chaîne simple coupée par un retour à la ligne et provoque `SyntaxError: unterminated string literal`. Les audits Markdown et les contrôles Git exécutés ensuite sont propres ; aucun défaut du contenu stable n'est établi. `rel.001.fix.1` corrige uniquement cette preuve de clôture, conserve `VERSION = 0.0.5` et ne rouvre pas le scope fonctionnel.
## Clôture et transition
Le présent plan attribue dès maintenant les responsabilités de fermeture :

View File

@@ -0,0 +1,88 @@
<!-- file: history/0.0.5/rel.001.fix.1.md -->
<!-- version: 1 -->
# History 0.0.5 rel.001.fix.1 — correction de la gate stable pré-tag
## Statut
PASS
La gate opérateur de `rel.001.fix.1` exécutée le `2026-09-25` est propre. Le correctif conserve `VERSION = 0.0.5`, préserve le `FAIL` historique de `rel.001`, exécute correctement la preuve Python de cohérence stable et ne modifie aucun fichier fonctionnel de la release.
La branche est donc prête pour le commit de cette clôture corrigée puis, uniquement après ce commit/push, pour la création du tag canonique `v0.0.5` et la vérification externe `publish.001`.
## Baseline et état observé
La baseline opérateur est le commit `4366802` de `0.0.5-rel.001`, poussé sur `master` avec `history/0.0.5/rel.001.md` en `FAIL`.
L'opérateur a confirmé :
```text
VERSION 0.0.5
history/0.0.5/rel.001.md présent dans HEAD
deltas/0.0.5/rel.001.fix.1.md présent
history/0.0.5/rel.001.fix.1.md absent avant clôture
history/0.0.5/rel.001.md FAIL
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md version 16
README.md version 14
ROADMAP.md version 8
CHANGELOG.md version 9
CHANGELOG heading stable ## 0.0.5
ROADMAP 0.0.5 terminé
prompt 006 skeleton Tauri toujours DEFER
```
## Preuve stable corrigée
Le contrôle Python inline corrigé s'est exécuté jusqu'à son terme et a produit :
```text
0.0.5 rel.001.fix.1 stable history audit: clean (18 prior histories, failed rel preserved, corrected pre-tag proof)
```
Il confirme notamment :
- les `18` histories antérieurs attendus existent avec leurs statuts réels ;
- `rel.001.md` reste enregistré `FAIL` ;
- seul `rel.001.fix.1.md` reste en attente de history ;
- `ROADMAP.md` conserve `0.0.5` terminé, `0.1.0` ouvert et le skeleton Tauri en `DEFER` ;
- `CHANGELOG.md` expose exactement le heading stable `## 0.0.5` et ne contient plus le marqueur candidate ;
- le prompt `006` référence l'archive taggée `pgr-v0.0.5.zip`, le rapport externe `pgr-0.0.5-publish.001-report.md`, la première tranche `0.1.0-alpha.1` et le `DEFER` Tauri ;
- le plan conserve le diagnostic `FAIL` de `rel.001` et décrit `rel.001.fix.1` comme correction exclusive de la preuve de clôture.
## Audits documentaires
Les audits Markdown ont produit :
```text
Markdown header audit: clean (170 file(s))
Markdown table audit: clean (8 table(s), 170 file(s))
Markdown link audit: clean (161 local link(s), 170 file(s))
```
## Contrôles Git
`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic.
Le statut indexé transmis avant ajout du history est exactement :
```text
A deltas/0.0.5/rel.001.fix.1.md
M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
```
Le correctif ne modifie donc ni `VERSION`, ni `README.md`, ni `ROADMAP.md`, ni `CHANGELOG.md`, ni règles, scripts, tests, templates ou skeletons.
## Conclusion pré-tag
`rel.001.fix.1` corrige exclusivement le défaut de quoting de la preuve `rel.001` sans rouvrir le scope stable. La promotion documentaire `0.0.5` reste inchangée et la preuve de clôture requise est désormais valide.
Aucun tag n'a été créé pendant cette gate.
## Transition
Appliquer ce history puis committer/pousser la tranche avec le message canonique `0.0.5-rel.001.fix.1`.
Après confirmation que `master` contient ce history et que l'arbre est propre, créer le tag canonique `v0.0.5` sur le commit de clôture, pousser ce tag, télécharger l'archive source taggée depuis Gitea puis exécuter la vérification externe `publish.001`.
Le rapport `pgr-0.0.5-publish.001-report.md` reste extérieur au tag stable et doit refléter les preuves réellement observées après publication.