142 lines
8.0 KiB
Markdown
142 lines
8.0 KiB
Markdown
---
|
|
issueRef: "#276"
|
|
version: 6
|
|
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
|
updatedAt: 1788814093598
|
|
---
|
|
## Décision Git — 2026-09-07
|
|
|
|
- Arbitrage acté : `isOrchestrator` conservé comme rôle single-writer du contexte global, distinct des permissions MCP ; à exposer/configurer par agent (contrats + implémentation + surface UX + tests).
|
|
- Branche locale de travail : `feature/276-orchestrator-context-writer`, créée depuis `develop` @ ad2c6b4 (pointe intégrée, QA #269/#273 verte). Aucune branche parallèle backend/frontend nécessaire — périmètre modéré, branche unique.
|
|
- Changements préexistants transportés sur la branche (non commités) : bookkeeping du store `.ideai/` (permissions, tickets, memory) — Git les traitera dans un chore séparé au moment du commit.
|
|
- Point d'attention signalé à Main : `.ideai/CONTEXT.md` (contexte global) est non suivi et non gitignoré — décider en cours de cycle s'il doit être versionné ou exclu.
|
|
- Consigne devs : travailler directement sur `feature/276-orchestrator-context-writer`, ne pas créer de branche, ne pas commiter (Git s'en charge), aucune action distante.
|
|
|
|
## Handoff DevBackend — 2026-09-07
|
|
|
|
Implémentation backend présente dans le working tree :
|
|
|
|
- use case `UpdateProjectOrchestrator` : vérifie que l'agent appartient au projet, persiste sa désignation dans le manifeste, reste idempotent si le writer est déjà effectif, puis publie `DomainEvent::OrchestratorChanged` après succès de persistance ;
|
|
- câblage dans `BackendCore` et commande Tauri `update_project_orchestrator` enregistrée ;
|
|
- DTO wire camelCase : requête `{ projectId, agentId }`, réponse `{ orchestratorAgentId }` ;
|
|
- préservation de la désignation explicite lors des mutations d'agent, skills et templates ; suppression du writer explicite avec succession automatique vers le plus ancien agent restant ;
|
|
- message de refus de `idea_context_update` enrichi avec le writer courant et l'orientation vers `idea_context_propose` ; catalogue MCP clarifié : les permissions MCP ne confèrent pas le rôle de writer ;
|
|
- tests ciblés ajoutés pour désignation, agent inconnu, préservation lors d'une mutation, suppression/succession, message de refus et désérialisation DTO.
|
|
|
|
Fichiers volontairement modifiés :
|
|
|
|
- `crates/application/src/agent/lifecycle.rs`
|
|
- `crates/application/src/agent/mod.rs`
|
|
- `crates/application/src/lib.rs`
|
|
- `crates/application/src/orchestrator/context_guard.rs`
|
|
- `crates/application/src/skill/usecases.rs`
|
|
- `crates/application/src/template/usecases.rs`
|
|
- `crates/application/tests/agent_lifecycle.rs`
|
|
- `crates/backend/src/dto.rs`
|
|
- `crates/backend/src/lib.rs`
|
|
- `crates/app-tauri/src/commands.rs`
|
|
- `crates/app-tauri/src/lib.rs`
|
|
- `crates/app-tauri/tests/dto_agents.rs`
|
|
- `crates/domain/src/fileguard.rs`
|
|
- `crates/infrastructure/src/orchestrator/mcp/tools.rs`
|
|
|
|
Validation récupérable après timeout : `git diff --check` est vert. Aucun verdict Cargo complet n'est récupérable dans la session reprise ; ne pas considérer ce lot validé avant `cargo fmt --all --check`, les tests ciblés application/app-tauri/infrastructure, puis le check workspace par QA.
|
|
|
|
Contrat frontend : invoquer `update_project_orchestrator` avec `{ projectId: string, agentId: string }`; succès `{ orchestratorAgentId: string }`. Rafraîchir la liste des agents pour lire les indicateurs `isOrchestrator` effectifs (radio/single-writer).
|
|
|
|
## Handoff DevFrontend — 2026-09-07
|
|
|
|
Implémentation frontend livrée dans le working tree, sans commit ni action distante :
|
|
|
|
- `Agent.isOrchestrator` ajouté au DTO frontend et `AgentGateway.updateProjectOrchestrator(projectId, agentId)` ajouté au port ;
|
|
- adapters Tauri et HTTP branchés sur `update_project_orchestrator` avec le payload `{ request: { projectId, agentId } }` et la réponse `{ orchestratorAgentId }` ; mock gateway aligné sur l'exclusivité single-writer ;
|
|
- `useAgents.updateProjectOrchestrator` appelle le backend, rafraîchit ensuite `listAgents` et expose les erreurs via l'alerte existante ;
|
|
- dans la ligne sélectionnée de la fiche agent, section `Rôle dans le projet` avant les autres contrôles, radio `Writer du contexte projet global` et aide UX littérale ;
|
|
- badge sobre `Writer contexte` dans l'identité de l'agent effectif ;
|
|
- confirmation avant transfert lorsque la liste expose déjà un autre writer, avec noms de l'ancien et du nouveau writer ;
|
|
- aucun changement au panneau ni aux checkboxes de permissions MCP.
|
|
|
|
Fichiers frontend modifiés :
|
|
|
|
- `frontend/src/domain/index.ts`
|
|
- `frontend/src/ports/index.ts`
|
|
- `frontend/src/adapters/agent.ts`
|
|
- `frontend/src/adapters/http/streamGateways.ts`
|
|
- `frontend/src/adapters/mock/index.ts`
|
|
- `frontend/src/features/agents/useAgents.ts`
|
|
- `frontend/src/features/agents/AgentsPanel.tsx`
|
|
- `frontend/src/adapters/agent.test.ts`
|
|
- `frontend/src/adapters/http/agentGateway.test.ts`
|
|
- `frontend/src/features/agents/agents.test.tsx`
|
|
|
|
Validation exécutée :
|
|
|
|
- `cd frontend && npm test -- --run src/features/agents/agents.test.tsx src/adapters/agent.test.ts src/adapters/http/agentGateway.test.ts` — vert, 3 fichiers / 69 tests ; avertissement jsdom connu sur `HTMLCanvasElement.getContext`, sans échec.
|
|
- `cd frontend && npm run typecheck` — vert.
|
|
- `git diff --check` — vert.
|
|
|
|
Verdict DevFrontend : lot #276 implémenté et prêt pour validation QA. Aucun ajustement backend effectué.
|
|
|
|
## Verdict QA — 2026-09-07
|
|
|
|
Verdict QA officiel : VERT sur `feature/276-orchestrator-context-writer` @ `ad2c6b4`.
|
|
|
|
Inspection rapide : les diffs pertinents correspondent au périmètre annoncé : rôle `isOrchestrator` conservé comme writer single-writer distinct des permissions MCP, use case/commande/DTO/adapters ajoutés, garde `idea_context_update` clarifiée, UI agent avec section rôle/radio/badge/confirmation.
|
|
|
|
Commandes exécutées et résultats :
|
|
|
|
```bash
|
|
git -C /home/anthony/Documents/Projects/IdeA status --short --branch
|
|
# ## feature/276-orchestrator-context-writer
|
|
# worktree sale attendu : changements feature + bookkeeping .ideai/ non suivis/modifiés
|
|
|
|
git -C /home/anthony/Documents/Projects/IdeA rev-parse --short HEAD
|
|
# ad2c6b4
|
|
|
|
git -C /home/anthony/Documents/Projects/IdeA diff --check
|
|
# exit 0
|
|
|
|
cargo fmt --all --check
|
|
# exit 0
|
|
|
|
cargo test -p application --test agent_lifecycle orchestrator -- --nocapture
|
|
# 5 passed; 0 failed; 106 filtered out
|
|
|
|
cargo test -p application context_update -- --nocapture
|
|
# 1 passed; 0 failed; 165 filtered out
|
|
|
|
cargo test -p application --test skill_usecases -- --nocapture
|
|
# 9 passed; 0 failed
|
|
|
|
cargo test -p application --test template_usecases -- --nocapture
|
|
# 11 passed; 0 failed
|
|
|
|
cargo test -p app-tauri update_project_orchestrator -- --nocapture
|
|
# 1 passed; 0 failed; autres cibles filtrées
|
|
|
|
cargo test -p app-tauri --test dto_agents orchestrator -- --nocapture
|
|
# 1 passed; 0 failed; 29 filtered out
|
|
|
|
cargo test -p infrastructure tools -- --nocapture
|
|
# lib: 28 passed; 0 failed; mcp_server: 10 passed; 0 failed; autres cibles filtrées
|
|
|
|
cargo test -p infrastructure --test context_store orchestrator -- --nocapture
|
|
# 2 passed; 0 failed; 5 filtered out
|
|
|
|
cargo check -p backend -p app-tauri
|
|
# Finished dev profile successfully
|
|
|
|
cargo test -p backend --lib -- --nocapture
|
|
# 83 passed; 0 failed; 7 ignored
|
|
|
|
cd frontend && npm test -- --run src/features/agents/agents.test.tsx src/adapters/agent.test.ts src/adapters/http/agentGateway.test.ts
|
|
# Test Files 3 passed; Tests 69 passed
|
|
# Avertissement connu jsdom: HTMLCanvasElement.getContext non implémenté, sans échec
|
|
|
|
cd frontend && npm run typecheck
|
|
# tsc --noEmit OK
|
|
```
|
|
|
|
Commandes de ciblage non comptées comme validation : un essai `cargo test -p application --test orchestrator_context_guard ...` a échoué car cette cible n'existe pas ; un filtre `cargo test -p infrastructure --test mcp_server context_update ...` a sélectionné 0 test. Les validations utiles ci-dessus remplacent ces filtres.
|
|
|
|
Risques résiduels : pas de test manuel AppImage/runtime desktop exécuté ; validation limitée aux tests ciblés backend/frontend et au check de compilation. Les fichiers `.ideai/` et `scripts/` non suivis/modifiés restent à arbitrer par Git comme prévu dans le carnet. |