From 87044a747b47bd83249d61a45842c7f7b2eae56d Mon Sep 17 00:00:00 2001
From: soryu <soryu@soryu.co>
Date: Sun, 11 Jan 2026 05:52:14 +0000
Subject:  Contract system

---
 makima/frontend/src/components/mesh/TaskDetail.tsx | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'makima/frontend/src/components/mesh/TaskDetail.tsx')

diff --git a/makima/frontend/src/components/mesh/TaskDetail.tsx b/makima/frontend/src/components/mesh/TaskDetail.tsx
index be4fb80..967b1d1 100644
--- a/makima/frontend/src/components/mesh/TaskDetail.tsx
+++ b/makima/frontend/src/components/mesh/TaskDetail.tsx
@@ -23,6 +23,8 @@ interface TaskDetailProps {
   onToggleSubtaskOutput?: (subtaskId: string, subtaskName: string) => void;
   /** Which subtask's output is currently being viewed */
   viewingSubtaskId?: string | null;
+  /** Navigate to view the contract */
+  onViewContract?: (contractId: string) => void;
   // Optional advanced features
   overlayDiff?: string;
   changedFiles?: string[];
@@ -105,6 +107,7 @@ export function TaskDetail({
   onCreateSubtask,
   onToggleSubtaskOutput,
   viewingSubtaskId,
+  onViewContract,
   overlayDiff,
   changedFiles,
   onRequestDiff,
@@ -417,6 +420,15 @@ export function TaskDetail({
             >
               {task.status}
             </span>
+            {/* Contract badge - clickable to view contract */}
+            {task.contractId && onViewContract && (
+              <button
+                onClick={() => onViewContract(task.contractId!)}
+                className="px-2 py-0.5 font-mono text-xs text-blue-400 bg-blue-400/10 border border-blue-400/20 hover:bg-blue-400/20 transition-colors"
+              >
+                Contract
+              </button>
+            )}
             {/* Orchestrator badge for depth 0 tasks with subtasks */}
             {task.depth === 0 && task.subtasks.length > 0 && (
               <span className="px-2 py-0.5 font-mono text-xs text-purple-400 bg-purple-400/10 border border-purple-400/20">
-- 
cgit v1.2.3

