The halacha extraction queue was stuck (same class as the metadata issue): 26 precedents requested extraction with no drainer, plus 1 orphaned in 'processing' (status=processing, requested_at cleared → never re-picked by the queue). - db.requeue_stale_processing_extractions(kind): re-stamp orphaned 'processing' rows (requested_at IS NULL) so they re-drain; halacha extractor force=False resumes from chunk checkpoints (no duplicates). - process_pending_extractions calls it at the top — fully unattended, safe under the global advisory lock. Mirrors the digests-drain self-heal. - legal-halacha-drain.config.cjs: pm2 cron (every 2h, conservative — Claude is slow/rate-limited and each run adds to the chair's pending_review queue). drain_halacha_queue.py stays on claude_session (high reasoning quality for holding/ratio; NOT moved to Gemini). SCRIPTS.md. The chair-approval gate (INV-G10) is untouched — this only produces halachot; Daphna still approves each in /approvals. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
1.6 KiB
JavaScript
40 lines
1.6 KiB
JavaScript
/**
|
|
* pm2 ecosystem entry for legal-halacha-drain — scheduled drain of the precedent
|
|
* halacha-extraction queue. Halacha extraction stays on claude_session (local
|
|
* CLI, high reasoning quality for holding/ratio) — unlike metadata which moved
|
|
* to Gemini. Extracted halachot land 'pending_review' for the chair's approval
|
|
* gate (INV-G10); this drainer only produces them, it never approves.
|
|
*
|
|
* The drain self-heals orphaned 'processing' rows (precedent_library) and is
|
|
* serialised by a global advisory lock, so overlapping ticks are safe.
|
|
*
|
|
* Pattern: cron_restart fires the script; autorestart:false → one-shot per tick
|
|
* (pm2 shows "stopped" between ticks). Cheap no-op when the queue is empty.
|
|
* Cadence is conservative (every 2h) because Claude extraction is slow/rate-
|
|
* limited and each run adds to the chair's review queue.
|
|
*
|
|
* Requires the local ``claude`` CLI + host ~/.env (POSTGRES_URL, etc.).
|
|
*
|
|
* Install (once):
|
|
* pm2 start /home/chaim/legal-ai/scripts/legal-halacha-drain.config.cjs
|
|
* pm2 save
|
|
* Run now (manual): mcp-server/.venv/bin/python scripts/drain_halacha_queue.py
|
|
* Schedule override: HALACHA_DRAIN_CRON (default every 2 hours at :47).
|
|
*/
|
|
const cron = process.env.HALACHA_DRAIN_CRON || "47 */2 * * *";
|
|
|
|
module.exports = {
|
|
apps: [
|
|
{
|
|
name: "legal-halacha-drain",
|
|
cwd: "/home/chaim/legal-ai",
|
|
script: "/home/chaim/legal-ai/mcp-server/.venv/bin/python",
|
|
args: "scripts/drain_halacha_queue.py",
|
|
env: { HOME: "/home/chaim", PYTHONUNBUFFERED: "1" },
|
|
autorestart: false, // one-shot per cron tick
|
|
cron_restart: cron,
|
|
max_memory_restart: "800M",
|
|
},
|
|
],
|
|
};
|