- setAiInsightsExpanded(v => !v)} className="flex items-center gap-2 w-full text-left">
- {aiInsightsExpanded ? : }
-
- AI Insights
-
+
+ {/* AI Insights — tinted section so it reads as distinct from
+ the deterministic history below it. */}
+
+
- onCostChange(e.target.value)} className="h-9 tabular-nums" placeholder="0.00" />
+ {/* Pricing — qty + cost + selling (read-only). Selling is
+ locked because it comes from the order; we still surface
+ it so the operator sees the margin they're pricing. */}
+
+
+
+
{/* PO description — what the supplier sees on the PO. Defaults
to the order description so the buyer-tasks pending →
processed transition fires for the common no-op case.
Mirrors the canonical /orders/[id]/process gate. */}
-
+
{poDescription.trim() !== (item.description || "").trim() && (
setPoDescription(item.description || "")}
- className="text-[11px] text-muted-foreground hover:text-foreground"
+ className="text-[11px] text-muted-foreground hover:text-foreground transition-colors"
>
↺ reset to order description
@@ -407,21 +581,47 @@ export function OrderSprintProcessModal({ item, suppliers, open, onClose, onProc
className="text-sm"
placeholder="Description the supplier sees on the PO"
/>
-