# Delta 0.0.4-alpha.2 — contrat de composition des skeletons ## Baseline et version Baseline : commit opérateur `bf306da` (`0.0.4-alpha.1`) après application de `history/0.0.4/alpha.1.md` avec statut `PASS`, puis push sur `origin/master`. La baseline attendue contient donc le delta, le plan et le history de `alpha.1`, sans contenu `alpha.2` préalable. Version avant application : ```text 0.0.4-alpha.1 ``` Version après application : ```text 0.0.4-alpha.2 ``` ## Objet Matérialiser le contrat transversal annoncé par le plan `0.0.4` sans anticiper les skeletons concrets des tranches suivantes. La tranche crée `docs/rules/220-SKELETONS.md` comme propriétaire normatif unique de l'applicabilité, de la sélection, de la composition, des décisions projet, des overrides et de la validation initiale des skeleton specifications. Elle active également `docs/skeletons/` avec un index réel décrivant la responsabilité de la collection. Les index normatifs et documentaires ainsi que les deux documents d'architecture concernés sont réconciliés avec ce nouveau propriétaire. Le modèle des profils reste possédé par `docs/architecture/003-RULE_PROFILE_MODEL.md` ; le nouveau document `220` le référence au lieu de dupliquer sa hiérarchie. Aucun skeleton de fondation, Rust/Cargo, Java/Android, Web, JNI, Tauri ou autre domaine technologique n'appartient à cette tranche. ## Scope REPLACE : ```text VERSION README.md RULES.md docs/000-README.md docs/architecture/002-GOVERNANCE_ARCHITECTURE.md docs/architecture/003-RULE_PROFILE_MODEL.md docs/rules/000-README.md ``` ADD : ```text docs/rules/220-SKELETONS.md docs/skeletons/000-README.md deltas/0.0.4/alpha.2.md ``` DELETE : aucun. L'archive delta contient uniquement ces dix fichiers complets avec leurs chemins relatifs. Elle ne contient pas `history/0.0.4/alpha.1.md`, déjà committé dans la baseline, ni `history/0.0.4/alpha.2.md`, qui sera produit après la gate opérateur. Le plan `docs/plans/004-V0_0_4_SKELETONS_PLAN.md` n'est pas modifié : la tranche réalise son étape `alpha.2` sans replan ni changement substantiel de trajectoire. ## Décisions normatives matérialisées Le contrat commun impose notamment qu'un skeleton : - déclare son objectif et son applicabilité à partir de faits du projet ; - identifie les règles, profils, templates, fichiers, décisions, options, overrides, ordre utile, validation et hors-scope nécessaires ; - référence les owners normatifs existants au lieu de devenir propriétaire implicite de leurs règles ; - conserve les projets instanciés autonomes et sans dépendance runtime/build vers PGR ; - distingue les valeurs obligatoires, exemples, recommandations et choix libres lorsqu'une confusion serait possible ; - n'applique pas tous les profils PGR par défaut ; - n'utilise pas l'ordre de composition comme priorité normative implicite ; - ne crée pas de skeleton composite sans interaction réelle à posséder ; - utilise une validation proportionnée au contenu réellement matérialisé. La collection `docs/skeletons/` reste vide de specification concrète dans `alpha.2` hormis son index. Sa création n'est pas un placeholder : l'index documente le contrat de collection réellement activé par le nouveau owner normatif. ## Validation opérateur Après application sur le commit `bf306da`, depuis la racine du dépôt : ```bash test "$(cat VERSION)" = '0.0.4-alpha.2' test -f history/0.0.4/alpha.1.md test -f deltas/0.0.4/alpha.2.md test -f docs/rules/220-SKELETONS.md test -f docs/skeletons/000-README.md test ! -e history/0.0.4/alpha.2.md test ! -e docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md test ! -e docs/skeletons/002-RUST_CARGO_WORKSPACE.md grep -Fx '' README.md grep -Fx '' RULES.md grep -Fx '' docs/000-README.md grep -Fx '' docs/architecture/002-GOVERNANCE_ARCHITECTURE.md grep -Fx '' docs/architecture/003-RULE_PROFILE_MODEL.md grep -Fx '' docs/rules/000-README.md grep -Fx '' docs/rules/220-SKELETONS.md grep -Fx '' docs/skeletons/000-README.md grep -F 'docs/rules/220-SKELETONS.md' RULES.md grep -F '220-SKELETONS.md' docs/rules/000-README.md grep -F 'skeletons/' docs/000-README.md grep -F '220-SKELETONS.md' docs/architecture/002-GOVERNANCE_ARCHITECTURE.md grep -F '220-SKELETONS.md' docs/architecture/003-RULE_PROFILE_MODEL.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 expected_counts = {'0.0.1': 12, '0.0.2': 12, '0.0.3': 10, '0.0.4': 1} for release, expected in expected_counts.items(): histories = {path.name for path in Path('history', release).glob('*.md')} if release == '0.0.4': assert histories == {'alpha.1.md'}, histories continue deltas = {path.name for path in Path('deltas', release).glob('*.md')} assert len(deltas) == expected, (release, len(deltas)) assert deltas == histories, (release, sorted(deltas ^ histories)) text = Path('history/0.0.4/alpha.1.md').read_text(encoding='utf-8') assert re.search(r'## Statut\s+PASS\s', text) assert sorted(path.name for path in Path('docs/skeletons').glob('*.md')) == ['000-README.md'] rule = Path('docs/rules/220-SKELETONS.md').read_text(encoding='utf-8') for phrase in ( '## Applicabilité', '## Contenu minimal d\'une specification', '## Sélection des règles et profils', '## Templates et artefacts techniques', '## Décisions propres au projet', '## Composition de plusieurs skeletons', '## Overrides et exceptions', '## Validation de l\'instanciation', ): assert phrase in rule, phrase print('Skeleton contract audit: clean (alpha.1 PASS baseline, alpha.2 contract/index only)') PY git diff --check git add VERSION README.md RULES.md docs/000-README.md \ docs/architecture/002-GOVERNANCE_ARCHITECTURE.md \ docs/architecture/003-RULE_PROFILE_MODEL.md \ docs/rules/000-README.md docs/rules/220-SKELETONS.md \ docs/skeletons/000-README.md deltas/0.0.4/alpha.2.md git diff --cached --check git status --short ``` Le scope indexé attendu avant ajout du history est : ```text M README.md M RULES.md M VERSION A deltas/0.0.4/alpha.2.md M docs/000-README.md M docs/architecture/002-GOVERNANCE_ARCHITECTURE.md M docs/architecture/003-RULE_PROFILE_MODEL.md M docs/rules/000-README.md A docs/rules/220-SKELETONS.md A docs/skeletons/000-README.md ``` La revue opérateur doit également confirmer que `220-SKELETONS.md` reste transversal, ne duplique pas les règles de profils ou de validation et ne matérialise aucun choix technologique futur par anticipation. ## Transition ### PASS Rédiger et livrer `history/0.0.4/alpha.2.md` avec les résultats réellement observés ; l'appliquer puis committer la tranche. La tranche suivante est `0.0.4-alpha.3`, consacrée à la première skeleton specification de fondation d'un projet gouverné. Le history `alpha.2` et le delta `alpha.3` MAY être livrés dans la même réponse après la gate `PASS`, tout en restant deux archives séparées. Le delta `alpha.3` MUST NOT être appliqué avant le commit complet de `alpha.2`. ### FAIL Consigner le résultat réel dans le history de `alpha.2`, puis corriger le contrat dans `0.0.4-alpha.2.fix.1` ou produire un REPLAN motivé. Aucun skeleton concret de `alpha.3` ne doit être absorbé silencieusement dans un fix.