0.0.2-rc.1
This commit is contained in:
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,5 +1,5 @@
|
||||
<!-- file: CHANGELOG.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# 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.2
|
||||
|
||||
- introduit le modèle de profils PGR avec ownership normatif, applicabilité, composition du général vers le spécifique et overrides bornés ;
|
||||
- matérialise les familles `500 — languages / ecosystems` et `600 — platforms` sans créer prématurément les familles frameworks ou architecture ;
|
||||
- ajoute les premiers profils réutilisables `510 — Rust / Cargo`, `520 — Java / Maven / Gradle` et `610 — Android` ;
|
||||
- formalise notamment les politiques de toolchain/target, dépendances et build, visibilité/API, safety/FFI, structure canonique, compatibilité Android, packaging et niveaux de preuve ;
|
||||
- ajoute deux audits PGR read-only et monotâches : alignement des tableaux Markdown et existence des cibles de liens Markdown locaux ;
|
||||
- confirme que Rust/JNI, Web/Vite/WASM, Tauri, C/C++/CMake, PHP/Composer et Python restent différés jusqu'à une release où leur contenu justifie un owner réel.
|
||||
|
||||
## 0.0.1
|
||||
|
||||
- établit la fondation normative de PGR : force `MUST` / `SHOULD` / `MAY`, hiérarchie des scopes et principe de proportionnalité ;
|
||||
|
||||
158
deltas/0.0.2/rc.1.md
Normal file
158
deltas/0.0.2/rc.1.md
Normal file
@@ -0,0 +1,158 @@
|
||||
<!-- file: deltas/0.0.2/rc.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.0.2-rc.1 — gel des profils et préparation de release
|
||||
|
||||
## Baseline
|
||||
|
||||
Version attendue avant application :
|
||||
|
||||
```text
|
||||
0.0.2-beta.1.fix.1
|
||||
```
|
||||
|
||||
Le history `history/0.0.2/beta.1.fix.1.md` MUST avoir été appliqué et committé avant ce delta.
|
||||
|
||||
Version après application :
|
||||
|
||||
```text
|
||||
0.0.2-rc.1
|
||||
```
|
||||
|
||||
## Objet
|
||||
|
||||
Entrer en release candidate après réconciliation beta.
|
||||
|
||||
La tranche :
|
||||
|
||||
- gèle le scope `0.0.2` ;
|
||||
- prépare l'entrée candidate stable `0.0.2` du changelog ;
|
||||
- met à jour le plan avec l'état réellement observé de la beta et le freeze RC ;
|
||||
- ajoute `prompts/003-V0_0_3_START_PROMPT.md` ;
|
||||
- inclut dans ce prompt le texte manuel canonique de reprise et la règle de transmission du futur rapport `publish.001` ;
|
||||
- exécute la gate documentaire complète applicable à PGR.
|
||||
|
||||
Aucun nouveau profil technologique, famille de règles ou audit n'est ajouté en RC.
|
||||
|
||||
## Scope gelé
|
||||
|
||||
Les owners technologiques de la release restent exactement :
|
||||
|
||||
```text
|
||||
510 — Rust / Cargo
|
||||
520 — Java / Maven / Gradle
|
||||
610 — Android
|
||||
```
|
||||
|
||||
Les audits PGR ajoutés pendant la release restent exactement :
|
||||
|
||||
```text
|
||||
scripts/audit_markdown_tables.py
|
||||
scripts/audit_markdown_links.py
|
||||
```
|
||||
|
||||
Les profils différés restent différés.
|
||||
|
||||
## Scope
|
||||
|
||||
REPLACE :
|
||||
|
||||
```text
|
||||
VERSION
|
||||
CHANGELOG.md
|
||||
docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md
|
||||
```
|
||||
|
||||
ADD :
|
||||
|
||||
```text
|
||||
prompts/003-V0_0_3_START_PROMPT.md
|
||||
deltas/0.0.2/rc.1.md
|
||||
```
|
||||
|
||||
DELETE : aucun.
|
||||
|
||||
## Validation opérateur
|
||||
|
||||
```bash
|
||||
test "$(cat VERSION)" = "0.0.2-rc.1"
|
||||
|
||||
test -f prompts/003-V0_0_3_START_PROMPT.md
|
||||
test -f deltas/0.0.2/rc.1.md
|
||||
|
||||
grep -F '## 0.0.2' CHANGELOG.md
|
||||
grep -F '510 — Rust / Cargo' CHANGELOG.md
|
||||
grep -F '520 — Java / Maven / Gradle' CHANGELOG.md
|
||||
grep -F '610 — Android' CHANGELOG.md
|
||||
|
||||
grep -F 'Le scope RC est gelé' docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md
|
||||
grep -F 'beta.1.fix.1 PASS' docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md
|
||||
|
||||
grep -F 'pgr-0.0.2-publish.001-report.md' prompts/003-V0_0_3_START_PROMPT.md
|
||||
grep -F 'Prompt manuel de nouvelle session' prompts/003-V0_0_3_START_PROMPT.md
|
||||
grep -F 'Partir de v0.0.2' prompts/003-V0_0_3_START_PROMPT.md
|
||||
grep -F 'Ce texte doit être présenté spontanément' prompts/003-V0_0_3_START_PROMPT.md
|
||||
|
||||
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 - <<'PY'
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
roots = [Path(name) for name in ('README.md', 'RULES.md', 'ROADMAP.md', 'CHANGELOG.md')]
|
||||
for directory in ('docs', 'deltas', 'history', 'prompts'):
|
||||
roots.extend(Path(directory).rglob('*.md'))
|
||||
|
||||
errors = []
|
||||
for path in sorted(set(roots)):
|
||||
lines = path.read_text(encoding='utf-8').splitlines()
|
||||
expected = f'<!-- file: {path.as_posix()} -->'
|
||||
if len(lines) < 2 or lines[0] != expected:
|
||||
errors.append(f'{path}: invalid file header')
|
||||
elif re.fullmatch(r'<!-- version: [1-9][0-9]* -->', lines[1]) is None:
|
||||
errors.append(f'{path}: invalid version header')
|
||||
|
||||
if errors:
|
||||
raise SystemExit('
|
||||
'.join(errors))
|
||||
print(f'Markdown header audit: clean ({len(set(roots))} file(s))')
|
||||
PY
|
||||
|
||||
git diff --check
|
||||
|
||||
git add VERSION CHANGELOG.md docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md prompts/003-V0_0_3_START_PROMPT.md deltas/0.0.2/rc.1.md
|
||||
|
||||
git diff --cached --check
|
||||
|
||||
git status --short
|
||||
```
|
||||
|
||||
La sortie attendue avant ajout du history est exactement :
|
||||
|
||||
```text
|
||||
M CHANGELOG.md
|
||||
M VERSION
|
||||
A deltas/0.0.2/rc.1.md
|
||||
M docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md
|
||||
A prompts/003-V0_0_3_START_PROMPT.md
|
||||
```
|
||||
|
||||
## Revue opérateur complémentaire
|
||||
|
||||
- confirmer qu'aucun nouveau profil n'est introduit en RC ;
|
||||
- confirmer que le changelog décrit la release utilement sans recopier la chronologie des fixes ;
|
||||
- confirmer que le prompt `0.0.3` impose une nouvelle vérification de l'archive taggée plutôt que de faire confiance au report précédent ;
|
||||
- confirmer que le prompt manuel de nouvelle session est fourni spontanément et précise explicitement le report `publish.001` à joindre après publication ;
|
||||
- confirmer que `0.0.3` reste centré sur templates initiaux et patterns d'audit, sans absorber les skeleton specifications de `0.0.4`.
|
||||
|
||||
## Transition
|
||||
|
||||
### PASS
|
||||
|
||||
Créer et appliquer séparément `history/0.0.2/rc.1.md`, committer la RC, puis préparer la promotion stable `rel.001`.
|
||||
|
||||
### FAIL
|
||||
|
||||
Rester dans `0.0.2-rc.1.fix.M` jusqu'à correction. Aucun nouveau scope fonctionnel ne doit être introduit dans un fix RC.
|
||||
@@ -1,11 +1,11 @@
|
||||
<!-- file: docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md -->
|
||||
<!-- version: 4 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Plan 0.0.2 — premiers profils de règles technologiques
|
||||
|
||||
## Statut
|
||||
|
||||
Plan actif créé pendant `0.0.2-alpha.1` après audit de la baseline stable `v0.0.1` fournie sous forme d'archive ZIP issue du tag Gitea.
|
||||
Plan actif entré en release candidate pendant `0.0.2-rc.1`, après cadrage en `alpha.1`, matérialisation des profils retenus puis réconciliation beta.
|
||||
|
||||
La baseline `v0.0.1` est cohérente pour démarrer `0.0.2`. L'absence de `.git` dans cette archive est normale et n'est pas une anomalie de baseline.
|
||||
|
||||
@@ -159,6 +159,8 @@ alpha.3 PASS Rust / Cargo
|
||||
alpha.4 FAIL incohérence locale entre texte et grep de gate
|
||||
alpha.4.fix.1 PASS cohérence de gate rétablie
|
||||
alpha.5 PASS Android
|
||||
beta.1 FAIL quoting Bash invalide dans une commande de gate
|
||||
beta.1.fix.1 PASS quoting de gate corrigé sans changement de scope
|
||||
```
|
||||
|
||||
Cette synthèse décrit uniquement la trajectoire du plan ; les preuves détaillées restent dans les histories immuables correspondants.
|
||||
@@ -177,6 +179,10 @@ Aucune famille `700` ou `800` n'est activée. Aucun profil différé n'est ramen
|
||||
|
||||
Geler le scope, préparer l'entrée candidate `0.0.2` du changelog, finaliser le prompt `0.0.3` et exécuter la gate documentaire complète applicable.
|
||||
|
||||
Le scope RC est gelé sur les trois profils matérialisés (`510`, `520`, `610`) et les deux audits génériques monotâches (`tables`, `liens locaux`). Aucun nouveau profil, owner de famille ou audit technologique n'est admis sans correction strictement nécessaire ou REPLAN.
|
||||
|
||||
Le prompt `0.0.3` doit aussi fournir explicitement le texte manuel de nouvelle session et indiquer le rôle du futur rapport post-tag `publish.001`, afin que cette information ne dépende plus d'une demande ad hoc de l'opérateur.
|
||||
|
||||
### stable — 0.0.2
|
||||
|
||||
Promouvoir mécaniquement la RC validée, finaliser les métadonnées de release, enregistrer `rel.001`, commit/tag `v0.0.2`, puis vérifier séparément l'archive publiée issue du tag.
|
||||
|
||||
115
history/0.0.2/rc.1.md
Normal file
115
history/0.0.2/rc.1.md
Normal file
@@ -0,0 +1,115 @@
|
||||
<!-- file: history/0.0.2/rc.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# History 0.0.2-rc.1 — gel du scope et préparation de clôture
|
||||
|
||||
## Statut
|
||||
|
||||
FAIL
|
||||
|
||||
La tranche `0.0.2-rc.1` n'est pas enregistrée `PASS` telle quelle.
|
||||
|
||||
Les contrôles documentaires principaux, les deux audits PGR et les contrôles Git ont réussi, mais l'audit inline des headers Markdown contenu dans la gate possède une chaîne Python invalide et se termine par une `SyntaxError`.
|
||||
|
||||
## Baseline
|
||||
|
||||
La tranche précédente `0.0.2-beta.1.fix.1` a été enregistrée `PASS`, puis committée et poussée sous le commit observé :
|
||||
|
||||
```text
|
||||
d0ac835
|
||||
```
|
||||
|
||||
Version contrôlée après application de `rc.1` :
|
||||
|
||||
```text
|
||||
0.0.2-rc.1
|
||||
```
|
||||
|
||||
## Contrôles réussis observés
|
||||
|
||||
La version, le prompt de reprise et le delta RC ont été confirmés.
|
||||
|
||||
Le `CHANGELOG.md` contient l'entrée `0.0.2` et les trois profils attendus :
|
||||
|
||||
```text
|
||||
510 — Rust / Cargo
|
||||
520 — Java / Maven / Gradle
|
||||
610 — Android
|
||||
```
|
||||
|
||||
Le plan confirme le gel du scope RC et l'état `PASS` de `beta.1.fix.1`.
|
||||
|
||||
Le prompt `prompts/003-V0_0_3_START_PROMPT.md` contient :
|
||||
|
||||
```text
|
||||
pgr-0.0.2-publish.001-report.md
|
||||
Prompt manuel de nouvelle session
|
||||
Partir de v0.0.2
|
||||
Ce texte doit être présenté spontanément
|
||||
```
|
||||
|
||||
Les deux audits PGR ont réussi :
|
||||
|
||||
```text
|
||||
Markdown table audit: clean (2 table(s), 68 file(s))
|
||||
Markdown link audit: clean (49 local link(s), 68 file(s))
|
||||
```
|
||||
|
||||
`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic.
|
||||
|
||||
Le scope Git observé avant le présent history est exactement :
|
||||
|
||||
```text
|
||||
M CHANGELOG.md
|
||||
M VERSION
|
||||
A deltas/0.0.2/rc.1.md
|
||||
M docs/plans/002-V0_0_2_RULE_PROFILES_PLAN.md
|
||||
A prompts/003-V0_0_3_START_PROMPT.md
|
||||
```
|
||||
|
||||
## Défaut exact
|
||||
|
||||
La gate RC contient un audit Python inline destiné à contrôler les deux premiers headers de chaque fichier Markdown.
|
||||
|
||||
Lors de son exécution, la séquence destinée à joindre les erreurs avec un saut de ligne a été matérialisée ainsi :
|
||||
|
||||
```text
|
||||
raise SystemExit('
|
||||
'.join(errors))
|
||||
```
|
||||
|
||||
Python l'interprète comme une chaîne littérale non terminée et produit :
|
||||
|
||||
```text
|
||||
SyntaxError: unterminated string literal
|
||||
```
|
||||
|
||||
Le défaut appartient uniquement au script inline de validation livré dans `deltas/0.0.2/rc.1.md`.
|
||||
|
||||
Aucun défaut de header Markdown n'a été démontré par cette exécution, puisque l'audit n'a pas pu s'exécuter jusqu'au contrôle des fichiers.
|
||||
|
||||
## Décision
|
||||
|
||||
Aucun REPLAN n'est requis.
|
||||
|
||||
Le correctif reste strictement limité à la gate RC :
|
||||
|
||||
```text
|
||||
0.0.2-rc.1.fix.1
|
||||
```
|
||||
|
||||
Le delta RC livré reste immuable.
|
||||
|
||||
Le fix rejoue l'audit des headers avec une forme Python qui n'utilise aucune séquence d'échappement ambiguë : chaque erreur est imprimée individuellement puis le processus sort avec le code `1`.
|
||||
|
||||
Aucune règle, aucun profil, aucun audit PGR permanent et aucun contenu fonctionnel RC n'est ajouté ou modifié.
|
||||
|
||||
## Résultat
|
||||
|
||||
`0.0.2-rc.1` est enregistré `FAIL`.
|
||||
|
||||
La seule transition autorisée est :
|
||||
|
||||
```text
|
||||
0.0.2-rc.1.fix.1
|
||||
```
|
||||
146
prompts/003-V0_0_3_START_PROMPT.md
Normal file
146
prompts/003-V0_0_3_START_PROMPT.md
Normal file
@@ -0,0 +1,146 @@
|
||||
<!-- file: prompts/003-V0_0_3_START_PROMPT.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Prompt de démarrage 0.0.3 — templates initiaux et audits réutilisables
|
||||
|
||||
## Base et cible
|
||||
|
||||
Dépôt canonique :
|
||||
|
||||
```text
|
||||
https://git.sasedev.com/Sasedev/pgr
|
||||
```
|
||||
|
||||
Baseline attendue au démarrage effectif de `0.0.3` : archive source issue du tag stable :
|
||||
|
||||
```text
|
||||
v0.0.2
|
||||
```
|
||||
|
||||
L'archive taggée Gitea est la baseline autoritaire du dépôt. Elle peut légitimement ne pas contenir `.git`.
|
||||
|
||||
Version cible :
|
||||
|
||||
```text
|
||||
0.0.3
|
||||
```
|
||||
|
||||
Première tranche attendue :
|
||||
|
||||
```text
|
||||
0.0.3-alpha.1
|
||||
```
|
||||
|
||||
## Entrées de reprise à fournir
|
||||
|
||||
La nouvelle session doit recevoir au minimum :
|
||||
|
||||
```text
|
||||
pgr-v0.0.2.zip
|
||||
```
|
||||
|
||||
après téléchargement depuis le tag Gitea `v0.0.2`.
|
||||
|
||||
Après la publication stable, la session de clôture doit également produire une preuve post-tag séparée, normalement :
|
||||
|
||||
```text
|
||||
pgr-0.0.2-publish.001-report.md
|
||||
```
|
||||
|
||||
Si ce rapport existe et que `publish.001` est `PASS`, il SHOULD être fourni à la nouvelle session avec l'archive taggée. Il complète la preuve d'intake mais ne remplace jamais l'audit de l'archive par la nouvelle session et ne fait pas partie du tag stable.
|
||||
|
||||
Si le rapport n'a pas été produit ou n'est pas disponible, la nouvelle session doit l'indiquer explicitement au lieu d'en supposer l'existence.
|
||||
|
||||
## Prompt manuel de nouvelle session
|
||||
|
||||
Après `publish.001 PASS`, le texte manuel canonique à utiliser pour ouvrir la session `0.0.3` est :
|
||||
|
||||
```text
|
||||
Partir de v0.0.2 (téléchargé via le lien ZIP de la version taggée sur Gitea) et du rapport post-tag pgr-0.0.2-publish.001-report.md, lire et exécuter prompts/003-V0_0_3_START_PROMPT.md, faire une vérification complète de l'archive et surtout des règles, de la gouvernance, de la structure documentaire, des deltas/histories et de la cohérence globale avant de démarrer 0.0.3-alpha.1.
|
||||
```
|
||||
|
||||
Ce texte doit être présenté spontanément à l'opérateur pendant la clôture stable de `0.0.2`; il ne doit pas dépendre d'une demande supplémentaire.
|
||||
|
||||
## Mission
|
||||
|
||||
`0.0.3` doit introduire les premiers templates techniques réutilisables et les premiers patterns d'audit issus de besoins réellement démontrés par les profils `0.0.2` et par les projets de référence.
|
||||
|
||||
La release ne doit pas chercher à construire un catalogue exhaustif. `alpha.1` MUST commencer par auditer intégralement la stable `v0.0.2`, vérifier les profils et audits réellement présents, inventorier les templates/patterns qui apportent une valeur immédiate et découper la version en tranches proportionnées avant de matérialiser massivement des fichiers.
|
||||
|
||||
## Acquis de `0.0.2`
|
||||
|
||||
La baseline stable attendue doit notamment contenir :
|
||||
|
||||
```text
|
||||
docs/architecture/003-RULE_PROFILE_MODEL.md
|
||||
docs/rules/500-LANGUAGES.md
|
||||
docs/rules/510-RUST_CARGO.md
|
||||
docs/rules/520-JAVA_MAVEN_GRADLE.md
|
||||
docs/rules/600-PLATFORMS.md
|
||||
docs/rules/610-ANDROID.md
|
||||
scripts/audit_markdown_tables.py
|
||||
scripts/audit_markdown_links.py
|
||||
```
|
||||
|
||||
Les profils matérialisés sont volontairement limités à Rust/Cargo, Java/Maven/Gradle et Android. Les autres domaines restent différés et ne deviennent pas automatiquement le scope de `0.0.3`.
|
||||
|
||||
## Principes pour les templates
|
||||
|
||||
Un template `0.0.3` doit :
|
||||
|
||||
- répondre à un besoin concret et répété ;
|
||||
- avoir un owner et un scope clairs ;
|
||||
- respecter les structures canoniques de l'écosystème ;
|
||||
- rester minimal et paramétrable plutôt que copier un projet complet ;
|
||||
- ne pas figer des versions arbitraires de toolchain ou de dépendances ;
|
||||
- ne pas introduire un générateur tant que la spécification Markdown du template suffit ;
|
||||
- rester distinct d'une skeleton specification complète, réservée à `0.0.4`.
|
||||
|
||||
Les templates de workflow, notamment la forme du prompt manuel de nouvelle session et la transmission explicite d'une preuve `publish.001`, MAY être examinés en `0.0.3` s'ils peuvent être factorisés sans créer un générateur prématuré.
|
||||
|
||||
## Principes pour les audits
|
||||
|
||||
Les audits PGR restent read-only, déterministes et monotâches autant que raisonnablement possible.
|
||||
|
||||
Le point de départ est le besoin réellement éprouvé :
|
||||
|
||||
```text
|
||||
tables Markdown
|
||||
liens Markdown locaux
|
||||
```
|
||||
|
||||
Les audits plus complexes de KSP ou `sasedev-games` sont des corpus de comparaison. `0.0.3` doit les décomposer par propriété stable au lieu de copier leurs scripts combinés tels quels.
|
||||
|
||||
Un audit spécialisé n'est matérialisé que lorsqu'il possède :
|
||||
|
||||
- une propriété objectivement contrôlable ;
|
||||
- un owner documentaire ;
|
||||
- un sujet réel dans un template, skeleton ou projet ;
|
||||
- une valeur distincte d'un compilateur, linter ou build tool officiel.
|
||||
|
||||
## Hors périmètre attendu
|
||||
|
||||
Sauf REPLAN justifié, `0.0.3` ne doit pas encore :
|
||||
|
||||
- créer les skeleton specifications complètes prévues pour `0.0.4` ;
|
||||
- créer un générateur PGR ;
|
||||
- réécrire KSP ou `sasedev-games` ;
|
||||
- matérialiser tous les profils technologiques différés ;
|
||||
- transformer des exemples de configuration en versions obligatoires universelles ;
|
||||
- regrouper plusieurs contrôles indépendants dans un audit monolithique uniquement pour réduire le nombre de scripts.
|
||||
|
||||
## Règles de travail
|
||||
|
||||
Le cycle PGR reste :
|
||||
|
||||
```text
|
||||
delta N
|
||||
→ validation opérateur
|
||||
→ history N
|
||||
→ commit N
|
||||
→ delta N+1
|
||||
```
|
||||
|
||||
Le delta suivant MUST NOT être appliqué avant le commit de la tranche courante.
|
||||
|
||||
Une interruption de session ne crée pas une nouvelle version. Reprendre depuis la dernière tranche réellement committée et son history ; produire un handoff uniquement lorsqu'il apporte une valeur réelle.
|
||||
Reference in New Issue
Block a user