feat(engine): graph interpreter owns the full task lifecycle behind the flag (CU-U3, CU-U4)
Real engine seams: execute delegates to the legacy implementation phase via a completion interceptor that stops execute() at the implementation-complete boundary (no double review/merge); review performs the in-review handoff; merge resolves through ProjectEngine.onMerge over the same serialized merge queue (wired via a late-bound setMergeRequester, mirroring setMergeEnqueuer). Custom graph nodes run on the proven WorkflowStep machinery (readonly tool policy, verdict parsing). Adds a 'planning' seam to the vocabulary (no-op for pre-specified tasks; custom planning is a prompt node today). Entry point: execute() routes graph-selected tasks through the runner when experimentalFeatures.workflowGraphExecutor is on, with process-wide routing claims (FN-4811 posture), duplicate-dispatch dropping, pre-run errors falling back to legacy, and mid-run errors parking the task in review (never re-running the implementation, never stranding the task). Flag off by default: all 587 executor tests pass unchanged.
This commit is contained in:
@@ -353,6 +353,9 @@ export class ProjectEngine {
|
||||
this.runtime.setMergeActiveClearer?.((taskId) => {
|
||||
this.mergeActive.delete(taskId);
|
||||
});
|
||||
// Workflow-graph interpreter merge seam: resolves with the merge outcome
|
||||
// through the same serialized merge queue the legacy pipeline uses.
|
||||
this.runtime.setMergeRequester?.((taskId) => this.onMerge(taskId));
|
||||
}
|
||||
|
||||
getActiveMergeTaskId(): string | null {
|
||||
|
||||
Reference in New Issue
Block a user