Files
pgr/deltas/0.1.0/alpha.4.md
2026-09-26 19:31:22 +02:00

8.2 KiB
Raw Blame History

Delta 0.1.0-alpha.4 — adoption PGR d’un projet existant

Baseline et version

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

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

Version avant application :

0.1.0-alpha.3.fix.1

Version après application :

0.1.0-alpha.4

Objet

Formaliser le contrat d’adoption de PGR par un projet existant, distinct de l’instanciation d’un nouveau projet.

La tranche introduit :

  • un owner normatif 230-ADOPTION.md ;
  • un pattern documentaire 007-EXISTING_PROJECT_ADOPTION.md ;
  • la représentation architecturale du flux d’adoption ;
  • les index nécessaires pour rendre ces artefacts découvrables ;
  • le mapping canonique ADOPT / KEEP-LOCAL / OVERRIDE / DEFER ;
  • la préservation explicite de l’historique antérieur au point d’adoption.

Cette tranche ne migre ni Games ni KSP. Elle ne crée aucun nouveau profil Web, Android, Tauri, WASM ou serveur.

Scope

REPLACE :

VERSION
RULES.md
docs/000-README.md
docs/architecture/002-GOVERNANCE_ARCHITECTURE.md
docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
docs/rules/000-README.md

ADD :

deltas/0.1.0/alpha.4.md
docs/rules/230-ADOPTION.md
docs/templates/007-EXISTING_PROJECT_ADOPTION.md

DELETE : aucun.

Les profils technologiques, skeletons existants, scripts d’audit, tests et ROADMAP.md restent inchangés.

Décisions normatives

Adoption distincte de l’instanciation

Un projet existant part de sa baseline réelle. Un skeleton MAY servir de référence de comparaison, mais PGR ne prétend pas que le dépôt a été créé depuis ce skeleton.

L’adoption ne doit pas imposer toute la bibliothèque PGR ni réécrire l’historique pour simuler une conformité passée.

Classification canonique

Chaque owner ou contrat candidat dans le scope d’adoption est classifié selon :

ADOPT
KEEP-LOCAL
OVERRIDE
DEFER

KEEP-LOCAL préserve une décision locale qui n’a pas besoin d’être remplacée. OVERRIDE remplace ou raffine explicitement une règle PGR applicable et doit porter scope et justification. DEFER enregistre un report réel et ne peut pas être présenté comme une adoption terminée.

Migration progressive

L’adoption SHOULD être découpée en tranches validables et proportionnées lorsque cela réduit le risque. L’adoption d’un profil n’entraîne pas automatiquement celle des profils voisins.

Les conventions nouvelles commencent au point d’adoption établi ; les commits, tags, histories et autres snapshots antérieurs restent historiques.

Validation opérateur

Après application du history PASS, commit/push de alpha.3.fix.1, puis application du présent delta :

test "$(cat VERSION)" = '0.1.0-alpha.4'
git cat-file -e HEAD:history/0.1.0/alpha.3.fix.1.md
test -f history/0.1.0/alpha.3.fix.1.md
test -f deltas/0.1.0/alpha.4.md
test -f docs/rules/230-ADOPTION.md
test -f docs/templates/007-EXISTING_PROJECT_ADOPTION.md
test ! -e history/0.1.0/alpha.4.md

grep -A2 '^## Statut$' history/0.1.0/alpha.3.fix.1.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 12 -->' RULES.md
grep -Fx '<!-- version: 14 -->' docs/rules/000-README.md
grep -Fx '<!-- version: 20 -->' docs/000-README.md
grep -Fx '<!-- version: 4 -->' docs/architecture/002-GOVERNANCE_ARCHITECTURE.md
grep -Fx '<!-- version: 1 -->' docs/rules/230-ADOPTION.md
grep -Fx '<!-- version: 1 -->' docs/templates/007-EXISTING_PROJECT_ADOPTION.md
grep -Fx '<!-- version: 6 -->' 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.3.fix.1.md').read_text(encoding='utf-8')
rules = Path('RULES.md').read_text(encoding='utf-8')
rules_index = Path('docs/rules/000-README.md').read_text(encoding='utf-8')
index = Path('docs/000-README.md').read_text(encoding='utf-8')
architecture = Path('docs/architecture/002-GOVERNANCE_ARCHITECTURE.md').read_text(encoding='utf-8')
adoption = Path('docs/rules/230-ADOPTION.md').read_text(encoding='utf-8')
template = Path('docs/templates/007-EXISTING_PROJECT_ADOPTION.md').read_text(encoding='utf-8')
plan = Path('docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md').read_text(encoding='utf-8')
roadmap = Path('ROADMAP.md').read_text(encoding='utf-8')

assert re.search(r'## Statut\s+PASS\s', history)

for phrase in (
    'ADOPT',
    'KEEP-LOCAL',
    'OVERRIDE',
    'DEFER',
    'baseline autoritaire',
    'Migration progressive',
    'Préservation de l’historique',
    'MUST NOT demander de réécrire des commits, tags, histories, changelogs',
    'Un skeleton PGR MAY servir de checklist de comparaison pour un projet existant.',
    '../templates/007-EXISTING_PROJECT_ADOPTION.md',
):
    assert phrase in adoption, phrase

for phrase in (
    '## Baseline autoritaire',
    '## Mapping d’adoption',
    'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER',
    '## Découpage de migration',
    '## Historique et compatibilité',
    '## Validation de sortie',
):
    assert phrase in template, phrase

for phrase in (
    '## Adoption d’un projet existant',
    'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER',
    'projet autonome avec historique préservé',
    '../rules/230-ADOPTION.md',
):
    assert phrase in architecture, phrase

assert 'docs/rules/230-ADOPTION.md' in rules
assert '230-ADOPTION.md' in rules_index
assert 'rules/230-ADOPTION.md' in index
assert 'templates/007-EXISTING_PROJECT_ADOPTION.md' in index
assert 'Statut opérateur : **PASS**.' in plan
assert 'Statut opérateur : **à valider**.' in plan
assert 'Cette tranche ne migre ni Games ni KSP.' in Path('deltas/0.1.0/alpha.4.md').read_text(encoding='utf-8')
assert '- `( ) 0.1.1`' not in roadmap

print('0.1.0 alpha.4 existing-project adoption audit: clean (baseline, owner mapping, decision classes, progressive migration and history preservation explicit)')
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 RULES.md docs/000-README.md \
    docs/architecture/002-GOVERNANCE_ARCHITECTURE.md \
    docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md \
    docs/rules/000-README.md docs/rules/230-ADOPTION.md \
    docs/templates/007-EXISTING_PROJECT_ADOPTION.md \
    deltas/0.1.0/alpha.4.md

git diff --cached --check
git status --short

Le scope indexé attendu avant ajout du history de alpha.4 est exactement :

M  RULES.md
M  VERSION
A  deltas/0.1.0/alpha.4.md
M  docs/000-README.md
M  docs/architecture/002-GOVERNANCE_ARCHITECTURE.md
M  docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md
M  docs/rules/000-README.md
A  docs/rules/230-ADOPTION.md
A  docs/templates/007-EXISTING_PROJECT_ADOPTION.md

Revue opérateur complémentaire

Confirmer que :

  • le contrat d’adoption n’impose pas tous les profils PGR à un projet existant ;
  • KEEP-LOCAL n’est pas utilisé comme alias silencieux d’un override ;
  • OVERRIDE exige bien scope et justification ;
  • DEFER reste distinct d’un résultat adopté ;
  • un skeleton sert seulement de référence de comparaison lorsqu’il est utile ;
  • aucun historique du projet destinataire ne doit être réécrit pour rendre le passé rétroactivement conforme ;
  • Games et KSP restent des futurs consommateurs, pas des dépendances de 0.1.0 ;
  • aucun numéro futur 0.1.x n’est réservé par cette tranche.

Transition

PASS

Produire history/0.1.0/alpha.4.md, l’appliquer puis remettre automatiquement les commandes de commit/push conformément à 210-WORKFLOW.md et 006-OPERATOR_COMMAND_HANDOFF.md.

Reprendre ensuite la trajectoire avec 0.1.0-alpha.5, consacré à la réconciliation de la fondation, du skeleton Rust/Cargo et au dry-run de composition/adoption.

FAIL

Consigner le diagnostic réel dans history/0.1.0/alpha.4.md et rester dans alpha.4.fix.N sauf REPLAN justifié. Le fix MUST rester borné au défaut réellement observé.