# 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 : ```text 0.1.0-alpha.2.fix.1 ``` Version après application : ```text 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 : ```text 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 : ```text VERSION docs/000-README.md docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md docs/rules/210-WORKFLOW.md ``` ADD : ```text 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 : ```text 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 : ```bash 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 '' docs/rules/210-WORKFLOW.md grep -Fx '' docs/000-README.md grep -Fx '' 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 ', '## 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 '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.