From 88a4f15ce1310f8ee8693835be14aa5280233f17 Mon Sep 17 00:00:00 2001 From: soryu Date: Thu, 5 Feb 2026 23:42:48 +0000 Subject: Add directive-first chain system redesign Redesigns the chain system with a directive-first architecture where Directive is the top-level entity (the "why/what") and Chains are generated execution plans (the "how") that can be dynamically modified. Backend: - Add database migration for directive system tables - Add Directive, DirectiveChain, ChainStep, DirectiveEvent models - Add DirectiveVerifier and DirectiveApproval models - Add orchestration module with engine, planner, and verifier - Add comprehensive API handlers for directives - Add daemon CLI commands for directive management - Add directive skill documentation - Integrate contract completion with directive engine - Add SSE endpoint for real-time directive events Frontend: - Add directives route with split-view layout - Add 6-tab detail view (Overview, Chain, Events, Evaluations, Approvals, Verifiers) - Add React Flow DAG visualization for chain steps - Add SSE subscription hook for real-time event updates - Add useDirectives and useDirectiveEventSubscription hooks - Add directive types and API functions Fixes: - Fix test failures in ws/protocol, task_output, completion_gate, patch - Fix word boundary matching in looks_like_task() - Fix parse_last() to find actual last completion gate - Fix create_export_patch when merge-base equals HEAD - Clean up clippy warnings in new code Co-Authored-By: Claude Opus 4.5 --- makima/src/daemon/chain/runner.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'makima/src/daemon/chain/runner.rs') diff --git a/makima/src/daemon/chain/runner.rs b/makima/src/daemon/chain/runner.rs index dfbcfa7..1814581 100644 --- a/makima/src/daemon/chain/runner.rs +++ b/makima/src/daemon/chain/runner.rs @@ -37,8 +37,10 @@ pub enum RunnerError { /// Chain runner for creating and managing chains. pub struct ChainRunner { /// Base API URL + #[allow(dead_code)] api_url: String, /// API key for authentication + #[allow(dead_code)] api_key: String, } @@ -116,6 +118,7 @@ impl ChainRunner { CreateChainRequest { name: chain.name.clone(), description: chain.description.clone(), + repository_url: None, // Legacy field, repositories take precedence repositories: if repositories.is_empty() { None } else { @@ -242,7 +245,9 @@ mod tests { let yaml = r#" name: Test Chain description: A test chain -repo: https://github.com/test/repo +repositories: + - name: main + repository_url: https://github.com/test/repo contracts: - name: Research type: simple @@ -270,8 +275,11 @@ loop: assert_eq!(request.name, "Test Chain"); assert_eq!(request.description, Some("A test chain".to_string())); + // Repositories are now in a separate array + let repos = request.repositories.unwrap(); + assert_eq!(repos.len(), 1); assert_eq!( - request.repository_url, + repos[0].repository_url, Some("https://github.com/test/repo".to_string()) ); assert_eq!(request.loop_enabled, Some(true)); -- cgit v1.2.3