# Delta 0.0.4-beta.1.fix.1 — correction de la gate de réconciliation ## Baseline et version Baseline : tranche `0.0.4-beta.1` enregistrée `FAIL`, avec `history/0.0.4/beta.1.md` appliqué, committé et poussé. Le delta et le history `beta.1` restent des snapshots historiques et MUST NOT être réécrits. Version avant application : ```text 0.0.4-beta.1 ``` Version après application : ```text 0.0.4-beta.1.fix.1 ``` ## Motif La gate `beta.1` a échoué avant l'exécution de son audit Python de réconciliation à cause d'une chaîne délimitée par apostrophes simples contenant l'apostrophe de `l'arborescence` : ```text SyntaxError: unterminated string literal ``` Les tests, audits Markdown et contrôles précédant cette commande ont réussi. Aucun défaut des règles, skeletons, templates ou documents vivants n'a été observé. Le présent fix corrige uniquement la gate en utilisant une chaîne Python correctement délimitée, puis rejoue les preuves nécessaires de la réconciliation. ## Scope REPLACE : ```text VERSION ``` ADD : ```text deltas/0.0.4/beta.1.fix.1.md ``` DELETE : aucun. Aucun document vivant, règle, skeleton, template, script, test ou history antérieur n'est modifié. ## Validation opérateur Après commit et push de `0.0.4-beta.1` avec son history `FAIL`, appliquer ce delta puis exécuter à la racine : ```bash test "$(cat VERSION)" = '0.0.4-beta.1.fix.1' git cat-file -e HEAD:history/0.0.4/beta.1.md test -f history/0.0.4/beta.1.md test -f deltas/0.0.4/beta.1.md test -f deltas/0.0.4/beta.1.fix.1.md test ! -e history/0.0.4/beta.1.fix.1.md grep -A2 '^## Statut$' history/0.0.4/beta.1.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', 'beta.1.md': 'FAIL', } 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.fix.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 fix audit: clean (beta.1 FAIL recorded, 3 skeleton docs, 5 TOML parsed)') PY git diff --check git add VERSION deltas/0.0.4/beta.1.fix.1.md git diff --cached --check git status --short ``` La sortie Git attendue avant ajout du history du fix est exactement : ```text M VERSION A deltas/0.0.4/beta.1.fix.1.md ``` ## Revue opérateur complémentaire Confirmer que : - le `FAIL beta.1` reste visible et n'est pas réécrit ; - le fix ne change aucune règle, aucun skeleton, aucun template et aucun audit ; - `220` reste le propriétaire du contrat transversal et `001`/`002` restent des orchestrateurs/compositeurs de leurs owners ; - les valeurs de templates restent adaptables et non universelles ; - Java/Android/Web/JNI/Tauri restent différés sans placeholder anticipé. ## Transition ### PASS Créer et appliquer séparément `history/0.0.4/beta.1.fix.1.md`, committer et pousser le fix, puis préparer `0.0.4-rc.1`. Le history du fix et le delta `rc.1` MAY être livrés ensemble sous forme de deux archives séparées après observation de cette gate opérateur. ### FAIL Enregistrer le diagnostic réel dans `history/0.0.4/beta.1.fix.1.md`, puis poursuivre par `beta.1.fix.2` limité à la réconciliation ou faire un REPLAN explicite si un défaut de contenu est réellement découvert.