# Delta 0.0.1-alpha.1.fix.1 — conformité Eclipse et topologie multi-app ## Base requise État `0.0.1-alpha.1` committé avec : ```text deltas/0.0.1/alpha.1.md history/0.0.1/alpha.1.md = FAIL ``` Le delta `alpha.1` historique ne doit pas être modifié. La version devient : ```text 0.0.1-alpha.1.fix.1 ``` ## Objet Corriger uniquement les défauts observés pendant la gate `alpha.1` et le cadrage associé : - adopter la politique Eclipse PGR réellement applicable ; - versionner `.settings/org.eclipse.core.resources.prefs` ; - ajouter le header `file/version` au `.gitignore` ; - rendre la gate de fichiers consciente des règles Git ignore au lieu d'interdire les fichiers locaux ignorés ; - remplacer la baseline « application Web unique/monolithe » par un workspace modulaire à trois applications Actix Web distinctes ; - expliciter au moins trois sources Git initiales et PostgreSQL partagé pour l'état transversal. Aucun code fonctionnel, manifest Cargo, frontend, migration SQL ou adapter forge n'est ajouté. ## Fichiers ajoutés ```text .settings/org.eclipse.core.resources.prefs deltas/0.0.1/alpha.1.fix.1.md ``` ## Fichiers remplacés ```text .gitignore VERSION README.md RULES.md ROADMAP.md CHANGELOG.md docs/objectives/001-PROJECT_OBJECTIVES.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 ``` Aucun fichier n'est supprimé. ## Décisions corrigées ### Eclipse La politique locale devient conforme à la baseline PGR : ```text .project ignoré .classpath ignoré .settings/* ignoré .settings/org.eclipse.core.resources.prefs versionné ``` La préférence versionnée contient : ```text eclipse.preferences.version=1 encoding/=UTF-8 ``` ### Topologie applicative Le workspace possède trois launchers distincts : ```text knowledge-pgr-server -> pgr.sasedev.com knowledge-howtos-server -> howtos.sasedev.com knowledge-snippets-server -> snippets.sasedev.com ``` Ils partagent des crates `-lib` lorsque l'ownership est commun ; ils ne deviennent pas trois copies du même domaine. ### Sources Git La baseline contient au minimum trois sources : ```text pgr howtos snippets ``` Le modèle futur doit permettre plusieurs sources par famille et ne doit pas coder une limite fixe à trois repositories. ### PostgreSQL La baseline retient une base PostgreSQL logique partagée entre les trois applications pour l'état transversal et les projections reconstructibles. Le contenu éditorial publié reste autoritaire dans Git. ## Validation attendue Après application du history `alpha.1`, commit/push de `alpha.1`, puis extraction du présent delta depuis la racine du dépôt : ```bash test "$(cat VERSION)" = "0.0.1-alpha.1.fix.1" git diff --check grep -Fx '# file: .gitignore' .gitignore grep -Fx '# version: 2' .gitignore grep -Fx '.settings/*' .gitignore grep -Fx '!.settings/org.eclipse.core.resources.prefs' .gitignore grep -Fx 'eclipse.preferences.version=1' .settings/org.eclipse.core.resources.prefs grep -Fx 'encoding/=UTF-8' .settings/org.eclipse.core.resources.prefs git check-ignore -q .project if git check-ignore -q .settings/org.eclipse.core.resources.prefs; then echo '.settings/org.eclipse.core.resources.prefs must be tracked, not ignored' >&2 exit 1 fi python3 - <<'PY' from pathlib import Path import re import subprocess expected = { ".gitignore", ".settings/org.eclipse.core.resources.prefs", "VERSION", "README.md", "RULES.md", "ROADMAP.md", "CHANGELOG.md", "docs/000-README.md", "docs/objectives/001-PROJECT_OBJECTIVES.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", "deltas/0.0.1/alpha.1.md", "deltas/0.0.1/alpha.1.fix.1.md", "history/0.0.1/alpha.1.md", "prompts/001-V0_0_1_START_PROMPT.md", } actual = set( subprocess.check_output( ["git", "ls-files", "--cached", "--others", "--exclude-standard"], text=True, ).splitlines() ) assert actual == expected, (sorted(actual - expected), sorted(expected - actual)) for path_string in sorted(expected): path = Path(path_string) if path.suffix != ".md": continue lines = path.read_text(encoding="utf-8").splitlines() assert lines[0] == f"", path assert re.fullmatch(r"", lines[1]), path rules = Path("RULES.md").read_text(encoding="utf-8") objectives = Path("docs/objectives/001-PROJECT_OBJECTIVES.md").read_text(encoding="utf-8") profile = Path("docs/architecture/001-PROJECT_PROFILE.md").read_text(encoding="utf-8") architecture = Path("docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md").read_text(encoding="utf-8") plan = Path("docs/plans/001-V0_0_1_FOUNDATION_PLAN.md").read_text(encoding="utf-8") for phrase in ( "knowledge-pgr-server", "knowledge-howtos-server", "knowledge-snippets-server", ): assert phrase in rules, phrase assert phrase in objectives, phrase assert phrase in architecture, phrase for phrase in ( "une base PostgreSQL logique partagée", "au moins trois sources", ): assert phrase in architecture, phrase assert "Topologie d'administration" in profile assert "### alpha.2 — workspace Rust/Cargo minimal" in plan assert "### rel.1 — fermeture stable" in plan for forbidden in ( "src/main.rs", "src/lib.rs", "Cargo.toml", "package.json", "vite.config.ts", "migrations/", ): assert not Path(forbidden).exists(), forbidden print("Knowledge 0.0.1-alpha.1.fix.1 framing audit: clean") PY git add -A git diff --cached --check git status --short ``` ## Revue opérateur complémentaire Vérifier notamment : - que `.project` reste local/ignoré et n'apparaît pas dans le staging ; - que `.settings/org.eclipse.core.resources.prefs` apparaît bien comme ajouté/suivi ; - qu'aucun code fonctionnel n'a été introduit ; - que trois applications distinctes sont bien la topologie produit voulue ; - que le partage PostgreSQL concerne l'état de plateforme et non le contenu Git autoritaire ; - que la topologie d'administration reste ouverte et qu'aucun quatrième serveur n'est inventé. ## Transition ### PASS Produire `history/0.0.1/alpha.1.fix.1.md`, appliquer ce history, committer/pousser la tranche, puis seulement préparer `0.0.1-alpha.2`. ### FAIL / PARTIAL / BLOCKED Conserver le résultat réel dans `history/0.0.1/alpha.1.fix.1.md` et rester dans le scope `alpha.1` avec un éventuel `alpha.1.fix.2`.