168 lines
7.2 KiB
Markdown
168 lines
7.2 KiB
Markdown
<!-- file: deltas/0.0.4/alpha.3.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.0.4-alpha.3 — fondation de projet gouverné
|
|
|
|
## Baseline et version
|
|
|
|
Baseline attendue : commit opérateur de `0.0.4-alpha.2`, réalisé après application de `history/0.0.4/alpha.2.md` avec statut `PASS`.
|
|
|
|
Le hash de ce commit n'est volontairement pas anticipé : le history `alpha.2` et le présent delta peuvent être livrés dans le même échange, mais restent deux archives séparées et le delta `alpha.3` MUST NOT être appliqué avant le commit de `alpha.2`.
|
|
|
|
Version avant application :
|
|
|
|
```text
|
|
0.0.4-alpha.2
|
|
```
|
|
|
|
Version après application :
|
|
|
|
```text
|
|
0.0.4-alpha.3
|
|
```
|
|
|
|
## Objet
|
|
|
|
Matérialiser la première skeleton specification concrète prévue par le plan `0.0.4` : une fondation composable de gouvernance locale pour un projet qui adopte PGR, sans sélectionner de langage, plateforme, framework ou architecture applicative.
|
|
|
|
La specification doit rendre actionnables les responsabilités générales déjà possédées par `200`, `210`, `300` et `400` : version courante, point d'entrée normatif, documentation minimale, workflow réellement retenu, décisions destinataire, overrides et validation initiale proportionnée.
|
|
|
|
Elle ne crée aucun template générique, ne copie pas la structure complète du dépôt PGR et ne précrée aucun répertoire documentaire ou workflow sans contenu réel.
|
|
|
|
## Scope
|
|
|
|
REPLACE :
|
|
|
|
```text
|
|
VERSION
|
|
README.md
|
|
docs/000-README.md
|
|
docs/skeletons/000-README.md
|
|
```
|
|
|
|
ADD :
|
|
|
|
```text
|
|
docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md
|
|
deltas/0.0.4/alpha.3.md
|
|
```
|
|
|
|
DELETE : aucun.
|
|
|
|
L'archive delta contient uniquement ces six fichiers complets avec leurs chemins relatifs. Elle ne contient ni `history/0.0.4/alpha.2.md`, livré séparément pour clôturer la tranche précédente, ni `history/0.0.4/alpha.3.md`, qui sera produit après la gate opérateur.
|
|
|
|
Le plan `docs/plans/004-V0_0_4_SKELETONS_PLAN.md` et la règle `docs/rules/220-SKELETONS.md` ne sont pas modifiés : cette tranche exécute leur trajectoire et leur contrat sans REPLAN.
|
|
|
|
## Contenu matérialisé
|
|
|
|
`docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md` :
|
|
|
|
- déclare son objectif, son applicabilité et son hors-scope ;
|
|
- sélectionne les owners généraux `200`, `210`, `300` et `400` sans sélectionner de profil technologique ;
|
|
- distingue le rôle de `220` comme contrat d'instanciation de celui des règles à reprendre localement ;
|
|
- impose de résoudre les décisions destinataire avant de présenter l'instanciation comme terminée ;
|
|
- rend le point d'entrée normatif local et la version courante explicites ;
|
|
- rend `docs/`, `ROADMAP.md`, `CHANGELOG.md` et les collections spécialisées conditionnels à un contenu réel ;
|
|
- conserve `deltas/`, `history/`, `prompts/`, `handoffs/` et `manifests/` comme répertoires créés à la demande ;
|
|
- fournit une validation initiale proportionnée sans imposer de copier les scripts PGR ;
|
|
- définit l'ordre de composition attendu pour les futures spécialisations ;
|
|
- exclut explicitement architecture applicative, toolchain, CI/CD universel, branching universel et migration rétroactive.
|
|
|
|
Aucun template générique n'est nécessaire pour rendre cette specification actionnable : elle décrit les owners, décisions, fichiers conditionnels et preuves à matérialiser sans prétendre générer leur contenu automatiquement. Le point de REPLAN du plan n'est donc pas déclenché par cette tranche.
|
|
|
|
## Validation opérateur
|
|
|
|
Après avoir appliqué `history/0.0.4/alpha.2.md`, committé `0.0.4-alpha.2`, puis appliqué le présent delta, depuis la racine du dépôt :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.0.4-alpha.3'
|
|
test -f history/0.0.4/alpha.2.md
|
|
test -f deltas/0.0.4/alpha.3.md
|
|
test -f docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md
|
|
test ! -e history/0.0.4/alpha.3.md
|
|
test ! -e docs/skeletons/002-RUST_CARGO_WORKSPACE.md
|
|
|
|
grep -Fx '<!-- version: 9 -->' README.md
|
|
grep -Fx '<!-- version: 7 -->' docs/000-README.md
|
|
grep -Fx '<!-- version: 2 -->' docs/skeletons/000-README.md
|
|
grep -Fx '<!-- version: 1 -->' docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md
|
|
|
|
grep -F '001-PROJECT_GOVERNANCE_FOUNDATION.md' README.md
|
|
grep -F '001-PROJECT_GOVERNANCE_FOUNDATION.md' docs/000-README.md
|
|
grep -F '001-PROJECT_GOVERNANCE_FOUNDATION.md' docs/skeletons/000-README.md
|
|
|
|
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
|
|
|
|
python3 -B - <<'PY'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
histories = {path.name for path in Path('history/0.0.4').glob('*.md')}
|
|
assert histories == {'alpha.1.md', 'alpha.2.md'}, histories
|
|
for name in sorted(histories):
|
|
text = Path('history/0.0.4', name).read_text(encoding='utf-8')
|
|
assert re.search(r'## Statut\s+PASS\s', text), name
|
|
|
|
skeletons = sorted(path.name for path in Path('docs/skeletons').glob('*.md'))
|
|
assert skeletons == ['000-README.md', '001-PROJECT_GOVERNANCE_FOUNDATION.md'], skeletons
|
|
|
|
text = Path('docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md').read_text(encoding='utf-8')
|
|
for phrase in (
|
|
'## Applicabilité',
|
|
'## Owners sélectionnés',
|
|
'## Décisions destinataire avant matérialisation',
|
|
'## Baseline locale à matérialiser',
|
|
'### Version',
|
|
'### Documentation minimale',
|
|
'### Workflow retenu',
|
|
'### Validation initiale',
|
|
'## Ordre de composition',
|
|
'## Overrides et exceptions',
|
|
'## Hors scope',
|
|
):
|
|
assert phrase in text, phrase
|
|
|
|
for owner in ('200-GOVERNANCE.md', '210-WORKFLOW.md', '300-DOCUMENTATION.md', '400-VALIDATION.md'):
|
|
assert owner in text, owner
|
|
|
|
for forbidden in (
|
|
'templates/generic',
|
|
'docs/skeletons/002-RUST_CARGO_WORKSPACE.md',
|
|
):
|
|
assert forbidden not in text, forbidden
|
|
|
|
print('Governance foundation audit: clean (alpha.1/alpha.2 PASS baseline, one concrete non-technological skeleton)')
|
|
PY
|
|
|
|
git diff --check
|
|
git add VERSION README.md docs/000-README.md \
|
|
docs/skeletons/000-README.md \
|
|
docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md \
|
|
deltas/0.0.4/alpha.3.md
|
|
git diff --cached --check
|
|
git status --short
|
|
```
|
|
|
|
## Revue opérateur
|
|
|
|
En complément des commandes, vérifier que :
|
|
|
|
- la fondation reste une procedure composable et non un template ou générateur implicite ;
|
|
- aucun document ou répertoire n'est rendu obligatoire uniquement pour reproduire le layout PGR ;
|
|
- aucune règle technologique `500+` ou `600+` n'est sélectionnée par défaut ;
|
|
- les décisions destinataire restent explicites et aucune valeur d'exemple n'est universalisée ;
|
|
- l'ordre de composition permet au futur skeleton Rust/Cargo d'ajouter ses responsabilités sans dupliquer les owners généraux.
|
|
|
|
## Transition
|
|
|
|
PASS : produire `history/0.0.4/alpha.3.md`, l'appliquer puis committer `0.0.4-alpha.3`. La tranche suivante prévue par le plan est `0.0.4-alpha.4`, consacrée au skeleton Rust/Cargo workspace et à sa validation d'instanciation.
|
|
|
|
FAIL : rester dans le scope de `alpha.3` via `alpha.3.fix.1` sauf si l'échec démontre qu'un template générique ou une nouvelle décision normative est indispensable, auquel cas déclencher le REPLAN prévu par le plan.
|