diff --git a/Cargo.toml b/Cargo.toml index 3a1adf9..fc59ee0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 31 +# version: 32 [workspace] resolver = "3" @@ -16,7 +16,7 @@ members = [ ] [workspace.package] -version = "0.0.3-alpha.1.fix.1" +version = "0.0.3-alpha.1.fix.2" edition = "2024" publish = false repository = "https://git.sasedev.com/Sasedev/sasedev-knowledge" diff --git a/VERSION b/VERSION index 1cbb940..f55a30b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.3-alpha.1.fix.1 +0.0.3-alpha.1.fix.2 diff --git a/deltas/0.0.3/alpha.1.fix.2.md b/deltas/0.0.3/alpha.1.fix.2.md new file mode 100644 index 0000000..6dc39d2 --- /dev/null +++ b/deltas/0.0.3/alpha.1.fix.2.md @@ -0,0 +1,173 @@ + + + +# Delta 0.0.3-alpha.1.fix.2 — complétion de la preuve opérateur + +## Baseline requise + +Partir de `0.0.3-alpha.1.fix.1` après application et commit/push de son history `PARTIAL`. + +La version devient : + +```text +0.0.3-alpha.1.fix.2 +``` + +## Objet + +Fermer uniquement la preuve restée incomplète sur `alpha.1.fix.1`. + +Aucune décision fonctionnelle n'est modifiée et aucune fonctionnalité Git n'est ajoutée. Le fix : + +- conserve le résultat `PARTIAL` de `alpha.1.fix.1` comme artefact historique ; +- met à jour le plan actif pour refléter cette transition ; +- rejoue la non-régression nécessaire après le bump de version ; +- exécute explicitement les assertions documentaires/horizon, l'hygiène texte, l'invariance du code produit et la politique des lockfiles ; +- termine par le staging requis. + +Le développement du contrat d'écriture provider-neutral reste réservé à `alpha.2` après `PASS` de ce fix. + +## Scope des fichiers + +REPLACE : + +```text +VERSION +Cargo.toml +docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md +``` + +ADD : + +```text +deltas/0.0.3/alpha.1.fix.2.md +``` + +DELETE : aucun. + +Aucun fichier sous `crates/` ou `Web/` n'est modifié. + +Aucun history `alpha.1.fix.2` n'est inclus dans ce delta. + +## Gate opérateur + +Exécuter depuis la racine du dépôt après application du delta : + +```bash +test "$(cat VERSION)" = '0.0.3-alpha.1.fix.2' +grep -F 'version = "0.0.3-alpha.1.fix.2"' Cargo.toml + +git diff --check + +python3 -B scripts/audit_markdown_headers.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts deltas history +python3 -B scripts/audit_markdown_links.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts deltas history +python3 -B scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts deltas history + +cargo fmt --all +cargo fmt --all -- --check + +python3 -B scripts/audit_rust_test_layout.py crates +python3 -B scripts/audit_rust_blank_lines.py crates +python3 -B scripts/audit_rust_item_spacing.py crates +python3 -B scripts/audit_rust_module_order.py crates +python3 -B scripts/audit_rust_trait_import_blocks.py crates +python3 -B scripts/audit_rust_reexport_blocks.py crates +python3 -B scripts/audit_rust_crate_root_facades.py crates +python3 -B scripts/audit_rust_export_completeness.py --root . --summary-only + +cargo metadata --format-version 1 --no-deps > /tmp/sasedev-knowledge-0.0.3-alpha.1.fix.2-metadata.json +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p knowledge-git-lib --test git_read_path +cargo test --workspace --all-targets --all-features + +python3 - <<'PYGATE' +from pathlib import Path + +history = Path('history/0.0.3/alpha.1.fix.1.md').read_text(encoding='utf-8') +assert '\nPARTIAL\n' in history + +changelog = Path('CHANGELOG.md').read_text(encoding='utf-8') +assert '## 0.0.3' not in changelog +assert '## 0.0.2' in changelog + +roadmap = Path('ROADMAP.md').read_text(encoding='utf-8') +assert '- `( ) 0.0.3`' in roadmap +for version in ('0.0.4', '0.0.5', '0.0.6', '0.0.7'): + assert f'- `(h) {version}`' in roadmap, version +assert 'horizon prévisionnel' in roadmap + +workflow = Path('docs/rules/210-WORKFLOW.md').read_text(encoding='utf-8') +assert 'pendant les dernières phases de `N`' in workflow +assert 'rattrapage et non le cycle normal' in workflow + +documentation = Path('docs/rules/300-DOCUMENTATION.md').read_text(encoding='utf-8') +assert "Il n'est normalement pas rédigé au démarrage" in documentation +assert "au moins les deux releases d'horizon qui la suivent" in documentation + +prompt_template = Path('docs/templates/001-NEW_SESSION_PROMPT.md').read_text(encoding='utf-8') +assert 'pendant les dernières phases de la release `N`' in prompt_template +assert 'MUST NOT inventer ces valeurs' in prompt_template + +plan = Path('docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md').read_text(encoding='utf-8') +assert '### alpha.1.fix.2 — complétion de la preuve opérateur' in plan +assert 'Un `PASS` complet de `alpha.1.fix.2` autorise `0.0.3-alpha.2`' in plan + +assert Path('prompts/003-V0_0_3_START_PROMPT.md').is_file() +assert not Path('history/0.0.3/alpha.1.fix.2.md').exists() +assert not Path('crates/knowledge-forge-gitea-lib').exists() +assert not Path('crates/knowledge-store-postgres-lib').exists() +assert not Path('migrations').exists() + +print('Knowledge 0.0.3-alpha.1.fix.2 completion audit: clean') +PYGATE + +python3 - <<'PYTEXT' +from pathlib import Path + +roots = [Path('README.md'), Path('RULES.md'), Path('ROADMAP.md'), Path('CHANGELOG.md'), Path('docs'), Path('prompts'), Path('deltas'), Path('history')] +paths = [] +for root in roots: + if root.is_file(): + paths.append(root) + elif root.is_dir(): + paths.extend(path for path in root.rglob('*') if path.is_file()) +for path in paths: + data = path.read_bytes() + assert b'\r' not in data, path + assert data.endswith(b'\n'), path + assert not data.endswith(b'\n\n'), path + text = data.decode('utf-8') + for number, line in enumerate(text.splitlines(), start=1): + assert line == line.rstrip(' \t'), (path, number) +print(f'Knowledge 0.0.3-alpha.1.fix.2 text hygiene: clean ({len(paths)} file(s))') +PYTEXT + +test -z "$(git diff --name-only -- crates Web)" +test ! -e history/0.0.3/alpha.1.fix.2.md + +test -f Cargo.lock +git check-ignore -q Cargo.lock +if git ls-files --error-unmatch Cargo.lock >/dev/null 2>&1; then + echo 'Cargo.lock must remain untracked for Knowledge' >&2 + exit 1 +fi + +test -f Web/knowledge-template-lab/package-lock.json + +git add -A +git diff --cached --check +git status --short +``` + +La gate ne rejoue pas npm/Vite/HTTP : aucun fichier Web ni contrat runtime n'est modifié. + +## Transition + +### PASS + +Produire `history/0.0.3/alpha.1.fix.2.md`, l'appliquer, commit/push `0.0.3-alpha.1.fix.2`, puis préparer `0.0.3-alpha.2`. + +### FAIL / PARTIAL / BLOCKED + +Conserver le résultat réel dans son history avant toute correction. Une correction bornée utilise `alpha.1.fix.3`; `.fix.3` déclenche en outre la revue `REPLAN` prévue par le plan actif. diff --git a/docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md b/docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md index 178f2e7..9a23384 100644 --- a/docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md +++ b/docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md @@ -1,5 +1,5 @@ - + # Plan 0.0.3 — écriture Git contrôlée et push gardé @@ -147,6 +147,14 @@ La gate de `alpha.1` reste une gate de cadrage : elle valide baseline, documenta - garder `prompts/003-V0_0_3_START_PROMPT.md` comme rattrapage historique valide ; - ne modifier aucun code sous `crates/` ni `Web/`. +### alpha.1.fix.2 — complétion de la preuve opérateur + +- conserver `alpha.1.fix.1` comme `PARTIAL` sans réécrire les preuves observées ; +- ne modifier aucune décision fonctionnelle du cadrage ; +- rejouer la gate utile et terminer explicitement les assertions documentaires, l'hygiène texte, l'invariance `crates/` / `Web/`, la politique `Cargo.lock` et le staging ; +- ne modifier aucun code sous `crates/` ni `Web/` ; +- autoriser `alpha.2` uniquement après un `PASS` complet. + ### alpha.2 — contrat d'écriture provider-neutral - étendre `knowledge-git-api` avec un contrat distinct du `GitRepository` de lecture ; @@ -227,7 +235,7 @@ La release est fermable lorsque : - les règles/architecture décrivent l'état effectivement obtenu ; - beta et RC ont fermé les non-régressions prévues. -Le `PARTIAL` de `alpha.1` autorise uniquement `0.0.3-alpha.1.fix.1`. Un `PASS` de ce fix autorise `0.0.3-alpha.2`. Tout autre statut produit d'abord son history puis un nouveau fix ou REPLAN selon le diagnostic. +Le `PARTIAL` de `alpha.1` a autorisé `0.0.3-alpha.1.fix.1`. Le retour opérateur de ce premier fix reste `PARTIAL` parce que son transcript s'arrête avant les assertions finales imposées par le delta ; il autorise donc uniquement `0.0.3-alpha.1.fix.2`. Un `PASS` complet de `alpha.1.fix.2` autorise `0.0.3-alpha.2`. Tout autre statut produit d'abord son history puis un nouveau fix ou REPLAN selon le diagnostic. ## Revue d'horizon diff --git a/history/0.0.3/alpha.1.fix.2.md b/history/0.0.3/alpha.1.fix.2.md new file mode 100644 index 0000000..41f3852 --- /dev/null +++ b/history/0.0.3/alpha.1.fix.2.md @@ -0,0 +1,143 @@ + + + +# History 0.0.3-alpha.1.fix.2 — complétion de la preuve opérateur + +## Statut + +PASS + +La gate opérateur de `0.0.3-alpha.1.fix.2` exécutée le `2026-09-29` est complète et propre. Elle ferme uniquement la preuve restée incomplète après `alpha.1.fix.1` et autorise l'ouverture fonctionnelle de `alpha.2`. + +## Baseline opérateur + +`alpha.1.fix.1` `PARTIAL` a été historisé, committé et poussé avant application de `alpha.1.fix.2` : + +```text +history/0.0.3/alpha.1.fix.1.md PARTIAL +commit dd63e85 +message 0.0.3-alpha.1.fix.1 +branch master +push origin/master PASS +workspace après push propre +``` + +Le push observé a avancé `origin/master` de `a74a198` à `dd63e85`. + +## Version et documentation + +Les contrôles de version et Markdown passent : + +```text +VERSION 0.0.3-alpha.1.fix.2 +Cargo workspace version 0.0.3-alpha.1.fix.2 +git diff --check PASS +Markdown header audit clean (104 file(s)) +Markdown link audit clean (78 local link(s), 104 file(s)) +Markdown table audit clean (4 table(s), 104 file(s)) +``` + +## Formatage et audits Rust + +La séquence locale est respectée et propre : + +```text +cargo fmt --all PASS +cargo fmt --all -- --check PASS +Rust test-layout audit clean (9 crate(s)) +Rust blank-line audit clean (32 file(s)) +Rust item-spacing audit clean (32 file(s)) +Rust module-order audit clean (32 file(s)) +Rust trait-import-block audit clean (32 file(s)) +Rust re-export-block audit clean (32 file(s)) +Rust crate-root facade audit clean (6 crate root(s)) +Rust export completeness audit 0 candidate(s) across 9 package(s) +``` + +## Cargo, Clippy et tests + +Les neuf packages compilent en `0.0.3-alpha.1.fix.2`. + +```text +cargo metadata --format-version 1 --no-deps PASS +cargo check --workspace PASS +cargo clippy --workspace --all-targets --all-features + -- -D warnings PASS +cargo test -p knowledge-git-lib --test git_read_path PASS (2) +cargo test --workspace --all-targets --all-features PASS +``` + +Tests workspace observés : + +```text +knowledge-app-lib 3 PASS +knowledge-domain-lib 3 PASS +knowledge-git-api 1 PASS +knowledge-git-lib 8 unit PASS + 2 integration PASS +knowledge-sync-api 1 PASS +knowledge-web-lib 4 PASS +launchers 0 test chacun +``` + +## Complétion de la preuve documentaire + +L'audit spécifique de fin de gate passe : + +```text +Knowledge 0.0.3-alpha.1.fix.2 completion audit: clean +``` + +Il confirme notamment : + +- `history/0.0.3/alpha.1.fix.1.md = PARTIAL` conservé sans réécriture ; +- aucune section `0.0.3` prématurée dans `CHANGELOG.md` ; +- `ROADMAP.md` contient `0.0.3` engagée et `0.0.4` à `0.0.7` comme horizon prévisionnel ; +- le changelog est défini comme artefact de stabilisation et non de démarrage ; +- le prompt `N+1` est normalement préparé pendant les dernières phases de `N` ; +- `prompts/003-V0_0_3_START_PROMPT.md` reste le rattrapage historique attendu ; +- le plan autorise `0.0.3-alpha.2` seulement après le présent PASS ; +- aucune crate Gitea/PostgreSQL et aucun répertoire `migrations/` ne sont introduits. + +La revue d'horizon plus large des trois sites PGR, Snippets et Howtos reste volontairement prévue plus tard dans la release ; elle n'est pas absorbée par ce fix de validation. + +## Hygiène texte, scope et lockfiles + +L'hygiène texte passe sur les `104` fichiers gouvernés : + +```text +Knowledge 0.0.3-alpha.1.fix.2 text hygiene: clean (104 file(s)) +``` + +Les contrôles finaux passent également : + +- aucun diff sous `crates/` ni `Web/` ; +- aucun history `alpha.1.fix.2` présent pendant la gate ; +- `Cargo.lock` présent localement, ignoré et non suivi ; +- `Web/knowledge-template-lab/package-lock.json` présent ; +- staging final sans erreur via `git diff --cached --check`. + +Le staging observé est exactement : + +```text +M Cargo.toml +M VERSION +A deltas/0.0.3/alpha.1.fix.2.md +M docs/plans/003-V0_0_3_GIT_WRITE_PLAN.md +``` + +## Décision + +`0.0.3-alpha.1.fix.2` est `PASS`. + +La séquence de cadrage/correction est fermée. La transition autorisée est : + +```text +appliquer ce history +-> git add / diff --cached --check / status +-> commit exact "0.0.3-alpha.1.fix.2" +-> push origin master +-> vérifier le workspace propre +-> appliquer seulement ensuite 0.0.3-alpha.2 +``` + +`alpha.2` peut maintenant matérialiser le contrat d'écriture Git provider-neutral dans `knowledge-git-api`, sans implémenter encore le worktree d'écriture ni le push distant réel.