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.* PASSdéjà possédé par003-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.1est présent etPASS; - 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
48tests existants restent propres ; - les trois audits Markdown restent propres ;
- le scope Git correspond exactement aux six fichiers de
alpha.3.
Transition
Si PASS :
- produire
history/0.1.0/alpha.3.md; - remettre automatiquement le bloc opérateur conforme au nouveau pattern pour committer/pousser
0.1.0-alpha.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.