113 lines
11 KiB
Markdown
113 lines
11 KiB
Markdown
<!-- file: docs/architecture/001-PROJECT_PROFILE.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Profil du projet Knowledge
|
|
|
|
## Baseline autoritaire
|
|
|
|
Le cadrage initial repose sur :
|
|
|
|
```text
|
|
PGR stable tag v0.1.1
|
|
PGR archive SHA-256 caaf8f456f7f8520172ea7705fd0cf5c5bf0e942dc4a773410bcbe7fe4ce243a
|
|
PGR publish report pgr-0.1.1-publish.001-report.md = PASS
|
|
Knowledge prompt prompts/001-V0_0_1_START_PROMPT.md
|
|
```
|
|
|
|
L'archive PGR observée possède `VERSION = 0.1.1`, `292` entrées ZIP, `256` fichiers, `36` répertoires, une racine unique `pgr/`, aucun symlink et aucun `.git`. Les `48` tests Python et les audits Markdown headers/tables/links de la stable ont été rejoués avant préparation de cette tranche et sont propres.
|
|
|
|
Cette constatation de prévalidation ne remplace aucune gate opérateur Knowledge.
|
|
|
|
## Nature de l'instanciation
|
|
|
|
Knowledge est un nouveau projet. La procédure normative d'adoption d'un dépôt existant `230-ADOPTION.md` n'est donc pas activée comme owner de migration.
|
|
|
|
Le prompt de démarrage exige néanmoins une matrice `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER`. Les mêmes libellés sont utilisés ci-dessous pour rendre explicite la relation entre PGR et les décisions fondatrices Knowledge :
|
|
|
|
- `ADOPT` — contrat PGR applicable retenu ;
|
|
- `KEEP-LOCAL` — choix propre à Knowledge, non possédé par un owner PGR plus spécifique et compatible avec les contrats adoptés ;
|
|
- `OVERRIDE` — règle PGR applicable remplacée localement ;
|
|
- `DEFER` — choix volontairement reporté avec condition de reprise.
|
|
|
|
## Owners et skeletons applicables
|
|
|
|
| Élément | Décision | Matérialisation | Motif |
|
|
|----------------------------------------------|---------------------------------|-----------------|----------------------------------------------|
|
|
| `200-GOVERNANCE` | `ADOPT` | `alpha.1` | lifecycle/version locale |
|
|
| `210-WORKFLOW` | `ADOPT` | `alpha.1` | plan/delta/history/handoff |
|
|
| `220-SKELETONS` | `ADOPT` pour l'instanciation | `alpha.1` | composition explicite sans copie mécanique |
|
|
| `300-DOCUMENTATION` | `ADOPT` | `alpha.1` | rôles documentaires et taxonomie utile |
|
|
| `400-VALIDATION` | `ADOPT` | `alpha.1` | preuves proportionnées et autorité opérateur |
|
|
| `500-LANGUAGES` + `510-RUST_CARGO` | `ADOPT` | `alpha.2` | backend Rust/workspace Cargo contrôlé |
|
|
| `530-TYPESCRIPT` | `ADOPT` | tranche Web | frontend durable TypeScript |
|
|
| `540-JAVASCRIPT_PACKAGE_ECOSYSTEM` | `ADOPT` | tranche Web | package manager/lockfile/scripts explicites |
|
|
| `550-VITE` | `ADOPT` puisque Vite est retenu | tranche Web | dev server/build/cache/outputs |
|
|
| `560-CSS_SASS` | `ADOPT` | tranche Web | CSS/Sass et outputs |
|
|
| `700-FRAMEWORKS` | `ADOPT` | avec Actix/Maud | cadre générique des frameworks |
|
|
| `710-TAURI` | `DEFER` / non applicable | hors `0.0.1` | aucun host desktop/mobile Tauri |
|
|
| skeleton `001-PROJECT_GOVERNANCE_FOUNDATION` | `ADOPT` | `alpha.1` | fondation locale PGR |
|
|
| skeleton `002-RUST_CARGO_WORKSPACE` | `ADOPT` | `alpha.2` | workspace Rust contrôlé |
|
|
| skeleton `003-WEB_FRONTEND` | `ADOPT` | tranche Web | frontend indépendant du host |
|
|
| validation `005-WEB_FRONTEND_VALIDATION` | `ADOPT` | tranche Web | restore/typecheck/build/smoke proportionnés |
|
|
|
|
Les profils Java/Maven/Gradle, Android et autres technologies absentes ne sont pas sélectionnés.
|
|
|
|
## Matrice des décisions importantes
|
|
|
|
| Décision | Classification | Contrat retenu / condition de reprise |
|
|
|--------------------------------------|-----------------------------------|-------------------------------------------------------------------------------------------------------|
|
|
| Dépôt applicatif | `KEEP-LOCAL` | `sasedev-knowledge` ; explicite le produit et évite un nom générique `knowledge` au niveau forge |
|
|
| 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` |
|
|
| Git comme backend du contenu | `KEEP-LOCAL` | invariant d'architecture Knowledge |
|
|
| 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/polling constituent le socle ; hooks/webhooks sont des accélérateurs |
|
|
| PostgreSQL | `KEEP-LOCAL` | état applicatif et projections ; jamais vérité du contenu Git publié |
|
|
| Rust stable / édition 2024 | `ADOPT` | profil Rust/Cargo PGR |
|
|
| Workspace Cargo | `ADOPT` | skeleton Rust/Cargo ; matérialisation `alpha.2` |
|
|
| `Cargo.lock` | `DEFER` | décider lors de la matérialisation selon le rôle application/workspace et `510` |
|
|
| Actix Web | `KEEP-LOCAL` | framework HTTP initial ; PGR ne possède pas de profil Actix dédié |
|
|
| Maud | `KEEP-LOCAL` | rendu SSR initial lorsque pertinent |
|
|
| TypeScript | `ADOPT` | conforme au owner `530` et à l'intention locale |
|
|
| Package manager frontend | `DEFER` | choisir dans la tranche Web avant création du manifest/lockfile |
|
|
| Vite | `KEEP-LOCAL` + owner `550` adopté | choix local cohérent avec la recommandation PGR ; configuration à décider dans la tranche Web |
|
|
| Sass | `KEEP-LOCAL` + owner `560` adopté | choix local ; compilation intégrée à la chaîne Web si elle apporte la valeur attendue |
|
|
| Bootstrap | `KEEP-LOCAL` | framework CSS local, jamais règle PGR/Tauri/Web universelle |
|
|
| Racine frontend | `DEFER` | décider dans la tranche Web ; `frontend/` reste candidat mais non figé par PGR |
|
|
| Driver/ORM PostgreSQL | `DEFER` | reprendre à la première implémentation persistante réelle |
|
|
| Migrations PostgreSQL | `DEFER` | reprendre avec le choix de driver/tooling et le premier schéma réel |
|
|
| Moteur de recherche | `DEFER` | commencer par capacités PostgreSQL/index applicatif ; réévaluer sur besoin mesuré |
|
|
| Fournisseur d'auth externe | `DEFER` | reprendre lorsque le workflow utilisateur l'exige |
|
|
| Topologie de déploiement | `DEFER` | monolithe modulaire par défaut ; séparer seulement sur contrainte observée |
|
|
| Formats finaux HOWTO/snippet | `DEFER` | définir avec corpus réel ; ne pas figer un schéma sans contenu représentatif |
|
|
| Noms définitifs de toutes les crates | `DEFER` | seules les responsabilités et le préfixe sont cadrés ; créer une crate uniquement avec ownership réel |
|
|
|
|
Aucun `OVERRIDE` n'est requis à ce stade.
|
|
|
|
## Nomenclature de crates candidate
|
|
|
|
Le projet n'instancie pas toutes les crates suivantes en `alpha.1`. Elles décrivent des boundaries candidats et ne deviennent des packages que lorsque leur responsabilité est matérialisée :
|
|
|
|
```text
|
|
knowledge-domain-lib contrats et types métier stables
|
|
knowledge-app-lib orchestration des use cases, si une séparation dédiée devient utile
|
|
knowledge-git-lib implémentation Git générique
|
|
knowledge-store-postgres-lib état applicatif PostgreSQL
|
|
knowledge-forge-gitea-lib adapter Gitea optionnel
|
|
knowledge-server composition HTTP/SSR et point d'entrée exécutable
|
|
```
|
|
|
|
Règles de création :
|
|
|
|
- ne pas créer une crate uniquement pour refléter un diagramme ;
|
|
- ne pas utiliser `-api` sans frontière de contrat indépendante réellement nécessaire ;
|
|
- garder le domaine indépendant d'Actix, Gitea et PostgreSQL ;
|
|
- garder les adapters dépendants des contrats, jamais l'inverse.
|
|
|
|
## Décisions à rouvrir
|
|
|
|
Les `DEFER` sont réexaminés dans la tranche qui consomme réellement la décision. Un changement de scope produit, l'ajout d'un host natif ou une contrainte externe peut déclencher un REPLAN ; il ne justifie pas un choix anticipé dans `alpha.1`.
|