From b67b3f8e8d63361d9ff19f87fd608c03bfa3fd43 Mon Sep 17 00:00:00 2001 From: soryu Date: Tue, 17 Feb 2026 00:40:32 +0000 Subject: soryu-co/soryu - makima (#67) * feat: soryu-co/soryu - makima: Fix contracts page scrolling overflow * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Remove contract association from orders and make directive mandatory in UI * feat: soryu-co/soryu - makima: Add directive name to order metadata for searchability * feat: soryu-co/soryu - makima: Change directive link in orders to use search interface * feat: soryu-co/soryu - makima: Name directive PRs based on content not directive title * feat: soryu-co/soryu - makima: Add orderId to step creation and auto-link orders to steps * feat: soryu-co/soryu - makima: Add under_review status and auto-complete orders in plan flow --- .../frontend/src/components/orders/OrderDetail.tsx | 117 ++++++++++++++++----- .../frontend/src/components/orders/OrderList.tsx | 5 +- makima/frontend/src/lib/api.ts | 2 +- 3 files changed, 96 insertions(+), 28 deletions(-) (limited to 'makima/frontend') diff --git a/makima/frontend/src/components/orders/OrderDetail.tsx b/makima/frontend/src/components/orders/OrderDetail.tsx index 9d4c00c..1b8d76e 100644 --- a/makima/frontend/src/components/orders/OrderDetail.tsx +++ b/makima/frontend/src/components/orders/OrderDetail.tsx @@ -11,6 +11,7 @@ import type { const STATUS_BADGE: Record = { open: { color: "text-[#75aafc] border-[rgba(117,170,252,0.4)]", label: "OPEN" }, in_progress: { color: "text-yellow-400 border-yellow-800", label: "IN PROGRESS" }, + under_review: { color: "text-amber-400 border-amber-800", label: "UNDER REVIEW" }, done: { color: "text-emerald-400 border-emerald-800", label: "DONE" }, archived: { color: "text-[#556677] border-[#2a3a5a]", label: "ARCHIVED" }, }; @@ -31,7 +32,7 @@ const TYPE_OPTIONS: { value: OrderType; color: string; label: string }[] = [ { value: "improvement", color: "text-emerald-400", label: "Improvement" }, ]; -const STATUS_OPTIONS: OrderStatus[] = ["open", "in_progress", "done", "archived"]; +const STATUS_OPTIONS: OrderStatus[] = ["open", "in_progress", "under_review", "done", "archived"]; interface OrderDetailProps { order: Order; @@ -59,6 +60,7 @@ export function OrderDetail({ const [editingLabels, setEditingLabels] = useState(false); const [labelsText, setLabelsText] = useState(order.labels.join(", ")); const [showLinkDirective, setShowLinkDirective] = useState(false); + const [directiveSearch, setDirectiveSearch] = useState(""); const badge = STATUS_BADGE[order.status] || STATUS_BADGE.open; const currentPriority = PRIORITY_OPTIONS.find((p) => p.value === order.priority) || PRIORITY_OPTIONS[4]; @@ -405,31 +407,96 @@ export function OrderDetail({
{/* Link to Directive */}
- +
+ + {order.directiveId && ( + + )} +
{showLinkDirective && ( -
- {directives.length === 0 ? ( -
- No directives available -
- ) : ( - directives.map((d) => ( - - )) - )} +
+
+ setDirectiveSearch(e.target.value)} + placeholder="Search directives..." + autoFocus + className="w-full bg-transparent border-none outline-none text-[10px] font-mono text-[#75aafc] placeholder-[#556677]" + /> +
+
+ {directives.length === 0 ? ( +
+ No directives available +
+ ) : ( + (() => { + const filtered = directives.filter((d) => + d.title.toLowerCase().includes(directiveSearch.toLowerCase()) + ); + if (filtered.length === 0) { + return ( +
+ No matching directives +
+ ); + } + return filtered.map((d) => { + const isLinked = d.id === order.directiveId; + const statusColors: Record = { + draft: "text-[#556677] border-[#2a3a5a]", + active: "text-emerald-400 border-emerald-800", + idle: "text-[#7788aa] border-[#2a3a5a]", + paused: "text-yellow-400 border-yellow-800", + archived: "text-[#556677] border-[#2a3a5a]", + }; + const sColor = statusColors[d.status] || statusColors.draft; + return ( + + ); + }); + })() + )} +
)}
diff --git a/makima/frontend/src/components/orders/OrderList.tsx b/makima/frontend/src/components/orders/OrderList.tsx index 1d279f7..3d63c54 100644 --- a/makima/frontend/src/components/orders/OrderList.tsx +++ b/makima/frontend/src/components/orders/OrderList.tsx @@ -4,6 +4,7 @@ import type { Order, OrderStatus, OrderPriority, OrderType } from "../../lib/api const STATUS_BADGE: Record = { open: { color: "text-[#75aafc] border-[rgba(117,170,252,0.4)]", label: "OPEN" }, in_progress: { color: "text-yellow-400 border-yellow-800", label: "IN PROGRESS" }, + under_review: { color: "text-amber-400 border-amber-800", label: "REVIEW" }, done: { color: "text-emerald-400 border-emerald-800", label: "DONE" }, archived: { color: "text-[#556677] border-[#2a3a5a]", label: "ARCHIVED" }, }; @@ -35,7 +36,7 @@ interface OrderListProps { onTypeFilter: (t: OrderType | undefined) => void; } -const STATUS_OPTIONS: (OrderStatus | "all")[] = ["all", "open", "in_progress", "done", "archived"]; +const STATUS_OPTIONS: (OrderStatus | "all")[] = ["all", "open", "in_progress", "under_review", "done", "archived"]; const TYPE_OPTIONS: (OrderType | "all")[] = ["all", "feature", "bug", "spike", "chore", "improvement"]; export function OrderList({ @@ -105,7 +106,7 @@ export function OrderList({ : "text-[#556677] hover:text-[#7788aa] border border-transparent" }`} > - {s === "all" ? "ALL" : s === "in_progress" ? "WIP" : s.toUpperCase()} + {s === "all" ? "ALL" : s === "in_progress" ? "WIP" : s === "under_review" ? "REVIEW" : s.toUpperCase()} ))}
diff --git a/makima/frontend/src/lib/api.ts b/makima/frontend/src/lib/api.ts index 17bc20f..ed628f7 100644 --- a/makima/frontend/src/lib/api.ts +++ b/makima/frontend/src/lib/api.ts @@ -3281,7 +3281,7 @@ export async function pickUpOrders(directiveId: string): Promise