233 lines
8.2 KiB
Markdown
233 lines
8.2 KiB
Markdown
<!-- file: deltas/0.1.0/alpha.4.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# 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 :
|
||
|
||
```text
|
||
0.1.0-alpha.3.fix.1
|
||
```
|
||
|
||
Version après application :
|
||
|
||
```text
|
||
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 :
|
||
|
||
```text
|
||
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 :
|
||
|
||
```text
|
||
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 :
|
||
|
||
```text
|
||
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 :
|
||
|
||
```bash
|
||
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 :
|
||
|
||
```text
|
||
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é.
|