Files
pgr/deltas/0.0.4/beta.1.fix.1.md
2026-09-24 17:38:05 +02:00

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.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.