7.3 KiB
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 :
history/0.0.1/alpha.3.md = FAIL
La version devient :
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 :
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 :
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 :
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_FRONTENDest obligatoire pour0.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-appest étudié comme corpus, pas copié mécaniquement.
La séparation de scope reste :
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 :
docs/studies/002-ACTIX_MAUD_VITE_CORPUS_STUDY.md
consigne le pattern réellement observé dans :
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é
crates/knowledge-domain-lib/src/source.rs
crates/knowledge-domain-lib/src/unit_tests.rs
Documentation remplacée
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
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 :
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.