diff --git a/mcp-server/src/legal_mcp/services/db.py b/mcp-server/src/legal_mcp/services/db.py
index 5815120..1f3bdb2 100644
--- a/mcp-server/src/legal_mcp/services/db.py
+++ b/mcp-server/src/legal_mcp/services/db.py
@@ -3700,7 +3700,11 @@ async def list_external_case_law(
created_at,
(SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id) AS halachot_count,
(SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id
- AND h.review_status IN ('approved', 'published')) AS approved_count
+ AND h.review_status IN ('approved', 'published')) AS approved_count,
+ (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id
+ AND h.review_status IN ('pending_review', 'deferred')) AS pending_count,
+ (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id
+ AND h.review_status = 'rejected') AS rejected_count
FROM case_law
WHERE {where_sql}
ORDER BY created_at DESC
diff --git a/web-ui/src/components/precedents/library-list-panel.tsx b/web-ui/src/components/precedents/library-list-panel.tsx
index 65403c3..501653f 100644
--- a/web-ui/src/components/precedents/library-list-panel.tsx
+++ b/web-ui/src/components/precedents/library-list-panel.tsx
@@ -138,13 +138,37 @@ function StatusPill({ p }: { p: Precedent }) {
if (p.halachot_count === 0) {
return ללא הלכות;
}
+ // Split the count into approved / pending / rejected so a high total no
+ // longer reads as "lots waiting" when the remainder is actually rejected.
+ // Pending is the only state that needs the chair — highlight it in red.
+ const hasPending = p.pending_count > 0;
return (
-
- {p.approved_count}/{p.halachot_count} מאושרות
+
+ {p.approved_count}
+ /
+
+ {p.pending_count}
+
+ /
+ {p.rejected_count}
+ הלכות
);
}
+// Rows with halachot still awaiting the chair get a reddish wash so the
+// "needs attention" queue is visible at a glance without opening each row.
+function rowClassName(p: Precedent): string {
+ return p.pending_count > 0
+ ? "border-rule bg-danger-bg/40 hover:bg-danger-bg/60 align-top"
+ : "border-rule hover:bg-gold-wash/30 align-top";
+}
+
function CourtRow({ p, onEdit }: { p: Precedent; onEdit: (id: string) => void }) {
const del = useDeletePrecedent();
const reqHalachot = useRequestHalachotExtraction();
@@ -175,7 +199,7 @@ function CourtRow({ p, onEdit }: { p: Precedent; onEdit: (id: string) => void })
};
return (
-
+
voi
};
return (
-
+