7.3 KiB
Delta 0.0.1-alpha.3 — contrats domaine, Git et synchronisation
Base requise
État 0.0.1-alpha.2 committé et poussé avec :
history/0.0.1/alpha.2.md = PASS
La version devient :
0.0.1-alpha.3
Objet
Matérialiser les premiers contrats passifs réellement nécessaires aux frontières domaine/Git/synchronisation sans démarrer l'implémentation technique.
La tranche :
- étend
knowledge-domain-libavecContentFamily,SourceIdetContentSource; - prouve qu'aucune limite à trois sources n'est codée ;
- crée
knowledge-git-apipour la frontière remplaçableGitRepository; - crée
knowledge-sync-apipour la frontière multi-producteursRepositoryEventSource; - maintient Git indépendant d'une forge et le signal de synchronisation non autoritaire ;
- adopte les audits Rust PGR de structure/façade désormais pertinents ;
- garde
Cargo.lockversionné mais laisse Cargo le régénérer dans l'environnement opérateur.
Aucun knowledge-git-lib, adapter Gitea, serveur Actix, schéma PostgreSQL, worker ou frontend n'est ajouté.
Crates matérialisées
knowledge-domain-lib
identités sémantiques de famille/source
knowledge-git-api
GitRepository + GitReference + GitRevision
aucune forge obligatoire
knowledge-sync-api
RepositoryEventSource + RepositorySyncSignal
signal de réconciliation, pas vérité de contenu
Les suffixes -api sont justifiés ici par des implémentations réellement substituables ou multiples ; ils ne sont pas créés par symétrie.
Audits Rust adoptés
Les scripts read-only suivants sont copiés depuis la baseline PGR v0.1.1 et deviennent des owners locaux de preuve :
scripts/_rust_audit_common.py
scripts/audit_rust_blank_lines.py
scripts/audit_rust_item_spacing.py
scripts/audit_rust_module_order.py
scripts/audit_rust_trait_import_blocks.py
scripts/audit_rust_reexport_blocks.py
scripts/audit_rust_export_completeness.py
audit_rust_const_blocks.py n'est pas adopté comme gate globale. Son usage reste opt-in sur un fichier dont l'ordre des constantes est réellement mécanique.
Cargo.lock
Le delta ne livre pas un lockfile fabriqué. L'ajout des deux packages modifie la résolution workspace ; cargo metadata/check de la gate opérateur MUST régénérer le Cargo.lock réel, qui reste versionné et doit apparaître modifié au staging si Cargo l'actualise.
Fichiers ajoutés
crates/knowledge-domain-lib/src/content_family.rs
crates/knowledge-domain-lib/src/source.rs
crates/knowledge-domain-lib/src/unit_tests.rs
crates/knowledge-git-api/Cargo.toml
crates/knowledge-git-api/src/lib.rs
crates/knowledge-git-api/src/unit_tests.rs
crates/knowledge-sync-api/Cargo.toml
crates/knowledge-sync-api/src/lib.rs
crates/knowledge-sync-api/src/unit_tests.rs
deltas/0.0.1/alpha.3.md
scripts/_rust_audit_common.py
scripts/audit_rust_blank_lines.py
scripts/audit_rust_export_completeness.py
scripts/audit_rust_item_spacing.py
scripts/audit_rust_module_order.py
scripts/audit_rust_reexport_blocks.py
scripts/audit_rust_trait_import_blocks.py
Fichiers remplacés
CHANGELOG.md
Cargo.toml
README.md
RULES.md
VERSION
crates/knowledge-domain-lib/src/lib.rs
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
Aucun fichier n'est supprimé.
Validation attendue
Après application du history alpha.2, commit/push de alpha.2, puis extraction du présent delta depuis la racine :
test "$(cat VERSION)" = "0.0.1-alpha.3"
git diff --check
python3 - <<'PY'
from pathlib import Path
import tomllib
with Path("Cargo.toml").open("rb") as handle:
root_manifest = tomllib.load(handle)
expected_members = {
"crates/knowledge-domain-lib",
"crates/knowledge-git-api",
"crates/knowledge-sync-api",
}
assert set(root_manifest["workspace"]["members"]) == expected_members
assert root_manifest["workspace"]["package"]["version"] == "0.0.1-alpha.3"
assert "knowledge-domain-lib" in root_manifest["workspace"]["dependencies"]
for path in (
"crates/knowledge-domain-lib/src/content_family.rs",
"crates/knowledge-domain-lib/src/source.rs",
"crates/knowledge-domain-lib/src/unit_tests.rs",
"crates/knowledge-git-api/Cargo.toml",
"crates/knowledge-git-api/src/lib.rs",
"crates/knowledge-git-api/src/unit_tests.rs",
"crates/knowledge-sync-api/Cargo.toml",
"crates/knowledge-sync-api/src/lib.rs",
"crates/knowledge-sync-api/src/unit_tests.rs",
):
assert Path(path).is_file(), path
for forbidden in (
"crates/knowledge-git-lib",
"crates/knowledge-forge-gitea-lib",
"crates/knowledge-pgr-server",
"crates/knowledge-howtos-server",
"crates/knowledge-snippets-server",
"migrations",
"package.json",
):
assert not Path(forbidden).exists(), forbidden
for manifest in (
"crates/knowledge-git-api/Cargo.toml",
"crates/knowledge-sync-api/Cargo.toml",
):
text = Path(manifest).read_text(encoding="utf-8")
for forbidden_dependency in ("actix", "gitea", "postgres", "sqlx", "tokio", "tracing"):
assert forbidden_dependency not in text.lower(), (manifest, forbidden_dependency)
architecture = Path("docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md").read_text(encoding="utf-8")
for phrase in (
"knowledge-git-api",
"knowledge-sync-api",
"GitRepository",
"RepositoryEventSource",
"Explicit",
"Periodic",
"ExternalSignal",
):
assert phrase in architecture, phrase
print("Knowledge 0.0.1-alpha.3 structural audit: clean")
PY
cargo metadata --format-version 1 --no-deps > /tmp/sasedev-knowledge-alpha3-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-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
dependencies = {
package["name"]: {dependency["name"] for dependency in package["dependencies"]}
for package in metadata["packages"]
}
assert dependencies["knowledge-domain-lib"] == set()
assert dependencies["knowledge-git-api"] == {"knowledge-domain-lib"}
assert dependencies["knowledge-sync-api"] == {"knowledge-domain-lib"}
print("Knowledge 0.0.1-alpha.3 Cargo boundary audit: clean")
PY
git add -A
git diff --cached --check
git status --short
Ne pas committe alpha.3 avant production de son history à partir des résultats opérateur.