Iris
Développement multi-agents
- Tauri 2
- Rust
- React 19
Chaque écriture a son auteur.
Opus 5.5
Sonnet 5.5
GPT-6 Astra
GPT-6.1 Sol
Gemini 4 Argon
| Auteur | Session | Fichier | Lignes | Synchro |
|---|---|---|---|---|
| EDExporter les devis | src/devis/export.ts | +4 −1 | 312 ms | |
| FPFiabiliser le planning | server/api/planning.mts | +12 −3 | 427 ms | |
| EDExporter les devis | tests/devis/export.test.ts | +18 −0 | 268 ms | |
| DADocumenter l’API | docs/api.md | +31 −4 | 489 ms | |
| EDExporter les devis | shared/contracts/devis.mts | +6 −1 | 351 ms | |
| FPFiabiliser le planning | server/api/planning.mts | +3 −3 | 296 ms | |
| DADocumenter l’API | docs/api.md | +9 −2 | 530 ms | |
| EDExporter les devis | src/devis/export.ts | +1 −1 | 260 ms |
09:1009:1509:2009:2509:3009:3509:40
Réserver avant d’écrire.
Claude Code réserve 3 fichiers · 15 min
Codex vise src/devis/export.ts
Réservé par
Claude Code · Exporter les devis
Écriture reçue · réservation libérée
| Fichier | Détenteur | Échéance |
|---|---|---|
| src/devis/export.ts | 15 min | |
| tests/devis/export.test.ts | 15 min | |
| shared/contracts/devis.mts | 15 min |
Via un outil MCP partagé
Du poste à la VM, vérifié.
Poste
- srcSynchronisé260 ms
- sharedSynchronisé351 ms
- testsSynchronisé268 ms
- serverSynchronisé296 ms
- racineSynchronisé530 ms
VM
- Tests sur VM, ouverts en localhost
- Traitements déportés du poste
De 260 à 530 ms, captures du 09/10/2026.
Écrit0
En attente0
Synchronisé5
Chaque version, chaque mot.
30 versions · 7 jours
src/devis/export.ts
| Avant | Après | ||
|---|---|---|---|
| 1 | import { signWith } from './sign'; | 1 | import { signWith } from './sign'; |
| 2 | Secret masqué | 2 | Secret masqué |
| 3 | export function exportQuotes(quotes: Quote[]) { | 3 | export function exportQuotes(quotes: Quote[]) { |
| 4 | const header = 'numero;client;total_ht'; | 4 | const header = 'numero;client;total_ht'; |
| 5 | const valid = quotes.filter(isComplete); | 5 | const valid = quotes.filter(isComplete); |
| 6 | if (valid.length === 0) return header; | 6 | if (valid.length === 0) return header; |
| 7 | const rows = valid.map( | 7 | const rows = valid.map(signWith(EXPORT_KEY)); |
| 8 | return [header, ...rows].join('\n'); | 8 | return [header, ...rows].join('\n'); |
| 9 | } | 9 | } |
| 10 | function toRow(quote: Quote): string { | 10 | function toRow(quote: Quote): string { |
| 11 | const total = quote.lines.reduce(addLine, 0); | 11 | const total = quote.lines.reduce(addLine, 0); |
| 12 | return [quote.numero, quote.client, total].join(';'); | 12 | return [quote.numero, quote.client, total].join(';'); |
| 13 | } | 13 | } |
| 14 | function isComplete(quote: Quote): boolean { | 14 | function isComplete(quote: Quote): boolean { |
| 15 | return quote.client !== '' && quote.lines.length > 0; | 15 | return quote.client !== '' && quote.lines.length > 0; |
| 16 | } | 16 | } |
| 17 | function addLine(sum: number, line: QuoteLine): number { | 17 | function addLine(sum: number, line: QuoteLine): number { |
| 18 | return sum + line.quantity * line.unitPrice; | 18 | return sum + line.quantity * line.unitPrice; |
| 19 | } | 19 | } |
