Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
55 lines
2.9 KiB
Markdown
55 lines
2.9 KiB
Markdown
# L0 — Socle domaine & ports
|
|
|
|
**Binôme :** `dev-core-domain` / `test-core-domain`
|
|
**Crate :** `crates/domain` (pur, zéro I/O)
|
|
**Dépendances amont :** aucune (fondation du projet).
|
|
**Statut :** en cours.
|
|
|
|
## Objectif
|
|
|
|
Poser le **cœur hexagonal** : toutes les entités, value objects, invariants, **ports (traits)**, domain events et la **logique de layout pure**. Aucun adapter, aucune I/O.
|
|
|
|
## Périmètre (DEV)
|
|
|
|
### Entities & Value Objects (cf. ARCHITECTURE §3)
|
|
- IDs typés (`ProjectId`, `AgentId`, `TemplateId`, `ProfileId`, `SessionId`, `WindowId`, `TabId`, `NodeId`).
|
|
- `Project`, `ProjectPath`, `Agent`, `AgentOrigin`, `AgentTemplate`, `TemplateVersion`, `AgentProfile`, `ContextInjection`.
|
|
- `TerminalSession`, `SessionKind`, `PtySize`, `RemoteRef`/`SshAuth`, `GitRepository`, `AgentManifest`/`ManifestEntry`, `Workspace`/`Window`/`Tab`.
|
|
- `MarkdownDoc` (VO contenu .md).
|
|
- Tous les **invariants** documentés en §3 doivent être appliqués (constructeurs validants / `try_new`).
|
|
|
|
### Logique de layout pure (cf. ARCHITECTURE §7)
|
|
- `LayoutNode` (`Leaf`/`Split`/`Grid`), `SplitContainer`, `WeightedChild`, `GridContainer`, `GridCell`.
|
|
- Opérations **pures** : `split`, `merge`, `resize`, `move` → `LayoutTree -> Result<LayoutTree, LayoutError>`.
|
|
- Validation des invariants (poids > 0, pas de chevauchement de spans, surface couverte, 1 session par leaf max).
|
|
|
|
### Ports (traits) — définitions seulement, pas d'impl
|
|
`AgentRuntime`, `PtyPort`, `RemoteHost`, `ProcessSpawner`, `FileSystem`, `TemplateStore`, `ProjectStore`, `AgentContextStore`, `GitRepository`, `EventBus`, `Clock`, `IdGenerator` (signatures conceptuelles en ARCHITECTURE §4).
|
|
|
|
### Domain events & erreurs
|
|
- `DomainEvent` (enum complet de §3.2).
|
|
- Types d'erreur par domaine (`LayoutError`, et erreurs de port définies ici si partagées).
|
|
|
|
### serde
|
|
- Autorisé **uniquement** pour les types persistés (manifeste, layout, profils) — dérive `Serialize`/`Deserialize`. Aucune autre dépendance I/O.
|
|
|
|
## Périmètre (TEST)
|
|
|
|
- Invariants d'entités : rejets attendus (chemin relatif, `synchronized` sans template, port SSH hors plage, etc.).
|
|
- **Layout** (cœur du lot) : `split`/`merge`/`resize`/`move` — cas nominaux + cas d'erreur (chevauchement, poids ≤ 0, span hors grille, session dupliquée).
|
|
- Déterminisme via `FixedClock`/`SeqIdGenerator`.
|
|
- `ContextInjection` : validation des 4 variantes (target relatif, var env valide, flag non vide).
|
|
- Sérialisation round-trip JSON des types persistés.
|
|
|
|
## Definition of Done
|
|
|
|
- `cargo test -p domain` vert.
|
|
- `crates/domain/Cargo.toml` ne dépend d'aucun crate I/O (vérifié).
|
|
- Tous les ports compilent et sont documentés.
|
|
- Logique de layout couverte (cas limites inclus).
|
|
|
|
## Notes / points d'attention
|
|
|
|
- Choisir `async_trait` vs `-> impl Future` pour les ports I/O (à figer ici, impacte tous les lots).
|
|
- Garder les traits **fins** (Interface Segregation) : ne pas fusionner FS/PTY/Process.
|