Files
pgr/deltas/0.1.0/rel.1.md
2026-09-26 23:31:54 +02:00

7.2 KiB

Delta 0.1.0 rel.1 — promotion stable pré-tag

Baseline et version

Baseline : 0.1.0-rc.1, avec history/0.1.0/rc.1.md appliqué et committé. Ce delta MUST NOT être appliqué avant ce commit.

Version avant application :

0.1.0-rc.1

Version après application :

0.1.0

rel.1 identifie la clôture opérationnelle ; il ne fait pas partie de la version SemVer du produit.

Objet

Promouvoir mécaniquement la RC validée vers la stable 0.1.0 sans rouvrir le scope fonctionnel.

La tranche finalise uniquement la présentation et les métadonnées de release : version stable, roadmap terminée, changelog sans marqueur candidate, README/index en état stable et plan 006 historique. Aucun owner, profil, template, skeleton, script d'audit ou contrat technique n'est modifié.

La validation de cette tranche est pré-tag. Le tag v0.1.0, son archive source Gitea et le rapport pgr-0.1.0-publish.001-report.md ne sont pas déclarés existants par ce delta. Ils suivent uniquement un history rel.1 PASS, le commit stable 0.1.0 et la publication réelle du tag.

Scope

REPLACE :

VERSION
README.md
ROADMAP.md
CHANGELOG.md
docs/000-README.md
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md

ADD :

deltas/0.1.0/rel.1.md

DELETE : aucun.

Le history rc.1 est livré séparément. Le history rel.1 sera produit uniquement après la gate opérateur.

Validation opérateur pré-tag

Après application sur le commit contenant history/0.1.0/rc.1.md :

test "$(cat VERSION)" = '0.1.0'
git cat-file -e HEAD:history/0.1.0/rc.1.md
test -f history/0.1.0/rc.1.md
test -f deltas/0.1.0/rel.1.md
test -f prompts/007-V0_1_1_START_PROMPT.md
test ! -e history/0.1.0/rel.1.md

grep -A2 '^## Statut$' history/0.1.0/rc.1.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 16 -->' README.md
grep -Fx '<!-- version: 10 -->' ROADMAP.md
grep -Fx '<!-- version: 11 -->' CHANGELOG.md
grep -Fx '<!-- version: 23 -->' docs/000-README.md
grep -Fx '<!-- version: 10 -->' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
grep -F -- '- `(x) 0.1.0`' ROADMAP.md
grep -Fx '## 0.1.0' CHANGELOG.md
grep -F 'première baseline réutilisable stable' README.md
grep -F 'plan historique de la stable `0.1.0`' docs/000-README.md

python3 -B - <<'PYGATE'
from pathlib import Path
import re

expected = {
    "alpha.1.md": "PASS",
    "alpha.2.md": "FAIL",
    "alpha.2.fix.1.md": "PASS",
    "alpha.3.md": "FAIL",
    "alpha.3.fix.1.md": "PASS",
    "alpha.4.md": "PASS",
    "alpha.5.md": "PASS",
    "beta.1.md": "PASS",
    "rc.1.md": "PASS",
}

for name, status in expected.items():
    delta = Path("deltas/0.1.0", name)
    history = Path("history/0.1.0", 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 = {path.name for path in Path("deltas/0.1.0").glob("*.md")} - {
    path.name for path in Path("history/0.1.0").glob("*.md")
}
assert pending == {"rel.1.md"}, pending

roadmap = Path("ROADMAP.md").read_text(encoding="utf-8")
assert "- `(x) 0.1.0`" in roadmap
for version in ("0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7"):
    assert f"- `( ) {version}`" in roadmap, version
assert "- `( ) 0.1.8`" not in roadmap

changelog = Path("CHANGELOG.md").read_text(encoding="utf-8")
assert "## 0.1.0" in changelog.splitlines()
assert "## 0.1.0 (candidate)" not in changelog
assert "produit produit" not in changelog

readme = Path("README.md").read_text(encoding="utf-8")
assert "première baseline réutilisable stable" in readme
assert "plan historique de la première baseline réutilisable `0.1.0`" in readme

index = Path("docs/000-README.md").read_text(encoding="utf-8")
assert "plan historique de la stable `0.1.0`" in index

plan = Path("docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md").read_text(encoding="utf-8")
assert "Statut opérateur : **PASS**." in plan
assert "history/0.1.0/rel.1.md" in plan
assert "pgr-0.1.0-publish.001-report.md" in plan

prompt = Path("prompts/007-V0_1_1_START_PROMPT.md").read_text(encoding="utf-8")
assert "tag Gitea `v0.1.0`" in prompt
assert "pgr-0.1.0-publish.001-report.md" in prompt
assert "0.1.1-alpha.1" in prompt

workflow = Path("docs/rules/210-WORKFLOW.md").read_text(encoding="utf-8")
assert "history rel.1 FAIL / PARTIAL / BLOCKED" in workflow
assert "premier history rel.N[/fix.M] PASS qui établit réellement la stable" in workflow
assert "commit X.Y.Z" in workflow

print("0.1.0 rel.1 stable gate audit: clean (9 prior histories, rel.1 pending, stable presentation and post-tag handoff coherent)")
PYGATE

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

git diff --check
git add VERSION README.md ROADMAP.md CHANGELOG.md docs/000-README.md \
    docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md \
    deltas/0.1.0/rel.1.md
git diff --cached --check
git status --short

Le scope attendu avant ajout du history est exactement :

M  CHANGELOG.md
M  README.md
M  ROADMAP.md
M  VERSION
A  deltas/0.1.0/rel.1.md
M  docs/000-README.md
M  docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md

Les deux dry-runs Rust/Cargo ont été reconfirmés en rc.1 avec Cargo/rustfmt/Clippy et aucun artefact Rust/Cargo n'est modifié par rel.1; ils ne sont donc pas rejoués une troisième fois dans la promotion mécanique. La suite Python PGR et les audits documentaires restent exécutés dans la gate stable.

Revue opérateur complémentaire

Confirmer que :

  • le scope fonctionnel de rc.1 ne change pas ;
  • 0.1.0 est présenté comme stable de manière cohérente dans VERSION/README/ROADMAP/CHANGELOG/index/plan ;
  • les FAIL historiques alpha.2 et alpha.3 restent conservés avec leurs fixes PASS ;
  • la roadmap engagée 0.1.1 à 0.1.7 reste intacte ;
  • WASM, serveur Rust et deployment/operations restent non numérotés ;
  • le prompt 007 reste conditionnel à une vraie publication de v0.1.0 et à un rapport post-tag PASS réel ;
  • aucune preuve post-tag n'est anticipée.

Transition

PASS

Produire séparément history/0.1.0/rel.1.md, l'appliquer, puis créer le commit stable sous le message exact :

0.1.0

Après push de la branche canonique, créer et publier le tag annoté v0.1.0. Vérifier localement et à distance l'objet tag et son commit déréférencé. Télécharger ensuite l'archive source depuis le tag Gitea et la fournir au générateur avec les sorties Git de publication afin de produire pgr-0.1.0-publish.001-report.md à partir de preuves réelles.

Le prompt 007-V0_1_1_START_PROMPT.md n'est remis comme reprise effective de 0.1.1 qu'après un rapport post-tag PASS.

FAIL

Consigner le diagnostic réel dans history/0.1.0/rel.1.md, ne pas créer le tag et corriger uniquement la fermeture dans rel.1.fix.1 avant toute publication.