From 94130a6661c21c48b6083682e1eb41c963544927 Mon Sep 17 00:00:00 2001 From: Lukas May Date: Fri, 30 Jan 2026 21:03:02 +0100 Subject: [PATCH] feat(06-01): add coordination domain events for merge lifecycle - MergeQueuedEvent: completed task queued for merge - MergeStartedEvent: merge attempt begins - MergeCompletedEvent: merge succeeds - MergeConflictedEvent: merge has conflicts (triggers bounce-back) --- src/events/index.ts | 4 ++++ src/events/types.ts | 51 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/events/index.ts b/src/events/index.ts index 3f283b6..ce81964 100644 --- a/src/events/index.ts +++ b/src/events/index.ts @@ -29,6 +29,10 @@ export type { TaskDispatchedEvent, TaskCompletedEvent, TaskBlockedEvent, + MergeQueuedEvent, + MergeStartedEvent, + MergeCompletedEvent, + MergeConflictedEvent, DomainEventMap, DomainEventType, } from './types.js'; diff --git a/src/events/types.ts b/src/events/types.ts index e8a1bd9..8bf9d20 100644 --- a/src/events/types.ts +++ b/src/events/types.ts @@ -228,6 +228,51 @@ export interface TaskBlockedEvent extends DomainEvent { }; } +/** + * Merge Coordination Events + */ + +export interface MergeQueuedEvent extends DomainEvent { + type: 'merge:queued'; + payload: { + taskId: string; + agentId: string; + worktreeId: string; + priority: 'low' | 'medium' | 'high'; + }; +} + +export interface MergeStartedEvent extends DomainEvent { + type: 'merge:started'; + payload: { + taskId: string; + agentId: string; + worktreeId: string; + targetBranch: string; + }; +} + +export interface MergeCompletedEvent extends DomainEvent { + type: 'merge:completed'; + payload: { + taskId: string; + agentId: string; + worktreeId: string; + targetBranch: string; + }; +} + +export interface MergeConflictedEvent extends DomainEvent { + type: 'merge:conflicted'; + payload: { + taskId: string; + agentId: string; + worktreeId: string; + targetBranch: string; + conflictingFiles: string[]; + }; +} + /** * Union of all domain events - enables type-safe event handling */ @@ -250,7 +295,11 @@ export type DomainEventMap = | TaskQueuedEvent | TaskDispatchedEvent | TaskCompletedEvent - | TaskBlockedEvent; + | TaskBlockedEvent + | MergeQueuedEvent + | MergeStartedEvent + | MergeCompletedEvent + | MergeConflictedEvent; /** * Event type literal union for type checking