# Delta 0.0.1-alpha.1 — cadrage et gouvernance Knowledge ## Base requise Nouveau dépôt applicatif `sasedev-knowledge` avant sa première tranche gouvernée. Aucune release Knowledge antérieure n'existe. L'absence initiale de `VERSION`, rules, plan, delta/history ou code applicatif est normale. Le cadrage de cette tranche a été préparé à partir des artefacts externes autoritaires suivants : ```text PGR tag stable v0.1.1 pgr-v0.1.1.zip SHA-256 caaf8f456f7f8520172ea7705fd0cf5c5bf0e942dc4a773410bcbe7fe4ce243a PGR publish report pgr-0.1.1-publish.001-report.md = PASS Knowledge start prompt prompts/001-V0_0_1_START_PROMPT.md ``` L'absence de `.git` dans l'archive taggée PGR est normale et a été vérifiée comme telle. ## Objet Établir le gate de framing `0.0.1-alpha.1` avant toute implémentation fonctionnelle : gouvernance locale, owners/skeletons PGR applicables, architecture Git/forge/PostgreSQL, frontières PGR/HOWTO/snippet, plan de release et validation proportionnée. La version devient : ```text 0.0.1-alpha.1 ``` Cette tranche n'ajoute aucun serveur Actix, frontend Vite, schéma PostgreSQL, adapter Gitea ou implémentation Git. ## Fichiers ajoutés ```text .gitignore 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 prompts/001-V0_0_1_START_PROMPT.md ``` Aucun fichier n'est remplacé ou supprimé. Aucun manifest de suppression n'est nécessaire. ## Décisions de cadrage La tranche fixe notamment : - `sasedev-knowledge` comme nom du dépôt applicatif ; - `knowledge` comme nom court et préfixe de crates ; - la composition PGR réellement applicable sans activer Java/Android/Tauri ; - les skeletons `001`, `002` et `003` comme trajectoire de composition, avec matérialisation progressive ; - l'absence d'override PGR identifié ; - Git comme backend autoritaire du contenu ; - une forge comme adapter optionnel distinct des opérations Git ; - une synchronisation fonctionnant sans webhook ; - PostgreSQL comme état applicatif et projection reconstructible ; - le monolithe modulaire comme baseline de départ ; - la séparation des dépôts `pgr`, `howtos` et `snippets` ; - les frontières de force normative entre PGR, HOWTO, snippet et project-local ; - la trajectoire prévisionnelle de `0.0.1` et ses décisions explicitement différées. ## Prévalidation assistant effectuée Avant livraison du delta, la stable PGR source a été vérifiée et rejouée : ```text archive SHA-256 PASS archive CRC PASS 292 entries / 256 files / 36 directories root pgr/ PASS symlinks 0 .git absent VERSION 0.1.1 Python tests 48/48 PASS Markdown headers clean, 231 files Markdown tables clean, 9 tables / 231 files Markdown links clean, 267 links / 231 files 0.1.1 deltas/histories 11 / 11, statuts conformes au publish report ``` Cette prévalidation ne constitue pas le résultat de la gate opérateur Knowledge. ## Validation attendue Depuis la racine du nouveau dépôt après extraction du delta : ```bash test "$(cat VERSION)" = "0.0.1-alpha.1" git diff --check python3 - <<'PY' from pathlib import Path import re expected = { ".gitignore", "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", "prompts/001-V0_0_1_START_PROMPT.md", } actual = { path.as_posix() for path in Path(".").rglob("*") if path.is_file() and ".git" not in path.parts } 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") 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 ( "caaf8f456f7f8520172ea7705fd0cf5c5bf0e942dc4a773410bcbe7fe4ce243a", "Aucun `OVERRIDE` PGR n'est établi", "Git est la source autoritaire du contenu versionné publié", ): assert phrase in rules, phrase for phrase in ("ADOPT", "KEEP-LOCAL", "OVERRIDE", "DEFER", "003-WEB_FRONTEND"): assert phrase in profile, phrase for phrase in ( "Git est le backend du contenu ; une forge est une capacité optionnelle.", "RepositoryEventSource", "PGR / HOWTO / snippet / project-local", "Git versus PostgreSQL", ): assert phrase in architecture, phrase 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", "package.json", "vite.config.ts", "migrations/"): assert not Path(forbidden).exists(), forbidden print("Knowledge 0.0.1-alpha.1 framing audit: clean") PY git add -A git diff --cached --check git status --short ``` Revue opérateur complémentaire : - vérifier qu'aucun fichier fonctionnel non listé n'a été introduit ; - vérifier que le dépôt est réellement nouveau ou que tout fichier local préexistant non livré a été identifié avant `git add -A` ; - vérifier la cohérence des décisions locales et des `DEFER` ; - vérifier l'absence de secret, credential, URL privée sensible ou chemin machine absolu ; - vérifier que les fichiers Eclipse/IDE locaux restent ignorés. ## Transition ### PASS Transmettre les sorties complètes de la gate opérateur. L'assistant produit ensuite une archive history séparée pour `history/0.0.1/alpha.1.md`, puis prépare `0.0.1-alpha.2` consacré au workspace Rust/Cargo minimal conformément au plan. Le commit de `alpha.1` intervient uniquement après application du history observé et avant application du delta suivant. ### FAIL / PARTIAL / BLOCKED Conserver le résultat réel dans le history correspondant. Rester dans le scope `alpha.1` et produire `0.0.1-alpha.1.fix.1` si le défaut relève de cette tranche. Aucun scope `alpha.2` ne doit être introduit dans le fix.