Skip to content

Commit 65c4e46

Browse files
committed
docs(planning): add team split and milestone ownership details for parallel development
1 parent 47d74a5 commit 65c4e46

1 file changed

Lines changed: 119 additions & 0 deletions

File tree

docs/planning/ROADMAP.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,125 @@ sequenceDiagram
245245

246246
---
247247

248+
## Team split — qui fait quoi en parallèle
249+
250+
Équipe de 2 : **Backend (zestones)** + **Frontend (vgtray)**. Le contrat WS
251+
(`EventBusMap` / `ChatMap` dans [`ALIGNMENT.md`](./ALIGNMENT.md)) est figé dès
252+
M1 → les deux peuvent coder en parallèle sans se bloquer mutuellement.
253+
254+
### Ownership par milestone
255+
256+
```mermaid
257+
gantt
258+
title Parallèle Backend (zestones) / Frontend (vgtray)
259+
dateFormat YYYY-MM-DD
260+
axisFormat %a %d
261+
excludes weekends
262+
263+
section zestones (backend)
264+
M1 Data Layer :done, 2026-04-22, 1d
265+
M2 MCP Server : 2026-04-23, 1d
266+
M3 KB Builder : 2026-04-23, 1d
267+
M4 Sentinel + Investig. :crit, 2026-04-24, 1d
268+
M5 WO Gen + Q&A :crit, 2026-04-25, 1d
269+
270+
section vgtray (frontend)
271+
M6 Foundation : 2026-04-23, 1d
272+
M7 Control Room : 2026-04-24, 1d
273+
M8 Agentic Workspace :crit, 2026-04-25, 1d
274+
275+
section Ensemble (sync)
276+
M9 Polish + E2E rehearse :crit, 2026-04-26, 12h
277+
M10 Vidéo + submission :milestone, 2026-04-26, 0d
278+
```
279+
280+
### Répartition concrète
281+
282+
| Lane | Owner | Issues | Démarre quand |
283+
|--------------------------------------------------------|----------|---------------|----------------------------------------------|
284+
| Migrations + Pydantic | zestones | M1 (#2-#7) | maintenant (Wed AM) |
285+
| FastMCP + 14 tools + MCPClient | zestones | M2 (#8-#16) | dès M1 mergé (Wed PM) |
286+
| KB Builder agent + onboarding | zestones | M3 (#17-#22) | en parallèle de M2 (peut commencer dès M1.4) |
287+
| Sentinel + Investigator + WSManager | zestones | M4 (#23-#29) | dès M2 mergé (Thu) |
288+
| WO Gen + Q&A WS + Managed Agents | zestones | M5 (#30-#33) | dès M4 mergé (Fri PM/Sat) |
289+
| Vite shell + design tokens + WS client typé | vgtray | M6 (#34-#39) | **maintenant** (pas de dep backend) |
290+
| P&ID + KPI bar + anomaly banner + ChatPanel + registry | vgtray | M7 (#40-#44) | dès M6.4 prêt (Thu PM) |
291+
| Tous les artifacts + Inspector + onboarding wizard | vgtray | M8 (#45-#50) | dès M7.5 prêt (Fri PM) |
292+
| WO console + motion + démo rehearse | les deux | M9 (#51-#54) | Sun matin |
293+
| README + DEMO.md + vidéo + submission | les deux | M10 (#55-#57) | Sun aprem |
294+
295+
### Comment travailler en parallèle sans se bloquer
296+
297+
> [!IMPORTANT]
298+
> **Le contrat WS est la seule interface partagée.** Tant que les types
299+
> `EventBusMap` et `ChatMap` ([`ALIGNMENT.md`](./ALIGNMENT.md) §3) ne bougent pas,
300+
> chacun avance sans toucher au code de l'autre.
301+
302+
```mermaid
303+
flowchart LR
304+
subgraph contract["Contrat figé Day 1"]
305+
WS["EventBusMap + ChatMap\n(ALIGNMENT.md)"]
306+
REST["OpenAPI auto-gen FastAPI"]
307+
end
308+
subgraph zestones["Backend (zestones)"]
309+
BE["FastAPI + agents + MCP"]
310+
end
311+
subgraph vgtray["Frontend (vgtray)"]
312+
Mock["WS mock (M6.5)\nfixtures JSON par event type"]
313+
FE["React UI"]
314+
end
315+
BE -- "émet" --> WS
316+
Mock -- "émet (avant que BE soit prêt)" --> WS
317+
WS --> FE
318+
BE -- "schemas Pydantic" --> REST
319+
REST -- "openapi-typescript" --> FE
320+
```
321+
322+
**Mécaniques de parallélisation :**
323+
324+
1. **Mock-first frontend.** vgtray code M6/M7/M8 contre le mock WS de M6.5 (un
325+
`ws.mock.ts` qui rejoue des fixtures JSON). Ne dépend pas que zestones ait
326+
fini M4. Branchement réel = remplacer `createMockWs` par `createWsClient` en
327+
1 ligne.
328+
2. **OpenAPI auto-generated types.** zestones lance FastAPI dès M1 → vgtray
329+
lance `npx openapi-typescript http://localhost:8000/openapi.json -o src/lib/api.types.ts`
330+
pour avoir les types REST sans attendre.
331+
3. **Une fixture par event type.** Pour chaque entry de `EventBusMap` (10) et
332+
`ChatMap` (7), créer `frontend/src/lib/ws.fixtures.ts` avec un exemple de
333+
payload. C'est la spec exécutable du contrat.
334+
4. **Branche par milestone.** `feat/m4-investigator` (zestones), `feat/m6-shell`
335+
(vgtray). PR dès qu'un milestone est démontrable, merge sur `main` derrière
336+
un tag `vX.Y`.
337+
338+
### Points de synchronisation obligatoires
339+
340+
| Quand | Quoi | Durée |
341+
|---------------|-------------------------------------------------------------------|--------|
342+
| **Wed soir** | M1 mergé + M6 démarré + WS contract review ensemble | 15 min |
343+
| **Thu soir** | M2 + M6 mergés, vgtray peut tester contre vrai backend (mock OFF) | 15 min |
344+
| **Fri soir** | M4 mergé → vgtray rebranche M7.4 sur vrai `WS /api/v1/agent/chat` | 30 min |
345+
| **Sat soir** | E2E P-02 testé bout en bout (Scene 1 à 5) | 1h |
346+
| **Sun matin** | Démo rehearsal en duo, M9.4 | 1h |
347+
| **Sun 18h** | Lock code, vidéo + soumission | 2h |
348+
349+
> [!TIP]
350+
> **Daily 5 min stand-up async sur Discord** : ce que j'ai mergé, ce que je
351+
> bloque, ce dont j'ai besoin. Pas plus.
352+
353+
### Règles de no-conflit
354+
355+
- zestones ne touche **jamais** à `frontend/`. vgtray ne touche **jamais** à
356+
`backend/`. La doc partagée (`docs/`) → toujours en PR séparée.
357+
- Tout changement au contrat WS (ajout d'event, rename de field) =
358+
ping immédiat sur Discord + update `ALIGNMENT.md` dans la même PR.
359+
- Les types TypeScript de `EventBusMap`/`ChatMap` vivent côté frontend
360+
([`frontend/src/lib/ws.types.ts`](../../frontend/src/lib/ws.types.ts)). Côté
361+
backend, ils existent en commentaire dans `WSManager.broadcast()`. Si
362+
divergence → frontend gagne (c'est lui qui les voit en runtime).
363+
- **Pas de force-push sur `main`.** Seulement sur les branches `feat/*`.
364+
365+
---
366+
248367
## Prize alignment
249368

250369
> [!NOTE]

0 commit comments

Comments
 (0)