From 9a7f4f7c67f2258e3e5761b1f45c528d7a2819e8 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Fri, 25 Sep 2026 18:27:36 +0200 Subject: [PATCH] 0.0.5-rel.001.fix.1 --- deltas/0.0.5/rel.001.fix.1.md | 170 +++++++++++++++++++ docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md | 4 +- history/0.0.5/rel.001.fix.1.md | 88 ++++++++++ 3 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 deltas/0.0.5/rel.001.fix.1.md create mode 100644 history/0.0.5/rel.001.fix.1.md diff --git a/deltas/0.0.5/rel.001.fix.1.md b/deltas/0.0.5/rel.001.fix.1.md new file mode 100644 index 0000000..1c1114a --- /dev/null +++ b/deltas/0.0.5/rel.001.fix.1.md @@ -0,0 +1,170 @@ + + + +# 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 '' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +grep -Fx '' README.md +grep -Fx '' ROADMAP.md +grep -Fx '' 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. diff --git a/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md b/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md index 78ec5c1..4980cef 100644 --- a/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +++ b/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md @@ -1,5 +1,5 @@ - + # 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 : diff --git a/history/0.0.5/rel.001.fix.1.md b/history/0.0.5/rel.001.fix.1.md new file mode 100644 index 0000000..65e8b88 --- /dev/null +++ b/history/0.0.5/rel.001.fix.1.md @@ -0,0 +1,88 @@ + + + +# 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.