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.1ne change pas ; 0.1.0est présenté comme stable de manière cohérente dans VERSION/README/ROADMAP/CHANGELOG/index/plan ;- les
FAILhistoriquesalpha.2etalpha.3restent conservés avec leurs fixesPASS; - la roadmap engagée
0.1.1à0.1.7reste intacte ; - WASM, serveur Rust et deployment/operations restent non numérotés ;
- le prompt
007reste conditionnel à une vraie publication dev0.1.0et à un rapport post-tagPASSré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.