diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e49c5b..8d1960c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ - + # Changelog Project Governance Rules @@ -9,7 +9,7 @@ Les tranches `alpha`, `beta`, `rc`, fixes, validations, audits et détails de d ## 0.1.5 (candidate) -- clarifie la sémantique normative de PGR : `MUST / MUST NOT` restent obligatoires, `SHOULD / SHOULD NOT` deviennent explicitement des recommandations fortes non obligatoires et `MAY` reste une possibilité neutre ; +- clarifie la sémantique normative de PGR : `MUST / MUST NOT` restent obligatoires, `SHOULD / SHOULD NOT` expriment explicitement une forte recommandation non obligatoire et `MAY` reste une possibilité neutre ; - aligne l’adoption et la validation afin qu’un simple écart à un `SHOULD / SHOULD NOT` ne crée à lui seul ni non-conformité, ni `FAIL` de gate, ni `OVERRIDE` ou justification obligatoire ; - formalise l’autonomie après instanciation/adoption : la baseline locale et ses owners deviennent l’autorité des sessions/releases suivantes, tandis qu’un réalignement PGR futur reste une opération explicite et bornée fondée sur un snapshot choisi ; - fixe la frontière PGR / SaseDev Knowledge : PGR reste auto-suffisant pour ses contrats normatifs, tandis que howtos, recettes, snippets, exemples, dépannage et variantes pratiques peuvent vivre dans une base de connaissances séparée sans devenir une dépendance de PGR ; diff --git a/VERSION b/VERSION index 9ff1753..f0dbab6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.5-rc.1 +0.1.5-rc.1.fix.1 diff --git a/deltas/0.1.5/rc.1.fix.1.md b/deltas/0.1.5/rc.1.fix.1.md new file mode 100644 index 0000000..cba0952 --- /dev/null +++ b/deltas/0.1.5/rc.1.fix.1.md @@ -0,0 +1,165 @@ + + + +# Delta 0.1.5-rc.1.fix.1 — alignement des assertions documentaires RC + +## Diagnostic + +La gate opérateur de `0.1.5-rc.1` a validé le freeze fonctionnel, les `55/55` tests Python, les audits d'hygiène/Markdown et le scope Git, mais trois assertions exactes prévues par `rc.1` n'ont produit aucune correspondance : + +```text +grep -F 'forte recommandation non obligatoire' CHANGELOG.md +grep -F 'aucun numéro de version Games n’est figé' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +grep -F 'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +``` + +`history/0.1.5/rc.1.md` enregistre donc `FAIL`. + +Le diagnostic est strictement documentaire : les contrats normatifs, la décision d'horizon, le prompt `012` et les validations techniques restent acquis. + +## Objet + +Aligner les formulations de présentation avec les chaînes canoniques exigées par la gate RC sans rouvrir aucun owner normatif et sans commencer `rel.1` ou `0.1.6`. + +Version après application : + +```text +0.1.5-rc.1.fix.1 +``` + +## Scope + +REPLACE : + +```text +VERSION +CHANGELOG.md +docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +docs/studies/005-V0_1_5_HORIZON_REVIEW.md +``` + +ADD : + +```text +deltas/0.1.5/rc.1.fix.1.md +``` + +DELETE : aucun. + +`README.md`, `ROADMAP.md`, `docs/000-README.md`, le prompt `012`, tous les owners normatifs, skeletons, templates, validations et histories antérieurs MUST rester inchangés. + +## Corrections + +`CHANGELOG.md` passe en révision `21` et emploie la formulation canonique `forte recommandation non obligatoire` pour `SHOULD / SHOULD NOT`. + +`docs/studies/005-V0_1_5_HORIZON_REVIEW.md` passe en révision `2` et : + +- contient explicitement la sous-chaîne `aucun numéro de version Games n’est figé` ; +- expose explicitement la classification canonique `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A` avant son détail ligne par ligne. + +`docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md` passe en révision `7` et conserve la vérité opérateur `rc.1 FAIL` ainsi que le scope borné du présent fix. + +Aucune décision d'horizon n'est modifiée. + +## Gate opérateur + +Après commit/push de `rc.1` avec son history `FAIL`, appliquer ce delta puis exécuter : + +```bash +cat VERSION + +test -f history/0.1.5/rc.1.md +test -f deltas/0.1.5/rc.1.fix.1.md +test ! -e history/0.1.5/rc.1.fix.1.md + +grep -Fx '0.1.5-rc.1.fix.1' VERSION +grep -A2 '^## Statut$' history/0.1.5/rc.1.md | grep -Fx 'FAIL' + +grep -Fx '' CHANGELOG.md +grep -F 'forte recommandation non obligatoire' CHANGELOG.md + +grep -Fx '' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +grep -F 'aucun numéro de version Games n’est figé' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +grep -F 'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +grep -F 'conserver `0.1.6` comme prochaine release' docs/studies/005-V0_1_5_HORIZON_REVIEW.md +grep -F 'Aucun `0.1.9` n’est réservé' docs/studies/005-V0_1_5_HORIZON_REVIEW.md + +grep -Fx '' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +grep -F 'Gate `rc.1` en échec documentaire et correctif `rc.1.fix.1`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +grep -F 'history/0.1.5/rc.1.md` enregistre donc le résultat réel `FAIL`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +grep -F '`rel.1` reste bloqué tant que `rc.1.fix.1` n’est pas validé `PASS`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md + +grep -Fx '' README.md +grep -Fx '' ROADMAP.md +grep -Fx '' docs/000-README.md +grep -Fx '' prompts/012-V0_1_6_START_PROMPT.md + +grep -Fx '' RULES.md +grep -Fx '' docs/rules/210-WORKFLOW.md +grep -Fx '' docs/rules/230-ADOPTION.md +grep -Fx '' docs/rules/300-DOCUMENTATION.md +grep -Fx '' docs/rules/400-VALIDATION.md + +python3 -B -c "from pathlib import Path; expected={'0.0.1':12,'0.0.2':12,'0.0.3':10,'0.0.4':9,'0.0.5':19,'0.1.0':10,'0.1.1':11,'0.1.2':7,'0.1.3':6,'0.1.4':7}; assert all({p.name for p in Path('deltas',r).glob('*.md')} == {p.name for p in Path('history',r).glob('*.md')} and len(list(Path('deltas',r).glob('*.md'))) == n for r,n in expected.items()); assert {p.name for p in Path('deltas/0.1.5').glob('*.md')} == {'alpha.1.md','alpha.1.fix.1.md','alpha.2.md','alpha.3.md','alpha.4.md','beta.1.md','rc.1.md','rc.1.fix.1.md'}; assert {p.name for p in Path('history/0.1.5').glob('*.md')} == {'alpha.1.md','alpha.1.fix.1.md','alpha.2.md','alpha.3.md','alpha.4.md','beta.1.md','rc.1.md'}; print('0.1.5 rc.1.fix.1 history boundary: clean (110 closed prior pairs, current rc.1.fix.1 pending)')" + +git diff --exit-code -- history/0.1.4 + +git diff --exit-code -- README.md ROADMAP.md docs/000-README.md \ + prompts/012-V0_1_6_START_PROMPT.md RULES.md \ + docs/objectives/001-PROJECT_OBJECTIVES.md \ + docs/architecture/002-GOVERNANCE_ARCHITECTURE.md \ + docs/rules/210-WORKFLOW.md docs/rules/220-SKELETONS.md \ + docs/rules/230-ADOPTION.md docs/rules/300-DOCUMENTATION.md \ + docs/rules/400-VALIDATION.md docs/rules/500-LANGUAGES.md \ + docs/rules/530-TYPESCRIPT.md docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md \ + docs/rules/700-FRAMEWORKS.md \ + docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md \ + docs/skeletons/003-WEB_FRONTEND.md \ + docs/templates/003-NEW_SESSION_PROMPT.md \ + docs/templates/007-EXISTING_PROJECT_ADOPTION.md \ + docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md + +python3 -B -m unittest discover -s tests -v + +python3 -B scripts/audit_text_hygiene.py \ + README.md RULES.md ROADMAP.md CHANGELOG.md VERSION \ + docs deltas history prompts scripts tests templates .gitignore .settings + +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 status --short + +git add VERSION CHANGELOG.md \ + docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md \ + docs/studies/005-V0_1_5_HORIZON_REVIEW.md \ + deltas/0.1.5/rc.1.fix.1.md + +git diff --cached --check +git status --short +``` + +## Scope Git attendu + +```text +M CHANGELOG.md +M VERSION +A deltas/0.1.5/rc.1.fix.1.md +M docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +M docs/studies/005-V0_1_5_HORIZON_REVIEW.md +``` + +## Transition + +### PASS + +Produire `history/0.1.5/rc.1.fix.1.md`, committer/pousser `0.1.5-rc.1.fix.1`, puis préparer `rel.1` comme promotion stable mécanique sans nouveau scope. + +### FAIL + +Enregistrer le résultat réel dans `history/0.1.5/rc.1.fix.1.md` et poursuivre sous `rc.1.fix.N`. Ne pas commencer `rel.1` tant que le correctif RC n'est pas `PASS`. diff --git a/docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md b/docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md index 4d7ae28..82cc1d4 100644 --- a/docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +++ b/docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md @@ -1,5 +1,5 @@ - + # Plan 0.1.5 — sémantique normative, autonomie et frontière PGR / Knowledge @@ -289,6 +289,19 @@ Le prompt `012-V0_1_6_START_PROMPT.md` prépare donc une reprise `0.1.6-alpha.1` La RC ne commence ni l'adoption Games, ni KSP, ni les audits `0.1.8`. +## Gate `rc.1` en échec documentaire et correctif `rc.1.fix.1` + +La gate opérateur de `rc.1` du `2026-10-01` conserve les `55/55` tests `PASS`, les audits documentaires propres, le freeze des owners et le scope Git attendu, mais trois assertions textuelles exactes du delta n'ont produit aucune correspondance. Le history `history/0.1.5/rc.1.md` enregistre donc le résultat réel `FAIL`. + +Le correctif `rc.1.fix.1` est borné à la présentation documentaire : + +- employer dans `CHANGELOG.md` la formule canonique `forte recommandation non obligatoire` attendue par la gate ; +- rendre explicite dans la revue d'horizon que `aucun numéro de version Games n’est figé` ; +- matérialiser la classification canonique `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A` dans cette même étude ; +- ne modifier aucun owner normatif, skeleton, template, contrat de validation, roadmap, handoff `012` ou history antérieur. + +`rel.1` reste bloqué tant que `rc.1.fix.1` n’est pas validé `PASS`. + ## Trajectoire de release ### `alpha.1` — intake, audit transversal et plan diff --git a/docs/studies/005-V0_1_5_HORIZON_REVIEW.md b/docs/studies/005-V0_1_5_HORIZON_REVIEW.md index 189ed87..14cddba 100644 --- a/docs/studies/005-V0_1_5_HORIZON_REVIEW.md +++ b/docs/studies/005-V0_1_5_HORIZON_REVIEW.md @@ -1,5 +1,5 @@ - + # Revue d’horizon 0.1.5 — adoption Games après stabilisation des contrats transversaux @@ -51,7 +51,7 @@ La future session `0.1.6` doit disposer de deux baselines autoritaires distincte 1. la stable PGR `v0.1.5` réellement publiée et vérifiée post-tag ; 2. une archive récente et explicitement autoritaire de `sasedev-games`, fournie comme corpus d’adoption. -Aucun numéro de version Games n’est figé par cette étude. Le corpus Games doit être celui réellement fourni au démarrage de la session ; ne pas reconstruire ou supposer une baseline à partir d’un ancien historique PGR. +Cette revue confirme qu’aucun numéro de version Games n’est figé par cette étude. Le corpus Games doit être celui réellement fourni au démarrage de la session ; ne pas reconstruire ou supposer une baseline à partir d’un ancien historique PGR. L’absence d’un corpus Games autoritaire empêche de commencer l’adoption réelle, mais n’autorise pas à inventer ses décisions, son architecture ou son applicabilité technologique. @@ -59,7 +59,7 @@ L’absence d’un corpus Games autoritaire empêche de commencer l’adoption r `0.1.6` doit commencer par un audit, pas par une réécriture globale. -Pour chaque règle, profil, skeleton, template ou validation PGR potentiellement applicable, la session doit décider explicitement : +Pour chaque règle, profil, skeleton, template ou validation PGR potentiellement applicable, la session doit décider explicitement. La classification canonique est `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A` : ```text ADOPT intégré dans la baseline locale Games diff --git a/history/0.1.5/rc.1.fix.1.md b/history/0.1.5/rc.1.fix.1.md new file mode 100644 index 0000000..d71e0b4 --- /dev/null +++ b/history/0.1.5/rc.1.fix.1.md @@ -0,0 +1,133 @@ + + + +# PGR 0.1.5 — history `rc.1.fix.1` + +## Statut + +PASS + +## Objet + +Clôture opérateur du correctif documentaire `0.1.5-rc.1.fix.1`. + +Le correctif aligne exactement les trois formulations qui avaient fait échouer `rc.1`, sans rouvrir les contrats normatifs, le handoff `012`, la roadmap ou les owners gelés. + +## Baseline opérateur + +La tranche `0.1.5-rc.1` avec son history `FAIL` a été committée puis publiée avant application du correctif : + +```text +commit rc.1 4d7021b +push ec1a296..4d7021b master -> master +``` + +Une première tentative de `git push origin master` a été interrompue au prompt d'identification puis immédiatement rejouée avec succès. Elle n'a modifié ni le commit ni le contenu de la tranche. + +La version observée pendant la gate du correctif est : + +```text +0.1.5-rc.1.fix.1 +``` + +`history/0.1.5/rc.1.md` est présent et conserve le statut réel `FAIL`. Le history du présent correctif était absent pendant la gate. + +## Assertions documentaires corrigées + +PASS : + +- `CHANGELOG.md` est en révision `21` et contient la formulation canonique `forte recommandation non obligatoire` ; +- `docs/studies/005-V0_1_5_HORIZON_REVIEW.md` est en révision `2` et contient explicitement `aucun numéro de version Games n’est figé` ; +- la même étude contient la classification canonique `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A` ; +- la décision de conserver `0.1.6` comme prochaine release est inchangée ; +- aucun `0.1.9` n'est réservé ; +- `docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md` est en révision `7`, conserve la vérité `rc.1 FAIL` et bloque `rel.1` jusqu'au présent `PASS`. + +## Owners et surfaces gelés + +PASS : + +```text +README.md version 33 +ROADMAP.md version 18 +docs/000-README.md version 52 +prompts/012-V0_1_6_START_PROMPT.md version 1 +RULES.md version 16 +docs/rules/210-WORKFLOW.md version 9 +docs/rules/230-ADOPTION.md version 3 +docs/rules/300-DOCUMENTATION.md version 5 +docs/rules/400-VALIDATION.md version 2 +``` + +Le contrôle `git diff --exit-code` confirme également l'absence de modification des owners, skeletons et templates explicitement hors scope du fix. + +## Frontière delta/history + +Résultat opérateur : + +```text +0.1.5 rc.1.fix.1 history boundary: clean (110 closed prior pairs, current rc.1.fix.1 pending) +``` + +La gate observe donc : + +- toutes les releases `0.0.1` à `0.1.4` avec leurs couples delta/history attendus ; +- pour `0.1.5`, les histories de `alpha.1`, `alpha.1.fix.1`, `alpha.2`, `alpha.3`, `alpha.4`, `beta.1` et `rc.1` ; +- `rc.1.fix.1` comme seule tranche courante encore sans history pendant sa validation. + +## Tests Python + +Commande : + +```text +python3 -B -m unittest discover -s tests -v +``` + +Résultat : + +```text +Ran 55 tests in 0.898s +OK +``` + +Soit `55/55` PASS. + +## Hygiène texte + +Résultat : + +```text +Text hygiene audit: clean (327 file(s)) +``` + +## Audits Markdown + +Résultats : + +```text +Markdown header audit: clean (300 file(s)) +Markdown table audit: clean (11 table(s), 300 file(s)) +Markdown link audit: clean (375 local link(s), 300 file(s)) +``` + +## Git + +`git diff --check` puis `git diff --cached --check` n'ont remonté aucune anomalie. + +Scope final observé : + +```text +M CHANGELOG.md +M VERSION +A deltas/0.1.5/rc.1.fix.1.md +M docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md +M docs/studies/005-V0_1_5_HORIZON_REVIEW.md +``` + +Ce scope correspond exactement au delta prévu. + +## Conclusion + +`0.1.5-rc.1.fix.1` est `PASS`. + +Les trois écarts documentaires de `rc.1` sont corrigés sans changement fonctionnel ou normatif. La candidate est donc éligible à `rel.1`, qui doit rester une promotion stable mécanique sans commencer `0.1.6`.