6.8 KiB
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 :
0.0.4-beta.1
Version après application :
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 :
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 :
VERSION
ADD :
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 :
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 :
M VERSION
A deltas/0.0.4/beta.1.fix.1.md
Revue opérateur complémentaire
Confirmer que :
- le
FAIL beta.1reste visible et n'est pas réécrit ; - le fix ne change aucune règle, aucun skeleton, aucun template et aucun audit ;
220reste le propriétaire du contrat transversal et001/002restent 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.