0.0.2-alpha.2
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/001-PROJECT_PROFILE.md -->
|
||||
<!-- version: 10 -->
|
||||
<!-- version: 11 -->
|
||||
|
||||
# Profil du projet Knowledge
|
||||
|
||||
@@ -78,55 +78,56 @@ Aucun `OVERRIDE` n'est requis par l'adoption `v0.1.3`.
|
||||
|
||||
## Matrice des décisions importantes
|
||||
|
||||
| Décision | Classification | Contrat retenu / condition de reprise |
|
||||
|----------------------------------------|-----------------------------------|----------------------------------------------------------------------------------------------------------|
|
||||
| Dépôt applicatif | `KEEP-LOCAL` | `sasedev-knowledge` ; workspace unique de la plateforme |
|
||||
| Nom court / préfixe crates | `KEEP-LOCAL` | `knowledge` / `knowledge-` |
|
||||
| Dépôt normatif | `KEEP-LOCAL` | dépôt existant `pgr`, jamais fusionné dans le dépôt applicatif |
|
||||
| Dépôt HOWTO | `KEEP-LOCAL` | dépôt séparé `howtos` |
|
||||
| Dépôt snippets | `KEEP-LOCAL` | dépôt séparé `snippets` |
|
||||
| Nombre de sources Git | `KEEP-LOCAL` | au moins trois sources initiales, sans limite codée à trois |
|
||||
| Git comme backend du contenu | `KEEP-LOCAL` | invariant d'architecture Knowledge |
|
||||
| Implémentation Git de `0.0.2` | `KEEP-LOCAL` | processus `git` contrôlé derrière `knowledge-git-api` ; décision réévaluable derrière le contrat |
|
||||
| Configuration physique Git | `KEEP-LOCAL` | future `knowledge-git-lib` ; source locale/remote + racine d'état ; pas dans le domaine |
|
||||
| Copies Git générées | `KEEP-LOCAL` | racine d'état explicite hors dépôt source, mirrors et snapshots adressés par clé sûre/révision |
|
||||
| Partage du cache Git entre processus | `DEFER` | état root exclusif à une instance backend en `0.0.2` ; reprendre avec verrouillage inter-processus réel |
|
||||
| Forge | `KEEP-LOCAL` | capacité optionnelle derrière adapter ; aucune API de forge dans le domaine |
|
||||
| Gitea | `DEFER` | premier adapter candidat ; reprendre lorsque des capacités forge-only sont implémentées |
|
||||
| Synchronisation sans webhook | `KEEP-LOCAL` | explicite/périodique convergent vers le même cas d'usage ; hooks/webhooks restent accélérateurs |
|
||||
| Scheduler périodique concret | `DEFER` | créer seulement lorsque son owner runtime/lifecycle est démontré |
|
||||
| Dernière révision observée en `0.0.2` | `KEEP-LOCAL` | fournie par l'appelant et retournée par le cas d'usage ; pas de pseudo-persistance locale |
|
||||
| PostgreSQL | `KEEP-LOCAL` | une base logique partagée future pour état transversal/projections ; jamais vérité du contenu Git publié |
|
||||
| Rust stable / édition 2024 | `ADOPT` | profil Rust/Cargo PGR |
|
||||
| Workspace Cargo | `ADOPT` | skeleton Rust/Cargo déjà matérialisé |
|
||||
| `Cargo.lock` | `KEEP-LOCAL` | généré localement et ignoré ; manifests Cargo versionnés |
|
||||
| Actix Web | `KEEP-LOCAL` | trois launchers existants et composition partagée dans `knowledge-web-lib` |
|
||||
| Maud | `KEEP-LOCAL` | rendu SSR commun dans `knowledge-web-lib` |
|
||||
| TypeScript | `ADOPT` | owner `530` |
|
||||
| Package manager frontend | `KEEP-LOCAL` | npm ; `package-lock.json` versionné |
|
||||
| Vite | `KEEP-LOCAL` + owner `550` adopté | build/preview de références et manifest consommé par Maud |
|
||||
| Sass | `KEEP-LOCAL` + owner `560` adopté | styles source et assets réellement servis |
|
||||
| Bootstrap | `KEEP-LOCAL` | framework CSS local Knowledge, jamais règle PGR universelle |
|
||||
| Racine frontend | `KEEP-LOCAL` | package partagé `Web/knowledge-template-lab/` |
|
||||
| Templates statiques Web | `KEEP-LOCAL` | harness de conception/validation ; rendu runtime Maud |
|
||||
| Intégration manifest Vite / Maud | `KEEP-LOCAL` | matérialisée dans `knowledge-web-lib` |
|
||||
| Driver/ORM PostgreSQL | `DEFER` | reprendre à la première implémentation persistante réelle |
|
||||
| Migrations PostgreSQL | `DEFER` | reprendre avec le premier schéma réel |
|
||||
| Moteur de recherche | `DEFER` | commencer par capacités PostgreSQL/index applicatif lorsque ce scope sera engagé |
|
||||
| Fournisseur d'auth externe | `DEFER` | reprendre lorsque le workflow utilisateur l'exige |
|
||||
| Surface admin par application | `KEEP-LOCAL` | chaque serveur protège ses opérations privilégiées ; URL exacte différée |
|
||||
| Quatrième application d'administration | `DEFER` | agréger seulement si une responsabilité transverse apparaît |
|
||||
| Modèle rôles/capabilities | `DEFER` | reprendre avec les cas d'usage d'autorisation réels |
|
||||
| Formats finaux HOWTO/snippet | `DEFER` | définir avec corpus réel |
|
||||
| Autres noms de crates | `DEFER` | créer uniquement lorsque l'ownership est démontré |
|
||||
| Décision | Classification | Contrat retenu / condition de reprise |
|
||||
|----------------------------------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------|
|
||||
| Dépôt applicatif | `KEEP-LOCAL` | `sasedev-knowledge` ; workspace unique de la plateforme |
|
||||
| Nom court / préfixe crates | `KEEP-LOCAL` | `knowledge` / `knowledge-` |
|
||||
| Dépôt normatif | `KEEP-LOCAL` | dépôt existant `pgr`, jamais fusionné dans le dépôt applicatif |
|
||||
| Dépôt HOWTO | `KEEP-LOCAL` | dépôt séparé `howtos` |
|
||||
| Dépôt snippets | `KEEP-LOCAL` | dépôt séparé `snippets` |
|
||||
| Nombre de sources Git | `KEEP-LOCAL` | au moins trois sources initiales, sans limite codée à trois |
|
||||
| Git comme backend du contenu | `KEEP-LOCAL` | invariant d'architecture Knowledge |
|
||||
| Implémentation Git de `0.0.2` | `KEEP-LOCAL` | processus `git` contrôlé derrière `knowledge-git-api` ; décision réévaluable derrière le contrat |
|
||||
| Configuration physique Git | `KEEP-LOCAL` | `knowledge-git-lib` matérialisée en `0.0.2-alpha.2` ; source locale/remote + racine d'état ; pas dans le domaine |
|
||||
| Copies Git générées | `KEEP-LOCAL` | racine d'état explicite hors dépôt source, mirrors et snapshots adressés par clé sûre/révision |
|
||||
| Partage du cache Git entre processus | `DEFER` | état root exclusif à une instance backend en `0.0.2` ; reprendre avec verrouillage inter-processus réel |
|
||||
| Forge | `KEEP-LOCAL` | capacité optionnelle derrière adapter ; aucune API de forge dans le domaine |
|
||||
| Gitea | `DEFER` | premier adapter candidat ; reprendre lorsque des capacités forge-only sont implémentées |
|
||||
| Synchronisation sans webhook | `KEEP-LOCAL` | explicite/périodique convergent vers le même cas d'usage ; hooks/webhooks restent accélérateurs |
|
||||
| Scheduler périodique concret | `DEFER` | créer seulement lorsque son owner runtime/lifecycle est démontré |
|
||||
| Dernière révision observée en `0.0.2` | `KEEP-LOCAL` | fournie par l'appelant et retournée par le cas d'usage ; pas de pseudo-persistance locale |
|
||||
| PostgreSQL | `KEEP-LOCAL` | une base logique partagée future pour état transversal/projections ; jamais vérité du contenu Git publié |
|
||||
| Rust stable / édition 2024 | `ADOPT` | profil Rust/Cargo PGR |
|
||||
| Workspace Cargo | `ADOPT` | skeleton Rust/Cargo déjà matérialisé |
|
||||
| `Cargo.lock` | `KEEP-LOCAL` | généré localement et ignoré ; manifests Cargo versionnés |
|
||||
| Actix Web | `KEEP-LOCAL` | trois launchers existants et composition partagée dans `knowledge-web-lib` |
|
||||
| Maud | `KEEP-LOCAL` | rendu SSR commun dans `knowledge-web-lib` |
|
||||
| TypeScript | `ADOPT` | owner `530` |
|
||||
| Package manager frontend | `KEEP-LOCAL` | npm ; `package-lock.json` versionné |
|
||||
| Vite | `KEEP-LOCAL` + owner `550` adopté | build/preview de références et manifest consommé par Maud |
|
||||
| Sass | `KEEP-LOCAL` + owner `560` adopté | styles source et assets réellement servis |
|
||||
| Bootstrap | `KEEP-LOCAL` | framework CSS local Knowledge, jamais règle PGR universelle |
|
||||
| Racine frontend | `KEEP-LOCAL` | package partagé `Web/knowledge-template-lab/` |
|
||||
| Templates statiques Web | `KEEP-LOCAL` | harness de conception/validation ; rendu runtime Maud |
|
||||
| Intégration manifest Vite / Maud | `KEEP-LOCAL` | matérialisée dans `knowledge-web-lib` |
|
||||
| Driver/ORM PostgreSQL | `DEFER` | reprendre à la première implémentation persistante réelle |
|
||||
| Migrations PostgreSQL | `DEFER` | reprendre avec le premier schéma réel |
|
||||
| Moteur de recherche | `DEFER` | commencer par capacités PostgreSQL/index applicatif lorsque ce scope sera engagé |
|
||||
| Fournisseur d'auth externe | `DEFER` | reprendre lorsque le workflow utilisateur l'exige |
|
||||
| Surface admin par application | `KEEP-LOCAL` | chaque serveur protège ses opérations privilégiées ; URL exacte différée |
|
||||
| Quatrième application d'administration | `DEFER` | agréger seulement si une responsabilité transverse apparaît |
|
||||
| Modèle rôles/capabilities | `DEFER` | reprendre avec les cas d'usage d'autorisation réels |
|
||||
| Formats finaux HOWTO/snippet | `DEFER` | définir avec corpus réel |
|
||||
| Autres noms de crates | `DEFER` | créer uniquement lorsque l'ownership est démontré |
|
||||
|
||||
## Nomenclature de crates
|
||||
|
||||
Les packages matérialisés dans la stable `0.0.1` sont :
|
||||
Les packages matérialisés sont :
|
||||
|
||||
```text
|
||||
knowledge-domain-lib types métier stables de famille/source
|
||||
knowledge-git-api contrat passif GitRepository provider-neutral
|
||||
knowledge-git-lib implémentation Git générique + configuration physique + état local contrôlé
|
||||
knowledge-sync-api contrat passif RepositoryEventSource
|
||||
knowledge-web-lib composition Actix/Maud/Vite partagée
|
||||
knowledge-pgr-server launcher PGR mince
|
||||
@@ -134,12 +135,7 @@ knowledge-howtos-server launcher HOWTOs mince
|
||||
knowledge-snippets-server launcher snippets mince
|
||||
```
|
||||
|
||||
`0.0.2-alpha.1` ferme deux décisions d'ownership sans créer de placeholder :
|
||||
|
||||
```text
|
||||
knowledge-git-lib implémentation Git générique + configuration physique + état local contrôlé
|
||||
knowledge-app-lib owner candidat du cas d'usage de synchronisation partagé, à matérialiser seulement quand l'orchestration réelle le démontre
|
||||
```
|
||||
`knowledge-git-lib` devient réelle en `0.0.2-alpha.2`. `knowledge-app-lib` reste seulement l'owner candidat du cas d'usage de synchronisation partagé et ne sera matérialisée que si l'orchestration réelle démontre cette responsabilité.
|
||||
|
||||
Les responsabilités suivantes restent candidates et non matérialisées :
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md -->
|
||||
<!-- version: 10 -->
|
||||
<!-- version: 11 -->
|
||||
|
||||
# Architecture de fondation Knowledge
|
||||
|
||||
@@ -105,7 +105,7 @@ Le domaine ne suppose pas qu'une famille possède exactement un repository. Il m
|
||||
|
||||
## 3. Git générique
|
||||
|
||||
Le contrat `GitRepository` reste provider-neutral. `0.0.2-alpha.1` sélectionne comme première implémentation un **processus `git` contrôlé** dans la future crate :
|
||||
Le contrat `GitRepository` reste provider-neutral. `0.0.2-alpha.1` sélectionne comme première implémentation un **processus `git` contrôlé** et `0.0.2-alpha.2` matérialise son premier owner runtime :
|
||||
|
||||
```text
|
||||
knowledge-git-lib
|
||||
@@ -117,7 +117,7 @@ Cette sélection est une décision locale Knowledge, pas un couplage du contrat
|
||||
|
||||
`knowledge-domain-lib` continue de posséder `SourceId` et `ContentSource`. Les URLs, chemins locaux, exécutable Git et répertoires de travail ne remontent pas dans le domaine.
|
||||
|
||||
`knowledge-git-lib` possédera la configuration physique :
|
||||
`knowledge-git-lib` possède la configuration physique :
|
||||
|
||||
```text
|
||||
source_id -> local path ou remote Git générique
|
||||
@@ -143,13 +143,13 @@ Les données générées résident hors du dépôt applicatif et hors des dépô
|
||||
|
||||
Le backend reçoit explicitement `<git-state-root>` ; il n'utilise aucun défaut implicite sous le workspace. Une variable de déploiement telle que `KNOWLEDGE_GIT_STATE_ROOT` pourra alimenter la composition, mais la librairie reçoit un chemin et ne lit pas elle-même l'environnement.
|
||||
|
||||
`source-key` est une clé sûre dérivée par l'implémentation. Un `SourceId` ou une URL remote ne sont jamais interpolés directement comme chemin de filesystem.
|
||||
`source-key` est une clé sûre dérivée par l'implémentation. En `alpha.2`, elle encode de manière déterministe les octets UTF-8 du `SourceId` sous une forme hexadécimale préfixée ; un `SourceId` ou une URL remote ne sont jamais interpolés directement comme chemin de filesystem.
|
||||
|
||||
Pendant `0.0.2`, une racine d'état appartient exclusivement à une instance backend/processus. Le partage simultané d'une même racine entre plusieurs processus reste `DEFER` jusqu'à matérialisation d'un verrouillage inter-processus.
|
||||
|
||||
### Mirror et refresh
|
||||
|
||||
Une source locale ou remote converge vers un mirror Git contrôlé.
|
||||
Une source locale ou remote converge vers un mirror Git contrôlé. `alpha.2` implémente l'initialisation et l'inspection bare minimale ; refresh, résolution et snapshot restent dans les tranches suivantes.
|
||||
|
||||
L'initialisation utilise conceptuellement :
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/002-V0_0_2_GIT_SYNC_PLAN.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Plan 0.0.2 — Git générique et synchronisation de lecture
|
||||
|
||||
@@ -28,7 +28,7 @@ PGR publish report pgr-0.1.3-publish.001-report.md = PASS
|
||||
|
||||
Le passage de PGR `v0.1.1` à `v0.1.3` est traité comme adoption d'un projet existant via `230-ADOPTION`. Les artefacts historiques de `0.0.1` ne sont pas réécrits.
|
||||
|
||||
`0.0.2-alpha.1` est `FAIL` pour défaut de structure du présent plan malgré des contrôles techniques propres. `alpha.1.fix.1` corrige uniquement ce cadrage documentaire avant toute implémentation Git.
|
||||
`0.0.2-alpha.1` est `FAIL` pour défaut de structure du présent plan malgré des contrôles techniques propres. `alpha.1.fix.1` a corrigé uniquement ce cadrage documentaire et sa gate opérateur est `PASS`. `alpha.2` peut donc matérialiser le premier backend Git réel.
|
||||
|
||||
## Mission
|
||||
|
||||
@@ -65,10 +65,6 @@ Décisions déjà matérialisées par le cadrage `alpha.1` et non remises en cau
|
||||
|
||||
Questions laissées ouvertes jusqu'à la tranche qui les consomme :
|
||||
|
||||
- forme exacte des types de configuration publics de `knowledge-git-lib` ;
|
||||
- frontière exacte entre runner de processus interne et API publique ;
|
||||
- modèle d'erreur précis du backend Git, notamment redaction des arguments sensibles ;
|
||||
- politique de collision/normalisation de `source-key` et validation des chemins ;
|
||||
- politique de nettoyage/rétention des snapshots ;
|
||||
- besoin réel de supporter submodules ou Git LFS dans cette release ;
|
||||
- besoin réel d'une crate `knowledge-app-lib` pour l'orchestration partagée ;
|
||||
@@ -139,11 +135,15 @@ Le résultat opérateur initial est **FAIL** : les contrôles techniques transmi
|
||||
|
||||
`alpha.1.fix.1` corrige uniquement cette structure documentaire, ajoute la gate de non-régression correspondante et ne modifie aucune décision technique de l'étude Git. Aucun fichier sous `crates/` ou `Web/` n'est modifié dans `alpha.1` ou son fix.
|
||||
|
||||
La trajectoire normale ne reprend vers `alpha.2` qu'après `PASS` opérateur du fix.
|
||||
La gate opérateur de `alpha.1.fix.1` est **PASS**.
|
||||
|
||||
### alpha.2 — contrats minimaux et backend process
|
||||
|
||||
Matérialiser le premier backend réel sans encore prétendre couvrir tout le cycle de synchronisation :
|
||||
Statut opérateur : **à valider**.
|
||||
|
||||
Le delta matérialise le premier backend réel sans encore prétendre couvrir tout le cycle de synchronisation. Les choix concrets de la tranche sont : configuration publique `GitBackendConfig`/`GitSourceConfig`, runner process strictement interne, erreurs publiques redacted par construction et `source-key` hexadécimale déterministe dérivée du `SourceId`.
|
||||
|
||||
Le scope reste :
|
||||
|
||||
- créer `knowledge-git-lib` avec responsabilité réelle ;
|
||||
- introduire uniquement les types/configurations nécessaires aux sources et à la racine d'état ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/001-VALIDATION_MATRIX.md -->
|
||||
<!-- version: 19 -->
|
||||
<!-- version: 20 -->
|
||||
|
||||
# Matrice de validation Knowledge
|
||||
|
||||
@@ -543,3 +543,32 @@ Le fix reste documentaire et ne change aucune décision technique Git. Il doit p
|
||||
- `git diff --cached --check` propre avant commit.
|
||||
|
||||
Le `PASS` du fix ferme `alpha.1` et autorise uniquement la préparation de `0.0.2-alpha.2`.
|
||||
|
||||
## Gate de `0.0.2-alpha.2`
|
||||
|
||||
La première tranche fonctionnelle Git doit prouver :
|
||||
|
||||
- `VERSION = 0.0.2-alpha.2` et `[workspace.package].version` identique ;
|
||||
- history `alpha.1.fix.1` `PASS` committé avant application ;
|
||||
- huit packages Cargo exactement, avec `knowledge-git-lib` comme nouvelle crate `-lib` réelle ;
|
||||
- `knowledge-git-api` et `knowledge-sync-api` toujours passives et inchangées ;
|
||||
- `knowledge-git-lib` dépendant uniquement des contrats/domaines réellement nécessaires, sans Actix, forge, PostgreSQL, scheduler ou runtime async ;
|
||||
- racine d'état obligatoire et explicite, avec sous-répertoires `hooks-disabled/`, `repositories/` et `snapshots/` ;
|
||||
- dérivation de `source-key` ne réutilisant ni `SourceId` brut ni URL remote comme chemin ;
|
||||
- source locale utilisant `git clone --mirror --no-local -- ...` ;
|
||||
- source remote utilisant `git clone --mirror -- ...` sans `--no-local` ;
|
||||
- runner process interne utilisant `std::process::Command` directement, sans shell ;
|
||||
- prompts Git interactifs désactivés et variables Git capables de rediriger implicitement repository/worktree retirées ;
|
||||
- hooks Git désactivés via un répertoire contrôlé ;
|
||||
- erreurs de processus publiques ne contenant ni URL source, ni arguments, ni stderr, ni credentials ;
|
||||
- inspection d'un mirror existant sans suppression/recréation silencieuse ;
|
||||
- tests unitaires ciblant configuration, layout, arguments, redaction et erreurs ;
|
||||
- aucun refresh, résolution de révision ou snapshot fonctionnel anticipé avant `alpha.3` ;
|
||||
- aucun adapter Gitea/GitHub/GitLab, PostgreSQL, scheduler ou `knowledge-app-lib` ajouté ;
|
||||
- `cargo fmt --all -- --check`, audits Rust, `cargo metadata`, `cargo check`, Clippy strict et tests ciblés/workspace propres ;
|
||||
- baseline Web inchangée et absence de diff sous `Web/` ;
|
||||
- `Cargo.lock` toujours ignoré/non suivi ;
|
||||
- `git diff --cached --check` propre avant commit.
|
||||
|
||||
Le `PASS` d'`alpha.2` autorise uniquement la préparation de `0.0.2-alpha.3`, consacrée au refresh réel, à la résolution et au snapshot sur repositories Git temporaires.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user