0.1.0-alpha.2

This commit is contained in:
2026-09-26 17:33:23 +02:00
parent c22cf39ba9
commit 62f3d252d8
6 changed files with 382 additions and 9 deletions

View File

@@ -1 +1 @@
0.1.0-alpha.1
0.1.0-alpha.2

201
deltas/0.1.0/alpha.2.md Normal file
View File

@@ -0,0 +1,201 @@
<!-- file: deltas/0.1.0/alpha.2.md -->
<!-- version: 1 -->
# Delta 0.1.0-alpha.2 — clôture stable et identité `rel.N`
## Baseline
Baseline attendue : `0.1.0-alpha.1` committée avec `history/0.1.0/alpha.1.md` en `PASS`.
Cette tranche MUST être appliquée uniquement après le commit/push complet de `alpha.1` ; elle ne doit pas être superposée au workspace encore non committé de la gate précédente.
Version avant application :
```text
0.1.0-alpha.1
```
Version après application :
```text
0.1.0-alpha.2
```
## Objet
Corriger la convention normative de clôture stable avant diffusion plus large de PGR :
- utiliser `rel.1`, `rel.2`, etc. sans padding pour les nouvelles releases ;
- conserver sans renommage tous les artefacts historiques `rel.001*` déjà publiés ;
- distinguer le nom de la tranche de clôture de l'identité du commit stable ;
- rendre explicite qu'une clôture `FAIL`, `PARTIAL` ou `BLOCKED` conserve le suffixe opérationnel dans son commit ;
- rendre explicite que la première tranche `rel.N[/fix.M]` qui obtient réellement le `PASS` stable est committée sous `X.Y.Z` avant création du tag `vX.Y.Z`.
La tranche ne modifie aucun profil technologique, skeleton, template, script d'audit ou convention de publication post-tag `publish.001`.
## Scope
REPLACE :
```text
VERSION
docs/rules/200-GOVERNANCE.md
docs/rules/210-WORKFLOW.md
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
```
ADD :
```text
deltas/0.1.0/alpha.2.md
```
DELETE : aucun.
Le plan actif est révisé parce qu'il enregistre `alpha.1 PASS` et deux horizons différés explicitement décidés pendant la session — audit Python d'un sous-ensemble Clippy après Games/KSP et future famille deployment/operations — sans leur attribuer de numéro ni les absorber dans `0.1.0`.
Aucun `history/0.1.0/alpha.2.md` n'est anticipé avant la gate opérateur.
## Convention obtenue
La représentation future canonique est :
```text
rel.1
rel.1.fix.1
rel.2
...
```
Pour le message du commit de clôture, le défaut PGR devient :
```text
history rel.1 FAIL / PARTIAL / BLOCKED
-> X.Y.Z-rel.1
history rel.1.fix.1 FAIL / PARTIAL / BLOCKED
-> X.Y.Z-rel.1.fix.1
premier history rel.N[/fix.M] PASS établissant réellement la stable
-> X.Y.Z
```
`VERSION` MAY déjà être `X.Y.Z` pendant ces tranches de fermeture : `rel.N` n'est pas une prerelease SemVer. Le tag `vX.Y.Z` intervient uniquement après le commit final `X.Y.Z` contenant le history `PASS` stable.
Les fichiers historiques comme :
```text
deltas/0.0.5/rel.001.md
history/0.0.5/rel.001.md
deltas/0.0.5/rel.001.fix.1.md
history/0.0.5/rel.001.fix.1.md
```
restent intacts.
## Validation opérateur
Après application sur le commit de `0.1.0-alpha.1`, depuis la racine du dépôt :
```bash
test "$(cat VERSION)" = '0.1.0-alpha.2'
test -f history/0.1.0/alpha.1.md
test -f deltas/0.1.0/alpha.2.md
test ! -e history/0.1.0/alpha.2.md
grep -Fx '<!-- version: 5 -->' docs/rules/200-GOVERNANCE.md
grep -Fx '<!-- version: 6 -->' docs/rules/210-WORKFLOW.md
grep -Fx '<!-- version: 2 -->' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
grep -F 'représentation canonique n'utilise pas de zéro de padding' docs/rules/200-GOVERNANCE.md
grep -F 'première tranche de clôture PASS' docs/rules/200-GOVERNANCE.md
grep -F 'history rel.1 FAIL / PARTIAL / BLOCKED' docs/rules/210-WORKFLOW.md
grep -F 'premier history rel.N[/fix.M] PASS qui établit réellement la stable' docs/rules/210-WORKFLOW.md
grep -F 'La présente règle ne renomme pas `publish.001`' docs/rules/210-WORKFLOW.md
grep -F 'sous-ensemble des conventions Rust/Clippy' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
grep -F 'série dédiée au déploiement et à l'exploitation' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.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 - <<'PY'
from pathlib import Path
import re
history = Path('history/0.1.0/alpha.1.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+PASS\s', history)
governance = Path('docs/rules/200-GOVERNANCE.md').read_text(encoding='utf-8')
workflow = Path('docs/rules/210-WORKFLOW.md').read_text(encoding='utf-8')
plan = Path('docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md').read_text(encoding='utf-8')
for phrase in (
'rel.1',
'rel.1.fix.1',
'représentation canonique n\'utilise pas de zéro de padding',
'première tranche de clôture PASS',
'Le commit `X.Y.Z` MUST',
):
assert phrase in governance or phrase in workflow, phrase
for path in (
Path('deltas/0.0.5/rel.001.md'),
Path('history/0.0.5/rel.001.md'),
Path('deltas/0.0.5/rel.001.fix.1.md'),
Path('history/0.0.5/rel.001.fix.1.md'),
):
assert path.is_file(), path
assert 'publish.001' in workflow
assert 'La présente règle ne renomme pas `publish.001`' in workflow
assert 'sous-ensemble des conventions Rust/Clippy' in plan
assert "série dédiée au déploiement et à l'exploitation" in plan
assert '- `( ) 0.1.1`' not in Path('ROADMAP.md').read_text(encoding='utf-8')
print('0.1.0 alpha.2 rel identity audit: clean (rel.N unpadded, historical rel.001 preserved, stable commit identity explicit)')
PY
git diff --check
git add VERSION docs/rules/200-GOVERNANCE.md docs/rules/210-WORKFLOW.md \
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md \
deltas/0.1.0/alpha.2.md
git diff --cached --check
git status --short
```
Le scope indexé attendu avant ajout du history est :
```text
M VERSION
A deltas/0.1.0/alpha.2.md
M docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
M docs/rules/200-GOVERNANCE.md
M docs/rules/210-WORKFLOW.md
```
La revue opérateur doit également confirmer que :
- aucune occurrence historique `rel.001*` n'a été renommée ;
- `publish.001` reste une convention indépendante et n'est pas modifiée par cette tranche ;
- aucune commande de handoff Git automatique n'est encore rendue normative ici — ce sujet appartient à `alpha.3` ;
- les horizons Clippy statique et deployment/operations restent de simples candidats différés dans le plan ;
- aucun profil Web, Java/Android, WASM, Tauri ou serveur n'est ajouté ou modifié.
## Transition
### PASS
Produire `history/0.1.0/alpha.2.md` à partir des résultats réellement observés. Dans la même réponse, si aucune décision nouvelle n'est ouverte, préparer séparément `0.1.0-alpha.3` consacré au handoff automatique des commandes opérateur après history, au commit/push, au tag stable et aux preuves requises pour `publish.001`.
Après remise du history, fournir déjà spontanément le bloc Git exact de fermeture de `alpha.2`, conformément à la décision acquise, même si `alpha.3` sera la tranche qui rendra ce comportement normatif.
### FAIL
Consigner le résultat réel dans le history puis ouvrir `0.1.0-alpha.2.fix.1` ou un REPLAN selon la cause. Aucun élément du handoff automatique prévu pour `alpha.3` ne doit être absorbé silencieusement dans le fix.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md -->
<!-- version: 1 -->
<!-- version: 2 -->
# Plan 0.1.0 — première baseline PGR réutilisable
@@ -156,11 +156,20 @@ Les numéros exacts `0.1.1`, `0.1.2`, etc. ne sont pas réservés dans `alpha.1`
Après cette vague d'adoption `0.1.x`, les axes plus larges — projets documentaires/spécifications tels que `saselang-bible`, généricité hors logiciel et autres familles technologiques — restent candidats pour une trajectoire `0.2.x`/`0.3.x` à décider ultérieurement, sans réservation artificielle aujourd'hui.
Deux horizons supplémentaires sont acquis comme **candidats différés**, sans numéro réservé :
- après application réelle de PGR à Games puis KSP, une release `0.1.x` non prioritaire pourra introduire des audits Python read-only reproduisant uniquement le sous-ensemble des conventions Rust/Clippy vérifiable statiquement sans Cargo ni `rustc`; ces audits devront utiliser les options PGR existantes, documenter explicitement les lints `FULL / LIMITED / UNSUPPORTED` et MUST NOT être présentés comme équivalents à `cargo clippy`, qui reste la validation autoritaire ;
- à plus long terme, une série dédiée au déploiement et à l'exploitation devra être étudiée, potentiellement dans un horizon `0.4.x` ou `0.5.x` mais sans réservation actuelle : reverse proxies tels que Nginx/Apache, bases PostgreSQL/MySQL ou autres, conteneurs Docker/Compose, hébergement Linux/services, environnements et secrets, migrations/backup, health/observabilité et skeletons/audits de déploiement composables.
Ces horizons ne modifient pas la mission de `0.1.0` et ne doivent pas être absorbés par les tranches courantes.
## Trajectoire prévisionnelle de `0.1.0`
### alpha.1 — audit de stable et plan
Vérifier intégralement `v0.0.5`, son rapport post-tag, les owners normatifs, profils, templates, skeletons, audits, chaîne delta/history et décisions différées. Consigner le cadrage présent sans changement normatif ni migration externe.
Statut opérateur : **PASS**.
La stable `v0.0.5`, son rapport post-tag, les owners normatifs, profils, templates, skeletons, audits, chaîne delta/history et décisions différées ont été vérifiés. Le cadrage a été consigné sans changement normatif ni migration externe.
### alpha.2 — clôture stable et identité `rel.N`

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/200-GOVERNANCE.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Governance rules
@@ -77,6 +77,8 @@ vX.Y.Z
`rel.N` MAY identifier une livraison ou un artefact de clôture, mais MUST NOT être traité comme une version produit SemVer.
Pour les nouvelles releases gouvernées par cette convention, `N` commence à `1` et sa représentation canonique n'utilise pas de zéro de padding : `rel.1`, `rel.2`, etc. Les formes historiques déjà publiées telles que `rel.001` restent des snapshots immuables et MUST NOT être renommées rétroactivement.
Avant `1.0.0`, PGR recommande la convention suivante lorsqu'elle correspond au projet :
- `X = 0` indique que le contrat public durable n'est pas encore stabilisé ;
@@ -126,6 +128,16 @@ La promotion stable MUST néanmoins exécuter son propre gate proportionné pour
Le tag stable canonique est `vX.Y.Z`.
La clôture opérationnelle `rel.N[/fix.M]` n'est pas une prerelease SemVer et MAY intervenir alors que `VERSION` porte déjà `X.Y.Z`. En l'absence d'une convention locale explicitement documentée, PGR impose la distinction suivante pour le message du commit de clôture :
```text
rel.1 FAIL / PARTIAL / BLOCKED -> X.Y.Z-rel.1
rel.1.fix.1 FAIL / PARTIAL / BLOCKED -> X.Y.Z-rel.1.fix.1
première tranche de clôture PASS -> X.Y.Z
```
Le commit nommé `X.Y.Z` MUST inclure le history qui établit effectivement le `PASS` stable. Le tag `vX.Y.Z` MUST être créé seulement après ce commit. Une clôture échouée MUST rester identifiable par son nom de tranche et MUST NOT être présentée comme le commit stable final.
La vérification d'une publication ou d'une archive produite après le tag est une preuve distincte de la validation pré-tag.
## Correctifs de tranche

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/210-WORKFLOW.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# Workflow artifact rules
@@ -86,6 +86,8 @@ alpha.3.md
alpha.3.fix.1.md
beta.1.md
rc.1.md
rel.1.md
rel.1.fix.1.md
```
Un delta MUST :
@@ -174,9 +176,26 @@ current delta changes
doivent être présents, alors que le delta suivant MUST rester absent.
Le message de commit MAY suivre les conventions du projet. PGR n'impose pas Conventional Commits, GitFlow ou une topologie universelle de branches.
Pour une tranche alpha, beta, RC ou autre tranche qui n'établit pas la stable, le message de commit MAY suivre les conventions du projet tant que l'état et la tranche restent identifiables. PGR n'impose pas Conventional Commits, GitFlow ou une topologie universelle de branches.
L'important est que l'état et la tranche restent identifiables et que le repository ne mélange pas deux tranches non clôturées.
La clôture stable `rel.N[/fix.M]` possède une règle plus stricte afin de distinguer une tentative de fermeture de l'identité stable réellement obtenue. En l'absence d'un mapping local explicitement documenté :
```text
history rel.1 FAIL / PARTIAL / BLOCKED
-> commit X.Y.Z-rel.1
history rel.1.fix.1 FAIL / PARTIAL / BLOCKED
-> commit X.Y.Z-rel.1.fix.1
premier history rel.N[/fix.M] PASS qui établit réellement la stable
-> commit X.Y.Z
```
Le suffixe opérationnel n'est donc conservé dans le message du commit que tant que la clôture n'a pas obtenu le `PASS` stable. Le commit `X.Y.Z` MUST contenir le delta de clôture concerné et son history `PASS`; il MUST précéder le tag canonique `vX.Y.Z`.
Un projet qui possède une convention de message différente MAY utiliser un mapping équivalent, mais il MUST conserver sans ambiguïté la distinction entre tentative de clôture échouée et commit stable final.
Le repository ne doit jamais mélanger deux tranches non clôturées dans un même commit.
## Manifest de suppression
@@ -327,9 +346,11 @@ published source archive
post-tag verification
```
Un identifiant opérationnel tel que `rel.001` ou `publish.001` MAY être utilisé pour distinguer une clôture ou une vérification de publication sans devenir une nouvelle version SemVer produit.
Un identifiant opérationnel tel que `rel.1` ou `publish.001` MAY être utilisé pour distinguer une clôture ou une vérification de publication sans devenir une nouvelle version SemVer produit. La famille `rel.N` utilise la représentation sans zéro de padding définie par la gouvernance ; les anciennes formes `rel.001*` déjà publiées restent historiques et immuables.
`rel.001` prouve l'état stable avant création du tag. Une preuve `publish.001`, lorsqu'elle existe, porte sur l'artefact réellement publié après le tag et reste donc extérieure au tag qu'elle vérifie. Elle ne revalide pas fonctionnellement la release.
`rel.1` est la première tranche de clôture stable pré-tag d'une nouvelle release utilisant cette convention. Si elle échoue, `rel.1.fix.N` corrige uniquement cette fermeture. La première de ces tranches qui obtient réellement `PASS` est incluse dans le commit stable `X.Y.Z`, puis seulement le tag `vX.Y.Z` est créé.
Une preuve `publish.001`, lorsqu'elle existe, porte sur l'artefact réellement publié après le tag et reste donc extérieure au tag qu'elle vérifie. Elle ne revalide pas fonctionnellement la release. La présente règle ne renomme pas `publish.001`; son identité reste indépendante de la correction `rel.001` -> `rel.1`.
Lorsqu'un rapport `publish.001` est un prérequis de la session suivante, la clôture post-tag MUST indiquer explicitement à l'opérateur qu'il doit fournir ce rapport avec l'archive taggée. Le démarrage suivant effectue toujours son propre audit d'intake de la baseline ; il ne traite pas pour autant la stable précédente comme une release encore en attente de validation.

130
history/0.1.0/alpha.2.md Normal file
View File

@@ -0,0 +1,130 @@
<!-- file: history/0.1.0/alpha.2.md -->
<!-- version: 1 -->
# History 0.1.0-alpha.2 — clôture stable et identité `rel.N`
## Statut
FAIL
La gate opérateur de `0.1.0-alpha.2` exécutée le `2026-09-26` n'a pas atteint un PASS complet. Le contenu normatif de la tranche est présent et les suites Python ainsi que les audits Markdown ont réussi, mais plusieurs commandes `grep -F` prescrites par le delta ont été mal formées pour le shell en raison d'apostrophes littérales dans des motifs entourés de quotes simples. La preuve opérateur contient donc des erreurs de commande et la tranche doit rester `FAIL` jusqu'à correction de sa gate.
Le défaut observé appartient à la validation livrée par `alpha.2`; aucun défaut du contenu `rel.N` n'est établi par les contrôles exécutés.
## Baseline opérateur
La tranche précédente `0.1.0-alpha.1` a été committée et poussée avant application de `alpha.2` :
```text
commit c22cf39
message 0.1.0-alpha.1
push origin/master PASS
```
Après application de `alpha.2`, les contrôles initiaux ont confirmé :
```text
VERSION 0.1.0-alpha.2
history/0.1.0/alpha.1.md présent
deltas/0.1.0/alpha.2.md présent
history/0.1.0/alpha.2.md absent pendant la gate
docs/rules/200-GOVERNANCE.md version 5
docs/rules/210-WORKFLOW.md version 6
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md version 2
```
## Défaut exact de la gate
Le delta contenait notamment :
```bash
grep -F 'représentation canonique n'utilise pas de zéro de padding' docs/rules/200-GOVERNANCE.md
```
L'apostrophe de `n'utilise` ferme la quote simple ouverte avant `représentation`. Le shell poursuit alors l'analyse des lignes suivantes avec un état de quoting incohérent. La transcription opérateur contient notamment :
```text
bash: publish.001 : commande introuvable
grep: pas: Aucun fichier ou dossier de ce nom
grep: zéro: Aucun fichier ou dossier de ce nom
grep: clôture: Aucun fichier ou dossier de ce nom
grep: rel.1: Aucun fichier ou dossier de ce nom
```
Un second motif comportait également une apostrophe littérale :
```bash
grep -F 'série dédiée au déploiement et à l'exploitation' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
```
Ces erreurs ne peuvent pas être classées comme simples diagnostics attendus : elles proviennent de commandes de validation obligatoires livrées par la tranche. Conformément à la chaîne PGR, une gate prescrite qui n'est pas exécutable proprement rend la tranche `FAIL` même si une preuve ultérieure couvre correctement le fond.
## Preuves de fond réussies
La suite Python globale a exécuté `48` tests et tous ont réussi :
```text
Ran 48 tests in 0.717s
OK
```
Les audits Markdown ont affiché :
```text
Markdown header audit: clean (175 file(s))
Markdown table audit: clean (8 table(s), 175 file(s))
Markdown link audit: clean (163 local link(s), 175 file(s))
```
Le contrôle structurel spécifique de la tranche a également réussi :
```text
0.1.0 alpha.2 rel identity audit: clean (rel.N unpadded, historical rel.001 preserved, stable commit identity explicit)
```
Cette preuve confirme notamment que :
- la convention future `rel.N` sans padding est matérialisée ;
- les artefacts historiques `rel.001*` sont conservés ;
- l'identité du commit stable est explicitement distinguée de la tranche de clôture ;
- `publish.001` reste indépendant ;
- les horizons Clippy statique et deployment/operations restent différés dans le plan.
Le scope Git observé avant ajout du présent history est exactement :
```text
M VERSION
A deltas/0.1.0/alpha.2.md
M docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
M docs/rules/200-GOVERNANCE.md
M docs/rules/210-WORKFLOW.md
```
## Décision
Aucun REPLAN n'est requis et aucun owner normatif ne doit être réécrit pour corriger cet incident.
La correction reste strictement dans :
```text
0.1.0-alpha.2.fix.1
```
Le fix doit :
- conserver intégralement le delta historique `alpha.2.md` ;
- conserver les contenus actuels de `200-GOVERNANCE.md` et `210-WORKFLOW.md` ;
- remplacer les assertions shell fragiles par une preuve Python syntaxiquement sûre ;
- rejouer les `48` tests et les trois audits Markdown ;
- confirmer à nouveau le scope et la vérité historique avant progression vers `alpha.3`.
## Résultat
`0.1.0-alpha.2` est enregistré `FAIL` pour défaut de gate opérateur, sans défaut normatif établi sur la convention `rel.N`.
La seule transition autorisée est :
```text
0.1.0-alpha.2.fix.1
```