Files
pgr/deltas/0.0.4/beta.1.md
2026-09-24 15:07:20 +02:00

9.3 KiB

Delta 0.0.4-beta.1 — réconciliation interne des skeletons

Baseline

Version attendue avant application :

0.0.4-alpha.4.fix.1

Le history history/0.0.4/alpha.4.fix.1.md avec statut PASS MUST avoir été appliqué, committé et poussé avant ce delta. Le FAIL de history/0.0.4/alpha.4.md reste un snapshot historique et MUST NOT être réécrit.

Version après application :

0.0.4-beta.1

Objet

Exécuter la réconciliation interne prévue par docs/plans/004-V0_0_4_SKELETONS_PLAN.md après la fondation gouvernée, le skeleton Rust/Cargo et la correction de sa gate d'instanciation.

La revue porte sur :

ownership normatif
navigation et index
absence de duplication normative
composition 001 -> 002
valeurs d'exemple non universalisées
limites des audits et de la validation
spécialisations technologiques différées
continuité delta/history de 0.0.4

Cette tranche n'ajoute aucune fonctionnalité, aucun profil, aucun skeleton, aucun template et aucun audit.

Résultat de la réconciliation préparatoire

Aucune correction de document vivant n'est nécessaire pour entrer en beta.

Le contrat transversal reste possédé par docs/rules/220-SKELETONS.md. La fondation 001-PROJECT_GOVERNANCE_FOUNDATION.md orchestre les owners généraux sans les redéfinir. La specialization 002-RUST_CARGO_WORKSPACE.md ajoute uniquement 500 + 510, les guides/templates Rust/Cargo et les décisions de son scope.

La navigation courante expose les deux specifications depuis README.md, docs/000-README.md et docs/skeletons/000-README.md. Aucun troisième skeleton ou placeholder de skeleton n'existe.

Les valeurs Rust/Cargo telles que 0.1.0, 2024, project-name, project-core-lib, les seuils Clippy et les chemins de build restent explicitement décrites comme exemples, baselines ou décisions destinataire à revoir. Cargo.lock reste une décision propre au type de produit et au besoin de reproductibilité.

Les limites des audits restent séparées : headers, tableaux et liens Markdown sont des contrôles monotâches ; les audits de style Rust sont facultatifs, read-only et ne remplacent ni Rustfmt, ni Clippy, ni la toolchain Cargo. La validation d'instanciation appartient au skeleton qui prétend matérialiser une baseline utilisable et n'est pas transformée en build global permanent de PGR.

Java/Maven/Gradle et Android possèdent des profils normatifs mais pas encore les templates/corpus nécessaires à un skeleton concret. Web, JNI, Tauri et les autres domaines insuffisamment cadrés restent également différés. Aucun fichier placeholder n'est créé pour réserver ces futurs scopes.

Le FAIL de alpha.4 et le PASS attendu de alpha.4.fix.1 forment une chaîne historique explicite ; le fix ne réécrit pas le delta ou le history échoué.

Scope

REPLACE :

VERSION

ADD :

deltas/0.0.4/beta.1.md

DELETE : aucun.

Les documents vivants, règles, skeletons, templates, scripts, tests et histories antérieurs restent inchangés. Cette absence de modification supplémentaire est intentionnelle : la réconciliation n'a pas identifié de correction réelle qui justifierait une révision artificielle.

Validation opérateur

Après commit et push de 0.0.4-alpha.4.fix.1, appliquer ce delta puis exécuter à la racine :

test "$(cat VERSION)" = '0.0.4-beta.1'
git cat-file -e HEAD:history/0.0.4/alpha.4.fix.1.md
test -f history/0.0.4/alpha.4.fix.1.md
test -f deltas/0.0.4/beta.1.md
test ! -e history/0.0.4/beta.1.md

test -f docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md
test -f docs/skeletons/002-RUST_CARGO_WORKSPACE.md
test ! -e docs/skeletons/003-JAVA_MAVEN_GRADLE.md
test ! -e docs/skeletons/003-ANDROID.md

grep -A2 '^## Statut$' history/0.0.4/alpha.4.md | grep -Fx 'FAIL'
grep -A2 '^## Statut$' history/0.0.4/alpha.4.fix.1.md | grep -Fx 'PASS'

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
import tomllib

expected_histories = {
    'alpha.1.md': 'PASS',
    'alpha.2.md': 'PASS',
    'alpha.3.md': 'PASS',
    'alpha.4.md': 'FAIL',
    'alpha.4.fix.1.md': 'PASS',
}
histories = {path.name for path in Path('history/0.0.4').glob('*.md')}
assert histories == set(expected_histories), histories
for name, status in expected_histories.items():
    text = Path('history/0.0.4', name).read_text(encoding='utf-8')
    assert re.search(rf'## Statut\s+{status}\s', text), (name, status)

deltas = {path.name for path in Path('deltas/0.0.4').glob('*.md')}
assert deltas == set(expected_histories) | {'beta.1.md'}, deltas

skeletons = sorted(path.name for path in Path('docs/skeletons').glob('*.md'))
assert skeletons == [
    '000-README.md',
    '001-PROJECT_GOVERNANCE_FOUNDATION.md',
    '002-RUST_CARGO_WORKSPACE.md',
], skeletons

root_index = Path('README.md').read_text(encoding='utf-8')
docs_index = Path('docs/000-README.md').read_text(encoding='utf-8')
skel_index = Path('docs/skeletons/000-README.md').read_text(encoding='utf-8')
for name in (
    '001-PROJECT_GOVERNANCE_FOUNDATION.md',
    '002-RUST_CARGO_WORKSPACE.md',
):
    assert name in root_index, name
    assert name in docs_index, name
    assert name in skel_index, name

foundation = Path('docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md').read_text(encoding='utf-8')
for owner in (
    '200-GOVERNANCE.md',
    '210-WORKFLOW.md',
    '300-DOCUMENTATION.md',
    '400-VALIDATION.md',
):
    assert owner in foundation, owner

rust = Path('docs/skeletons/002-RUST_CARGO_WORKSPACE.md').read_text(encoding='utf-8')
for owner in ('500-LANGUAGES.md', '510-RUST_CARGO.md'):
    assert owner in rust, owner
for value in ('0.1.0', '2024', 'project-name', 'project-core-lib'):
    assert value in rust, value
assert 'Ils ne deviennent jamais des valeurs universelles par simple copie.' in rust
assert 'Cargo.lock' in rust

rule = Path('docs/rules/220-SKELETONS.md').read_text(encoding='utf-8')
assert 'Un skeleton sélectionne les owners normatifs applicables ; il ne redéfinit pas leur contenu.' in rule
assert 'MUST NOT devenir une valeur universelle par simple copie' in rule

validation = Path('docs/validation/001-VALIDATION_MATRIX.md').read_text(encoding='utf-8')
for audit_id in ('PGR-MD-HEADER-001', 'PGR-MD-TABLE-001', 'PGR-NAV-001'):
    assert audit_id in validation, audit_id
assert 'vérifie uniquement l\'existence des cibles de liens Markdown locaux inline' in validation

rust_audits = Path('docs/validation/002-RUST_STYLE_AUDITS.md').read_text(encoding='utf-8')
assert 'facultatif' in rust_audits.lower()
assert 'Les audits ne modifient ni les fichiers inspectés ni l'arborescence de build.' in rust_audits

plan = Path('docs/plans/004-V0_0_4_SKELETONS_PLAN.md').read_text(encoding='utf-8')
for deferred in ('Java / Maven / Gradle — différé', 'Android — différé', 'Web, JNI, Tauri et autres familles absentes — différés'):
    assert deferred in plan, deferred

for path in (
    Path('templates/rust-cargo/rustfmt.toml'),
    Path('templates/rust-cargo/clippy.toml'),
    Path('templates/rust-cargo/.cargo/config.toml'),
    Path('templates/rust-cargo/Cargo.toml'),
    Path('templates/rust-cargo/crates/project-core-lib/Cargo.toml'),
):
    with path.open('rb') as stream:
        tomllib.load(stream)

print('Skeleton beta reconciliation audit: clean (5 prior histories, 3 skeleton docs, 5 TOML parsed)')
PY

git diff --check
git add VERSION deltas/0.0.4/beta.1.md
git diff --cached --check
git status --short

La sortie Git attendue avant ajout du history beta.1 est exactement :

M  VERSION
A  deltas/0.0.4/beta.1.md

Revue opérateur complémentaire

Confirmer que :

  • 220 reste le propriétaire du contrat transversal et que 001/002 n'en dupliquent pas les obligations ;
  • 001 reste sans spécialisation technologique et 002 n'élargit pas 510 vers Android, WASM, Tauri, FFI ou un framework ;
  • les valeurs de templates restent des exemples adaptables et non des politiques globales ;
  • les audits documentaires et Rust restent délimités par leur propriété réellement vérifiée ;
  • Java/Android/Web/JNI/Tauri restent différés faute de pièces suffisantes, sans placeholder ni skeleton composite anticipé ;
  • le FAIL alpha.4 reste visible et la correction alpha.4.fix.1 est enregistrée séparément.

Transition

PASS

Créer et appliquer séparément history/0.0.4/beta.1.md, committer et pousser beta.1, puis préparer 0.0.4-rc.1.

La RC doit geler le scope, préparer l'entrée candidate 0.0.4 du changelog et prompts/005-V0_0_5_START_PROMPT.md si la trajectoire est confirmée, puis rejouer uniquement les validations réellement invalidées par la release.

Le history beta.1 et le delta rc.1 MAY être livrés ensemble sous forme de deux archives séparées après observation de la gate opérateur.

FAIL

Enregistrer le diagnostic réel dans history/0.0.4/beta.1.md, puis corriger uniquement la réconciliation dans 0.0.4-beta.1.fix.N ou faire un REPLAN explicite si un défaut révèle un changement de scope.