fix(halacha-queue): only true defects go to 'needs re-extraction', not all flags
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
Lint — undefined names / undefined-names (pull_request) Successful in 10s

The pending review queue split items into 'להכרעתך' (chair judgment) vs
'דורש תיקון-חילוץ' (needs re-extraction) by a too-blunt predicate: ANY
quality flag + no panel round → re-extraction. That misfiled fact-specific
'application' items (extraction is fine; the open question is whether the
rule generalizes) as extraction defects, contradicting the backend, which
treats only quote_unverified/truncated_quote/thin_restatement/near_duplicate
as defects and routes 'application' to chair judgment.

Now isExtractionFixItem checks the backend's DEFECT set, so 'application'
(and any other non-defect flag) lands in 'להכרעתך'. For 8508-03-24 this
moves 21 application items judgment→correct and leaves 6 thin_restatement
as the only re-extraction items.

Logic-only fix (predicate), no visual change — design-gate exempt per
web-ui/AGENTS.md. tsc + eslint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 10:09:14 +00:00
parent 639779e6a9
commit 532bef04a7

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) {