diff --git a/web-ui/src/lib/api/precedent-library.ts b/web-ui/src/lib/api/precedent-library.ts index 9e0c723..50f4720 100644 --- a/web-ui/src/lib/api/precedent-library.ts +++ b/web-ui/src/lib/api/precedent-library.ts @@ -646,11 +646,26 @@ export function useHalachotPending(opts: { limit?: number; search?: string } = { }); } +/** Genuine extraction defects — the rule TEXT is malformed, so it needs re-extraction + * (not a chair keep/drop judgment). Mirrors the backend's DEFECT set in + * scripts/halacha_panel_approve.py; other flags (e.g. `application` = fact-specific + * application) are judgment signals, NOT defects, and the panel deliberately skips them. */ +const EXTRACTION_DEFECT_FLAGS = new Set([ + "quote_unverified", + "truncated_quote", + "thin_restatement", + "near_duplicate", +]); + /** A pending item belongs in the "needs extraction fix" segment when it carries a - * quality flag AND the panel never deliberated it (no round). Everything else — - * deliberated items and clean items — is a chair-judgment item. (#133 unified queue) */ + * genuine extraction-DEFECT flag AND the panel never deliberated it (no round). + * Everything else — deliberated items, clean items, and items flagged only for + * chair judgment (e.g. `application`) — is a chair-judgment item. (#133 unified queue) */ export function isExtractionFixItem(h: Halacha): boolean { - return !h.panel_round && (h.quality_flags?.length ?? 0) > 0; + return ( + !h.panel_round && + (h.quality_flags ?? []).some((f) => EXTRACTION_DEFECT_FLAGS.has(f)) + ); } export function useHalachotByStatus(status: string, limit = 300) {