238 lines
6.7 KiB
Markdown
238 lines
6.7 KiB
Markdown
<!-- file: deltas/0.0.1/alpha.1.fix.1.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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/<project>=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/<project>=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"<!-- file: {path.as_posix()} -->", path
|
|
assert re.fullmatch(r"<!-- version: [1-9][0-9]* -->", 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`.
|