bootstrap: freeze March 8 release path and evidence tooling

This commit is contained in:
anthonyrawlins
2026-02-26 22:48:50 +11:00
parent 8fa636acbb
commit 2147cec1c5
10 changed files with 682 additions and 280 deletions

View File

@@ -113,12 +113,14 @@ func NewTaskCoordinator(
// Start begins the task coordination process
func (tc *TaskCoordinator) Start() {
fmt.Printf("🎯 Starting task coordinator for agent %s (%s)\n", tc.agentInfo.ID, tc.agentInfo.Role)
fmt.Printf("📎 evidence readiness: UCXL decision record provenance pipeline armed (template=%s)\n",
tc.buildTaskUCXLAddress("bootstrap", 0))
// Initialize task execution engine
err := tc.initializeExecutionEngine()
if err != nil {
fmt.Printf("⚠️ Failed to initialize task execution engine: %v\n", err)
fmt.Println("Task execution will fall back to mock implementation")
fmt.Println("Task execution engine unavailable; critical path execution is disabled until fixed")
}
// Announce role and capabilities
@@ -391,18 +393,17 @@ func (tc *TaskCoordinator) executeTask(activeTask *ActiveTask) {
if err != nil {
fmt.Printf("⚠️ AI execution failed for task %s #%d: %v\n",
activeTask.Task.Repository, activeTask.Task.Number, err)
// Fall back to mock execution
taskResult = tc.executeMockTask(activeTask)
taskResult = tc.buildFailedTaskResult(activeTask, "ai_execution_failed", err)
} else {
// Convert execution result to task result
taskResult = tc.convertExecutionResult(activeTask, executionResult)
}
} else {
// Fall back to mock execution
fmt.Printf("📝 Using mock execution for task %s #%d (engine not available)\n",
activeTask.Task.Repository, activeTask.Task.Number)
taskResult = tc.executeMockTask(activeTask)
taskResult = tc.buildFailedTaskResult(
activeTask,
"execution_engine_unavailable",
fmt.Errorf("execution engine is not initialized"),
)
}
err := activeTask.Provider.CompleteTask(activeTask.Task, taskResult)
if err != nil {
@@ -440,6 +441,10 @@ func (tc *TaskCoordinator) executeTask(activeTask *ActiveTask) {
// Announce completion
tc.announceTaskProgress(activeTask.Task, "completed")
ucxlAddress := tc.buildTaskUCXLAddress(activeTask.Task.Repository, activeTask.Task.Number)
fmt.Printf("📌 decision record emitted with provenance evidence | ucxl=%s | task=%s#%d | success=%t\n",
ucxlAddress, activeTask.Task.Repository, activeTask.Task.Number, taskResult.Success)
fmt.Printf("✅ Completed task %s #%d\n", activeTask.Task.Repository, activeTask.Task.Number)
}
@@ -469,31 +474,22 @@ func (tc *TaskCoordinator) executeTaskWithAI(activeTask *ActiveTask) (*execution
return tc.executionEngine.ExecuteTask(tc.ctx, executionRequest)
}
// executeMockTask provides fallback mock execution
func (tc *TaskCoordinator) executeMockTask(activeTask *ActiveTask) *repository.TaskResult {
// Simulate work time based on task complexity
workTime := 5 * time.Second
if strings.Contains(strings.ToLower(activeTask.Task.Title), "complex") {
workTime = 15 * time.Second
}
fmt.Printf("🕐 Mock execution for task %s #%d (simulating %v)\n",
activeTask.Task.Repository, activeTask.Task.Number, workTime)
time.Sleep(workTime)
func (tc *TaskCoordinator) buildFailedTaskResult(activeTask *ActiveTask, reason string, execErr error) *repository.TaskResult {
results := map[string]interface{}{
"status": "completed",
"execution_type": "mock",
"status": "failed",
"execution_type": "ai_required",
"completion_time": time.Now().Format(time.RFC3339),
"agent_id": tc.agentInfo.ID,
"agent_role": tc.agentInfo.Role,
"simulated_work": workTime.String(),
"failure_reason": reason,
}
if execErr != nil {
results["error"] = execErr.Error()
}
return &repository.TaskResult{
Success: true,
Message: "Task completed successfully (mock execution)",
Success: false,
Message: "Task execution failed: real AI execution is required",
Metadata: results,
}
}
@@ -637,6 +633,25 @@ func (tc *TaskCoordinator) buildTaskContext(task *repository.Task) map[string]in
return context
}
func (tc *TaskCoordinator) buildTaskUCXLAddress(repo string, taskNumber int) string {
repoID := strings.ToLower(strings.ReplaceAll(repo, "/", "-"))
if repoID == "" {
repoID = "unknown-repo"
}
project := tc.config.Agent.Project
if project == "" {
project = "chorus"
}
return fmt.Sprintf("ucxl://%s:%s@%s:task-%d/#/tasks/%s/%d",
tc.agentInfo.ID,
tc.agentInfo.Role,
project,
taskNumber,
repoID,
taskNumber,
)
}
// announceAgentRole announces this agent's role and capabilities
func (tc *TaskCoordinator) announceAgentRole() {
data := map[string]interface{}{