201 lines
6.8 KiB
Markdown
201 lines
6.8 KiB
Markdown
<!-- file: deltas/0.0.4/beta.1.fix.1.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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.
|