Files
IdeA/agents-dev/L0-core-domain.md
Blomios 307ae71857 feat: add main features
Agents for developpement added + frontend add + backend added. Git viewer created + agent and template creator + layout and project creator
2026-06-06 01:27:01 +02:00

2.9 KiB

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, moveLayoutTree -> 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.