Files
pgr/deltas/0.1.0/alpha.3.md
2026-09-26 19:06:59 +02:00

6.4 KiB

Delta 0.1.0-alpha.3 — handoff automatique des commandes opérateur

Baseline et version

Baseline attendue : commit opérateur de 0.1.0-alpha.2.fix.1, réalisé après application de history/0.1.0/alpha.2.fix.1.md avec statut PASS.

Le hash de ce commit n'est pas anticipé.

Version avant application :

0.1.0-alpha.2.fix.1

Version après application :

0.1.0-alpha.3

Objet

Rendre normative la remise automatique des commandes opérateur après chaque history et pendant la publication stable.

La tranche doit supprimer le besoin récurrent de demander séparément :

quel message de commit utiliser ?
quand pousser ?
quand appliquer le prochain delta ?
quelles commandes exécuter pour le tag ?
quelles preuves fournir pour produire publish.* ?

Le workflow reste l'owner normatif. Un nouveau pattern documentaire fournit uniquement une forme de rendu réutilisable.

Scope

REPLACE :

VERSION
docs/000-README.md
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
docs/rules/210-WORKFLOW.md

ADD :

docs/templates/006-OPERATOR_COMMAND_HANDOFF.md
deltas/0.1.0/alpha.3.md

DELETE : aucun.

Changements normatifs

210-WORKFLOW.md impose désormais qu'après production d'un history destiné à l'opérateur, le générateur fournisse spontanément le bloc de fermeture correspondant. Le rendu doit utiliser les valeurs Git réelles lorsqu'elles sont établies et ne doit jamais inventer branche, remote ou politique de tag.

Le contrat distingue explicitement :

  • fermeture ordinaire history -> commit/push -> delta suivant ;
  • fermeture FAIL/PARTIAL/BLOCKED -> commit de la tranche -> fix ;
  • première clôture rel.N[/fix.M] PASS -> commit X.Y.Z -> tag ;
  • vérification d'un tag annoté avec distinction objet tag / commit déréférencé ;
  • artefacts et preuves que l'opérateur doit fournir pour produire publish.* ;
  • message manuel de reprise après publish.* PASS déjà possédé par 003-NEW_SESSION_PROMPT.md.

Nouveau pattern documentaire

docs/templates/006-OPERATOR_COMMAND_HANDOFF.md fournit les blocs adaptables pour :

history ZIP
commit / push
fix ou delta suivant
tag stable
preuves post-tag
transition après publish.*

Il ne fixe pas origin, master ou une forge particulière comme valeurs universelles. Une commande concrète livrée à l'opérateur doit employer les valeurs déjà établies pour le projet.

Validation opérateur

Exécuter depuis la racine du workspace après application du delta :

test "$(cat VERSION)" = '0.1.0-alpha.3'
test -f history/0.1.0/alpha.2.fix.1.md
test -f deltas/0.1.0/alpha.3.md
test -f docs/templates/006-OPERATOR_COMMAND_HANDOFF.md
test ! -e history/0.1.0/alpha.3.md

grep -Fx '<!-- version: 7 -->' docs/rules/210-WORKFLOW.md
grep -Fx '<!-- version: 19 -->' docs/000-README.md
grep -Fx '<!-- version: 4 -->' docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md

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

history = Path('history/0.1.0/alpha.2.fix.1.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+PASS\s', history)

workflow = Path('docs/rules/210-WORKFLOW.md').read_text(encoding='utf-8')
template = Path('docs/templates/006-OPERATOR_COMMAND_HANDOFF.md').read_text(encoding='utf-8')
plan = Path('docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md').read_text(encoding='utf-8')
index = Path('docs/000-README.md').read_text(encoding='utf-8')

for phrase in (
    '## Remise automatique des commandes opérateur',
    "le générateur MUST remettre spontanément les commandes nécessaires pour fermer cette tranche",
    'Le générateur MUST NOT inventer un remote, une branche ou une politique de tag non établis.',
    'première clôture `rel.N[/fix.M]` qui établit réellement la stable',
    'refs/tags/vX.Y.Z^{}',
    'Le rapport `publish.*` est produit seulement à partir des artefacts et preuves réellement disponibles après publication.',
    '../templates/006-OPERATOR_COMMAND_HANDOFF.md',
):
    assert phrase in workflow, phrase

for phrase in (
    '## Fermeture d'une tranche non stable',
    'git diff --cached --check',
    'git push <remote> <branche>',
    '## Tranche échouée suivie d'un fix',
    '## Première clôture qui établit réellement la stable',
    'git tag -a vX.Y.Z -m "vX.Y.Z"',
    "git ls-remote <remote> 'refs/tags/vX.Y.Z^{}'",
    '## Remise nécessaire pour `publish.*`',
    '## Après `publish.* PASS`',
):
    assert phrase in template, phrase

assert '006-OPERATOR_COMMAND_HANDOFF.md' in index
assert 'Statut opérateur : **PASS**.' in plan
assert '### alpha.3 — handoff automatique des commandes opérateur' in plan

print('0.1.0 alpha.3 operator handoff audit: clean (history-to-commit, stable tag and publish evidence rendered explicitly)')
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 docs/000-README.md \
    docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md \
    docs/rules/210-WORKFLOW.md \
    docs/templates/006-OPERATOR_COMMAND_HANDOFF.md \
    deltas/0.1.0/alpha.3.md
git diff --cached --check
git status --short

Résultat attendu

La gate est PASS si :

  • le history alpha.2.fix.1 est présent et PASS ;
  • le workflow impose la remise spontanée des commandes et interdit d'inventer les paramètres Git ;
  • le pattern couvre tranche ordinaire, échec + fix, stable/tag et preuves publish.* ;
  • la vérification d'un tag annoté distingue objet tag et commit déréférencé ;
  • les 48 tests existants restent propres ;
  • les trois audits Markdown restent propres ;
  • le scope Git correspond exactement aux six fichiers de alpha.3.

Transition

Si PASS :

  1. produire history/0.1.0/alpha.3.md ;
  2. remettre automatiquement le bloc opérateur conforme au nouveau pattern pour committer/pousser 0.1.0-alpha.3 ;
  3. préparer 0.1.0-alpha.4, consacré à l'adoption proportionnée de PGR par un projet existant.

Si FAIL : conserver le history réel et corriger uniquement la cause dans alpha.3.fix.N, sauf preuve imposant un REPLAN.