diff --git a/CHANGELOG.md b/CHANGELOG.md index 873d930..6da87d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ - + # Changelog Project Governance Rules @@ -7,6 +7,15 @@ Ce fichier décrit les changements utiles aux utilisateurs ou intégrateurs des Les tranches `alpha`, `beta`, `rc`, fixes, validations, audits et détails de développement appartiennent aux plans, deltas et historiques. Ils ne sont pas recopiés ici par défaut. +## 0.0.5 (candidate) + +- consolide le lifecycle inter-release de PGR : prompts de reprise versionnés, contrats locaux de fichiers/familles, responsabilités de fermeture et revue d'horizon sans création artificielle de releases futures ; +- renforce le profil Rust/Cargo des nouveaux projets contrôlés avec Rust 2024, chemins explicites, façade crate-root, contrats de suffixes de crates, séparation bibliothèque/exécutable, erreurs explicites et ownership du tracing ; +- ajoute et sépare les validations Rust structurelles utiles : complétude des réexports/chemins `crate::Item`, espacement des items, ordre des modules, blocs d'imports de traits et blocs de réexports, tout en conservant les contrôles à ordre sémantique comme opt-in ; +- active les profils framework et Tauri 2, avec host Rust direct, frontière frontend explicite, TS-RS pour les DTO partagés, plugins/capabilities gouvernés, versions produit classifiées et exception Tauri encadrée au principe de séparation `lib`/`bin` ; +- enregistre le skeleton Tauri contrôlé comme trajectoire `DEFER` jusqu'à matérialisation d'owners Web suffisants, sans créer de skeleton décoratif ni réserver une release ; +- réconcilie les décisions avec les corpus KSP/Games, conserve leurs architectures métier locales hors du noyau PGR et prépare le prompt de reprise `006` vers la première baseline réutilisable `0.1.0`. + ## 0.0.4 - définit un contrat transversal de skeleton specifications pour sélectionner et composer règles, profils, templates, décisions destinataire, overrides et validation sans dupliquer les propriétaires normatifs ; diff --git a/VERSION b/VERSION index b16e4f9..6a546fb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.5-beta.1 +0.0.5-rc.1 diff --git a/deltas/0.0.5/rc.1.md b/deltas/0.0.5/rc.1.md new file mode 100644 index 0000000..030144d --- /dev/null +++ b/deltas/0.0.5/rc.1.md @@ -0,0 +1,190 @@ + + + +# Delta 0.0.5-rc.1 — gel du scope et préparation de release + +## Baseline et version + +Baseline : `0.0.5-beta.1`, avec `history/0.0.5/beta.1.md` appliqué et committé. Ce delta MUST NOT être appliqué avant ce commit. + +Le commit exact de cette baseline sera celui produit par l'opérateur après application du history beta ; il n'est pas anticipé dans cette livraison simultanée du history et du delta suivant. + +Version avant application : + +```text +0.0.5-beta.1 +``` + +Version après application : + +```text +0.0.5-rc.1 +``` + +## Objet et gel + +La réconciliation `beta.1` est `PASS`. La RC gèle le scope fonctionnel de `0.0.5` sur : + +- les prompts versionnés, contrats documentaires facultatifs et responsabilités de lifecycle/revue d'horizon ; +- le profil Rust strict des projets contrôlés, ses contrats de nomenclature/packaging/tracing et ses audits monotâches ; +- l'audit de complétude de façade et l'usage canonique `crate::Item` ; +- les profils framework et Tauri 2, leurs frontières Rust/frontend, TS-RS, plugins/capabilities, politique de versions produit et exception encadrée `lib + bin` ; +- la décision explicite `DEFER` du skeleton Tauri contrôlé jusqu'à matérialisation d'owners Web suffisants ; +- la réconciliation KSP/Games et le prompt candidat `006` vers `0.1.0`. + +Le changelog reçoit une entrée candidate `0.0.5` orientée utilisateurs. `ROADMAP.md` est vérifié mais reste inchangé : `0.0.5` n'est marqué terminé qu'à la promotion stable ; `0.1.0` reste la prochaine release engagée ; le skeleton Tauri reste différé sans numéro réservé. Le prompt `006` est vérifié sans être réécrit si son contrat est déjà correct. + +Aucun nouvel owner, profil Web, skeleton, template, audit, règle fonctionnelle ou version postérieure à `0.1.0` n'entre en RC. + +## Scope + +REPLACE : + +```text +VERSION +CHANGELOG.md +docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +``` + +ADD : + +```text +deltas/0.0.5/rc.1.md +``` + +DELETE : aucun. + +L'archive contient exactement ces fichiers complets. Le history `beta.1` est livré séparément ; le history `rc.1` sera produit après la gate opérateur. + +## Gate opérateur de release candidate + +Après application du history `PASS` de `beta.1`, commit/push de cette tranche, puis application du présent delta : + +```bash +test "$(cat VERSION)" = '0.0.5-rc.1' +git cat-file -e HEAD:history/0.0.5/beta.1.md +test -f history/0.0.5/beta.1.md +test -f deltas/0.0.5/rc.1.md +test -f prompts/006-V0_1_0_START_PROMPT.md +test ! -e history/0.0.5/rc.1.md + +grep -A2 '^## Statut$' history/0.0.5/beta.1.md | grep -Fx 'PASS' +grep -Fx '' CHANGELOG.md +grep -Fx '## 0.0.5 (candidate)' CHANGELOG.md +grep -Fx '' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +grep -Fx '' ROADMAP.md +grep -Fx '' prompts/006-V0_1_0_START_PROMPT.md +grep -F 'La gate opérateur de `beta.1` est `PASS`' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +grep -F '(d) skeleton Tauri pour projets contrôlés' ROADMAP.md +grep -F 'Le skeleton Tauri contrôlé reste `DEFER`' prompts/006-V0_1_0_START_PROMPT.md + +python3 -B -m unittest discover -s tests -v + +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 + +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', +} +histories = {path.name for path in Path('history/0.0.5').glob('*.md')} +assert histories == set(expected), histories +for name, status in expected.items(): + text = Path('history/0.0.5', name).read_text(encoding='utf-8') + assert re.search(rf'## Statut\s+{status}\s', text), (name, status) + +deltas = {path.name for path in Path('deltas/0.0.5').glob('*.md')} +assert deltas == set(expected) | {'rc.1.md'}, deltas + +changelog = Path('CHANGELOG.md').read_text(encoding='utf-8') +assert '## 0.0.5 (candidate)' in changelog +for forbidden in ('alpha.6.fix.3', 'alpha.7.fix.1', 'beta.1'): + assert forbidden not in changelog, forbidden + +roadmap = Path('ROADMAP.md').read_text(encoding='utf-8') +assert '- `( ) 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 + +prompt = Path('prompts/006-V0_1_0_START_PROMPT.md').read_text(encoding='utf-8') +for value in ( + 'pgr-v0.0.5.zip', + 'pgr-0.0.5-publish.001-report.md', + '0.1.0-alpha.1', + 'Le skeleton Tauri contrôlé reste `DEFER`', + "revue d'horizon avant la clôture stable", +): + assert value in prompt, value + +for path in ( + 'scripts/audit_rust_item_spacing.py', + 'scripts/audit_rust_module_order.py', + 'scripts/audit_rust_reexport_blocks.py', + 'scripts/audit_rust_trait_import_blocks.py', + 'scripts/audit_rust_export_completeness.py', +): + assert Path(path).is_file(), path + +assert Path('docs/rules/710-TAURI.md').is_file() +assert not any(Path('docs/skeletons').glob('003-TAURI*.md')) + +print('0.0.5 rc.1 integration audit: clean (16 prior histories, frozen scope, candidate changelog, roadmap/prompt 006 verified)') +PYGATE + +git diff --check + +git add VERSION CHANGELOG.md \ + docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md \ + deltas/0.0.5/rc.1.md + +git diff --cached --check +git status --short +``` + +Le scope attendu avant ajout du history est exactement : + +```text +M CHANGELOG.md +M VERSION +A deltas/0.0.5/rc.1.md +M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +``` + +## Revue opérateur complémentaire + +Confirmer que le changelog décrit les capacités de la release plutôt que ses tranches internes, que le `DEFER` Tauri reste visible sans numéro de release, que les trois autres candidats d'horizon ne sont pas promus en roadmap, que le prompt `006` ne présume aucune publication post-tag et que la RC n'étend pas le périmètre fonctionnel. + +Une gate RC `PASS` n'est ni la promotion stable, ni le tag `v0.0.5`, ni la vérification de l'archive publiée après le tag. + +## Transition + +### PASS + +Produire séparément `history/0.0.5/rc.1.md`, l'appliquer puis committer/pousser la RC avant le delta stable `rel.001`. + +### FAIL + +Consigner l'échec réel dans `history/0.0.5/rc.1.md` et corriger uniquement le scope gelé dans `rc.1.fix.1`, sauf REPLAN explicite si la candidate révèle un défaut fonctionnel plus large. diff --git a/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md b/docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md index 39a012f..d1b6722 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 @@ -148,9 +148,15 @@ La mission `0.1.0` reste suffisamment connue : `prompts/006-V0_1_0_START_PROMPT. Cette tranche réconcilie ainsi la documentation durable et confirme que le présent plan possède un contrat de fermeture exécutable avant `rc.1`. +La gate opérateur de `beta.1` est `PASS` : `48/48` tests Python, les trois audits Markdown, le contrôle d'intégration ciblé et les contrôles Git sont propres. La phase beta est donc fermée sans correctif. + ### rc.1 — scope gelé et gate candidate -Geler le scope de `0.0.5`, préparer l'entrée candidate du changelog, vérifier `ROADMAP.md`, finaliser/vérifier le prompt `006-V0_1_0_START_PROMPT.md` si `0.1.0` reste la cible retenue et rejouer les tests/audits PGR ainsi que les validations ciblées des nouveaux scripts/templates/profils réellement livrés. +La RC gèle le scope fonctionnel de `0.0.5` sur les capacités déjà validées : contrats de reprise/lifecycle, profil Rust strict et ses audits monotâches, profil Tauri 2, réconciliation KSP/Games et décision `DEFER` du skeleton Tauri contrôlé. Aucun nouvel owner, skeleton, template, script d'audit ou domaine technique n'entre dans la candidate. + +`CHANGELOG.md` reçoit l'entrée candidate `0.0.5` orientée utilisateurs. `ROADMAP.md` reste inchangé : `0.0.5` demeure en cours jusqu'à la promotion stable, `0.1.0` reste la prochaine release engagée et le skeleton Tauri reste `(d)` sans numéro de release. `prompts/006-V0_1_0_START_PROMPT.md` est vérifié comme prompt candidat de reprise et n'est pas modifié si son contrat est déjà correct. + +La gate RC rejoue la suite Python complète, les audits Markdown et un contrôle d'intégrité historique de toutes les tranches `0.0.5`. Elle vérifie également la présence des owners/audits effectivement livrés et l'absence de skeleton Tauri `003`. Les validations lexicales déjà couvertes par la suite de tests ne sont pas dupliquées par un nouvel audit composite. Aucune version postérieure à `0.1.0` n'est inventée à cette étape. diff --git a/history/0.0.5/rc.1.md b/history/0.0.5/rc.1.md new file mode 100644 index 0000000..70c2c6f --- /dev/null +++ b/history/0.0.5/rc.1.md @@ -0,0 +1,70 @@ + + + +# History 0.0.5-rc.1 — gate de release candidate + +## Statut + +PASS + +La gate opérateur de `0.0.5-rc.1` exécutée le `2026-09-25` valide le scope gelé de la release candidate, le changelog candidat, la roadmap déjà réconciliée et le prompt de reprise `006`. Cette preuve porte sur la RC avant son commit ; elle ne constitue ni la promotion stable, ni le tag `v0.0.5`, ni la vérification post-tag. + +## Baseline et scope observés + +La baseline opérateur est le commit `c97ca5f` de `0.0.5-beta.1`, poussé sur `master` avant application du delta RC. L'opérateur a confirmé `VERSION = 0.0.5-rc.1`, la présence dans `HEAD` de `history/0.0.5/beta.1.md`, la présence du delta `rc.1` et du prompt `006`, ainsi que l'absence du présent history avant sa livraison. + +Les marqueurs attendus ont été retrouvés : + +```text +CHANGELOG.md version 8 +CHANGELOG 0.0.5 (candidate) +ROADMAP.md version 7 +docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md version 14 +prompts/006-V0_1_0_START_PROMPT.md version 1 +beta.1 PASS consigné dans le plan +skeleton Tauri contrôlé (d) / DEFER +``` + +`ROADMAP.md` conserve `0.0.5` en cours jusqu'à la promotion stable, `0.1.0` comme prochaine release engagée et le skeleton Tauri contrôlé comme trajectoire différée sans numéro de release. Le prompt `006` conserve ce `DEFER` comme condition à réexaminer, sans en faire une obligation de `0.1.0`. + +## Tests et audits documentaires + +La suite Python complète a réussi : + +```text +Ran 48 tests in 0.725s +OK +``` + +Les trois audits Markdown ont affiché : + +```text +Markdown header audit: clean (166 file(s)) +Markdown table audit: clean (8 table(s), 166 file(s)) +Markdown link audit: clean (161 local link(s), 166 file(s)) +``` + +L'audit d'intégration RC a affiché : + +```text +0.0.5 rc.1 integration audit: clean (16 prior histories, frozen scope, candidate changelog, roadmap/prompt 006 verified) +``` + +Il confirme les `16` histories antérieurs avec leurs statuts attendus, l'absence de history `rc.1` avant clôture, la présence des audits Rust réconciliés, le profil Tauri 2, l'absence de skeleton Tauri `003`, le changelog candidat et la préparation du prompt `006`. + +## Scope Git + +`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic. Après ajout des fichiers RC, le statut indexé transmis est exactement : + +```text +M CHANGELOG.md +M VERSION +A deltas/0.0.5/rc.1.md +M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md +``` + +La revue confirme qu'aucun owner, skeleton, template, script d'audit ou domaine technique nouveau n'entre dans la RC. `ROADMAP.md` et `prompts/006-V0_1_0_START_PROMPT.md` sont vérifiés mais non modifiés. + +## Transition + +Appliquer ce history puis committer/pousser `0.0.5-rc.1`. La tranche suivante est `rel.001`, promotion stable pré-tag : elle peut uniquement synchroniser la présentation stable et fermer le plan, sans rouvrir le scope fonctionnel.