Files
sasedev-knowledge/deltas/0.0.1/alpha.3.fix.1.md

247 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: deltas/0.0.1/alpha.3.fix.1.md -->
<!-- version: 1 -->
# Delta 0.0.1-alpha.3.fix.1 — correction `SourceId` et précision Web/Maud
## Base requise
État `0.0.1-alpha.3` committé et poussé après application du history :
```text
history/0.0.1/alpha.3.md = FAIL
```
La version devient :
```text
0.0.1-alpha.3.fix.1
```
## Cause du fix
La gate `alpha.3` échoue avec `E0423` parce que `SourceId::new` construit le tuple struct privé via son re-export crate-root :
```text
crate::SourceId(value.to_owned())
```
Le type est public via re-export, mais son champ privé reste possédé par le module `source`. Le fix construit donc la valeur depuis le scope de l'implémentation avec :
```text
Self(value.to_owned())
```
Aucune visibilité de champ n'est élargie et aucune nouvelle API publique n'est ajoutée.
## Régression ajoutée
`knowledge-domain-lib` reçoit un test direct qui prouve qu'un identifiant valide :
```text
SourceId::new("pgr")
```
est construit et expose ensuite `pgr` via `as_str()`.
Les tests précédents restent inchangés dans leur intention : rejet de l'identifiant vide et absence de limite codée à trois sources.
## Précision Web/Maud
Une précision de trajectoire fournie avant clôture de `alpha.3` est intégrée au plan vivant sans démarrer le frontend :
- le skeleton PGR `003-WEB_FRONTEND` est obligatoire pour `0.0.1` ;
- Vite + TypeScript + Sass + Bootstrap servent notamment de laboratoire indépendant pour les templates statiques de référence et les assets ;
- le markup runtime est ensuite adapté et rendu en Maud par les serveurs Actix ;
- le build de production Vite doit produire un manifest d'entrées hashées ;
- l'intégration Actix/Maud consommera ce mapping au lieu de coder des noms hashés ;
- le pattern de `actix-auth-app` est étudié comme corpus, pas copié mécaniquement.
La séparation de scope reste :
```text
alpha.4 -> frontend indépendant, templates statiques, assets, manifest Vite
alpha.5 -> Actix Web, Maud, résolution du manifest et intégration runtime
```
Aucun `package.json`, frontend, serveur Actix, loader Rust Vite ou dépendance Web n'est ajouté par le présent fix.
## Corpus Vite étudié
Le nouveau document :
```text
docs/studies/002-ACTIX_MAUD_VITE_CORPUS_STUDY.md
```
consigne le pattern réellement observé dans :
```text
actix-auth-app-master.zip
SHA-256 bcdf4c568c827b77c70ee476218c2b07ea0fca408ab87d2f044333309d19ab71
```
Il distingue le contrat réutilisable des détails à ne pas importer tels quels, notamment : origin `localhost:5173`, préfixe `/res`, `panic!` sur manifest invalide, arborescence d'assets et dépendances TypeScript non justifiées.
## Fichier Rust corrigé
```text
crates/knowledge-domain-lib/src/source.rs
crates/knowledge-domain-lib/src/unit_tests.rs
```
## Documentation remplacée
```text
CHANGELOG.md
Cargo.toml
README.md
ROADMAP.md
RULES.md
VERSION
docs/000-README.md
docs/architecture/001-PROJECT_PROFILE.md
docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md
docs/plans/001-V0_0_1_FOUNDATION_PLAN.md
docs/validation/001-VALIDATION_MATRIX.md
```
## Documentation ajoutée
```text
docs/studies/002-ACTIX_MAUD_VITE_CORPUS_STUDY.md
deltas/0.0.1/alpha.3.fix.1.md
```
Aucun fichier n'est supprimé.
## `Cargo.lock`
Le delta ne livre pas de `Cargo.lock` préfabriqué. Les trois packages héritent de la nouvelle version workspace `0.0.1-alpha.3.fix.1`; la toolchain opérateur doit donc régénérer le lockfile réel et sa modification doit être incluse au staging du fix si Cargo l'actualise.
## Validation attendue
Après application du history `alpha.3 FAIL`, commit/push de `alpha.3`, puis extraction du présent delta :
```bash
test "$(cat VERSION)" = "0.0.1-alpha.3.fix.1"
git diff --check
python3 - <<'PY'
from pathlib import Path
import tomllib
with Path("Cargo.toml").open("rb") as handle:
root_manifest = tomllib.load(handle)
assert root_manifest["workspace"]["package"]["version"] == "0.0.1-alpha.3.fix.1"
assert set(root_manifest["workspace"]["members"]) == {
"crates/knowledge-domain-lib",
"crates/knowledge-git-api",
"crates/knowledge-sync-api",
}
source = Path("crates/knowledge-domain-lib/src/source.rs").read_text(encoding="utf-8")
tests = Path("crates/knowledge-domain-lib/src/unit_tests.rs").read_text(encoding="utf-8")
study = Path("docs/studies/002-ACTIX_MAUD_VITE_CORPUS_STUDY.md").read_text(encoding="utf-8")
plan = Path("docs/plans/001-V0_0_1_FOUNDATION_PLAN.md").read_text(encoding="utf-8")
rules = Path("RULES.md").read_text(encoding="utf-8")
assert "return Ok(Self(value.to_owned()));" in source
assert "return Ok(crate::SourceId(value.to_owned()));" not in source
assert "source_id_constructs_and_exposes_valid_values" in tests
assert 'SourceId::new("pgr")' in tests
for phrase in (
"build.manifest = true",
"src/app/vite.rs",
"dev -> URL d’entrée Vite directe",
"release -> entrée stable -> manifest Vite -> URL d’asset hashé",
"http://localhost:5173",
):
assert phrase in study, phrase
for phrase in (
"### alpha.4 — baseline Web indépendante et templates de référence",
"### alpha.5 — composition Actix/Maud et manifest Vite",
):
assert phrase in plan, phrase
for phrase in (
"Le skeleton Web PGR `003-WEB_FRONTEND`",
"Le build Vite de production MUST produire",
"le HTML servi en production par les applications Actix est rendu avec Maud",
):
assert phrase in rules, phrase
for forbidden in (
"package.json",
"vite.config.ts",
"crates/knowledge-pgr-server",
"crates/knowledge-howtos-server",
"crates/knowledge-snippets-server",
"crates/knowledge-web-lib",
"migrations",
):
assert not Path(forbidden).exists(), forbidden
print("Knowledge 0.0.1-alpha.3.fix.1 structural audit: clean")
PY
cargo metadata --format-version 1 --no-deps \
> /tmp/sasedev-knowledge-alpha3-fix1-metadata.json
cargo fmt --all
cargo fmt --all -- --check
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_export_completeness.py --root .
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p knowledge-domain-lib --all-targets --all-features
cargo test -p knowledge-git-api --all-targets --all-features
cargo test -p knowledge-sync-api --all-targets --all-features
test -f Cargo.lock
if git check-ignore -q Cargo.lock; then
echo 'Cargo.lock must remain versioned' >&2
exit 1
fi
python3 - <<'PY'
import json
from pathlib import Path
metadata = json.loads(
Path("/tmp/sasedev-knowledge-alpha3-fix1-metadata.json").read_text(encoding="utf-8")
)
packages = {package["name"] for package in metadata["packages"]}
assert packages == {
"knowledge-domain-lib",
"knowledge-git-api",
"knowledge-sync-api",
}, packages
for package in metadata["packages"]:
assert package["version"] == "0.0.1-alpha.3.fix.1", (
package["name"],
package["version"],
)
print("Knowledge 0.0.1-alpha.3.fix.1 Cargo metadata audit: clean")
PY
git add -A
git diff --cached --check
git status --short
```
Ne pas committe `alpha.3.fix.1` avant production de son history à partir des résultats opérateur.