0.1.0-alpha.3
This commit is contained in:
185
deltas/0.1.0/alpha.3.md
Normal file
185
deltas/0.1.0/alpha.3.md
Normal file
@@ -0,0 +1,185 @@
|
||||
<!-- file: deltas/0.1.0/alpha.3.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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 '<!-- 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.
|
||||
Reference in New Issue
Block a user