fix(halacha-queue): route only true extraction defects to "needs re-extraction" #302

Merged
chaim merged 1 commits from worktree-halacha-fix-bucket-predicate into main 2026-06-19 10:09:47 +00:00
Showing only changes of commit 532bef04a7 - Show all commits

View File

@@ -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 /** 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 — * genuine extraction-DEFECT flag AND the panel never deliberated it (no round).
* deliberated items and clean items — is a chair-judgment item. (#133 unified queue) */ * 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 { 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) { export function useHalachotByStatus(status: string, limit = 300) {