feat(digests): Phase 2 — API endpoints + /digests UI (X12) #111
Reference in New Issue
Block a user
Delete Branch "worktree-digests-ui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
מה ולמה
משטחי-משתמש לקורפוס היומונים (X12, המשך ל-PR #109): endpoints ב-FastAPI + דף UI נפרד
/digestsלדפדוף, חיפוש, העלאה וקישור לפסק המקורי. היומון נשאר מקור-משני המצביע על הפסק — אינו מצוטט בהחלטה (INV-DIG1) ואינו מחלץ הלכות (INV-DIG2). משימת-אב TaskMasterlegal-ai#104 (תתי 8).Backend — פיצול container-safe ↔ local
צינור הקליטה של היומון משתמש ב-LLM (claude_session local-only, לא בקונטיינר). לכן:
digest_libraryפוצל:create_pending_digest(CONTAINER-SAFE — stage + extract_text(PyMuPDF) + יצירת שורהpending, ללא LLM) ↔enrich_digest/process_pending_digests(מקומי — LLM + embedding + autolink).ingest_digest(batch) מאחד את השניים.db.list_pending_digests; כלי MCPdigest_process_pending(tool+server) — חלופה ל-batch לריקון התור.web/app.py: 10 endpoints/api/digests/*—upload(INSERT-only pending),list,search,queue/pending,get,patch,delete,link,relink,unlink. כולם DB/voyage-only (בטוחים בקונטיינר); מחזירים dict בדפוס precedent.Frontend — Next 16, דף נפרד
lib/api/digests.ts— hooks (useDigests/useDigestSearch/useDigestPending/useUploadDigest/useLink/Relink/Unlink/Delete/Update). ללאapi:types— טיפוסים hand-written, בדיוק כמוprecedent-library.ts(הקונבנציה הקיימת: מודולי-domain כותבים טיפוסים ידנית)./digestsנפרד (לא כרטיסייה ב-/precedents— לשמור את הגבול סמכותי/משני, INV-DIG1): טאבים יומונים/חיפוש,DigestCard(badge "מקושר לפסק" / "הפסק טרם בקורפוס"),DigestUploadDialog, pending-badge. nav + header-context.אימות
create_pending_digest→list_pending_digests(1) →process_pending_digests(completed) →searchמדרג נכון → restore. כל 10 ה-endpoints נרשמו ב-OpenAPI (אומת ע"י import של ה-app)./digestsנוצר.next buildהדיפולטי (turbopack) נכשל ב-worktree עקב symlink ל-node_modules (מגבלת worktree, לא קוד) — אומת עם--webpack; ב-CI/Docker (node_modules אמיתי) הדיפולטי יעבוד.Invariants
מקיים — INV-DIG1/2 (upload לא מחלץ הלכות; ה-UI ממסגר "מצביע לא מצוטט"), INV-DIG3 (link/relink/queue), G2 (מסלול נפרד), G4 (אין בליעה — שגיאות→toast/HTTPException), X6 (חוזה UI↔API — endpoints בדפוס precedent; hooks hand-written כשאר מודולי-ה-domain).
פתוח (Phase 3)
אוטומציית Gmail (קליטה יומית מהמייל) + פיצול העלון החודשי
201.🤖 Generated with Claude Code