feat(generate): סימון-סטטוס נשמר-שרת לריצת-הרקע של "הפקת מסמכים" (#227 ג) #399

Merged
chaim merged 1 commits from worktree-generate-status-indicator into main 2026-07-06 11:34:27 +00:00
Owner

חצי ג של #227 (משלים את חצי ב, PR#398). מוסיף צ'יפ-סטטוס ליד כפתורי "הפקת מסמכים" (סיכום-מנהלים + טיוטת-ביניים) שמראה את מצב-ריצת-הרקע האמיתי: בתור · רץ+שעון-חי · הושלם+מתי · נכשל+סיבה+"נסה שוב". הכשל שאובחן (ריצה שבוטלה) יופיע עכשiv כצ'יפ אדום במקום להיראות כהצלחה.

נשמר-שרת (דרישת חיים המפורשת)

הסטטוס נגזר בשרת ולא מוחזק בזיכרון-הדף — כך שעזיבה+חזרה לדף מציגות את המצב הנכון, בלי צורך להישאר בדף:

  • מקור: issue-הילד של ה-CEO (מ-PR#398) + ה-heartbeat_run האחרון + קיום-הקובץ.
  • שעון-הריצה מעוגן ל-started_at של השרת → הזמן שחלף נכון גם בחזרה.
  • ה-hook עושה poll כל 5 שנ׳ רק כשפעיל (running/queued); מצב טרמינלי עוצר את ה-interval.

Backend

  • paperclip_client.get_generation_run_status — קורא את issue-הילד (dedup לפי כותרת) + ה-run האחרון מ-Paperclip DB (read-only), מאחורי שער-הפלטפורמה (G12).
  • GET /api/cases/{n}/generate/{action}/status — ממפה ל-idle/queued/running/done/failed + output_ready + started_at/finished_at (UTC). run שהסתיים בלי קובץ = failed (כדי שלא ייראה כהצלחה); issue_assignee_changed → "הריצה בוטלה".

Frontend

  • useGenerateStatus + GenerateStatusChip (רכיב חסר-מצב, שעון-ריצה חי מ-started_at). כפתורי-ההפקה מרעננים את שאילתת-הסטטוס ב-onSuccess (הצ'יפ קופץ ל-queued/running מיד). שורה 3 (החלטה מלאה, סינכרוני בקונטיינר) — בלי צ'יפ.

הערות

  • עיצוב: מוקאפ 29-generate-status-indicator אושר דרך שער Claude Design (X17).
  • npm run api:types לריענון post-deploy (ה-endpoint טרם חי; המודול לא צורך types.ts). אימות חי: curl /api/cases/1043-02-26/generate/interim_draft/status.
  • tsc + eslint + py_compile ירוקים. Invariants: G12, G1.

🤖 Generated with Claude Code

חצי **ג** של #227 (משלים את חצי ב, PR#398). מוסיף צ'יפ-סטטוס ליד כפתורי "הפקת מסמכים" (סיכום-מנהלים + טיוטת-ביניים) שמראה את **מצב-ריצת-הרקע האמיתי**: `בתור · רץ+שעון-חי · הושלם+מתי · נכשל+סיבה+"נסה שוב"`. הכשל שאובחן (ריצה שבוטלה) יופיע עכשiv כצ'יפ אדום במקום להיראות כהצלחה. ## נשמר-שרת (דרישת חיים המפורשת) הסטטוס **נגזר בשרת** ולא מוחזק בזיכרון-הדף — כך שעזיבה+חזרה לדף מציגות את המצב הנכון, בלי צורך להישאר בדף: - מקור: **issue-הילד של ה-CEO** (מ-PR#398) + ה-**heartbeat_run** האחרון + קיום-הקובץ. - שעון-הריצה מעוגן ל-`started_at` של השרת → הזמן שחלף נכון גם בחזרה. - ה-hook עושה poll כל 5 שנ׳ **רק כשפעיל** (running/queued); מצב טרמינלי עוצר את ה-interval. ## Backend - `paperclip_client.get_generation_run_status` — קורא את issue-הילד (dedup לפי כותרת) + ה-run האחרון מ-Paperclip DB (read-only), **מאחורי שער-הפלטפורמה** (G12). - `GET /api/cases/{n}/generate/{action}/status` — ממפה ל-`idle/queued/running/done/failed` + `output_ready` + `started_at/finished_at` (UTC). run שהסתיים **בלי קובץ = failed** (כדי שלא ייראה כהצלחה); `issue_assignee_changed` → "הריצה בוטלה". ## Frontend - `useGenerateStatus` + `GenerateStatusChip` (רכיב חסר-מצב, שעון-ריצה חי מ-`started_at`). כפתורי-ההפקה מרעננים את שאילתת-הסטטוס ב-onSuccess (הצ'יפ קופץ ל-queued/running מיד). שורה 3 (החלטה מלאה, סינכרוני בקונטיינר) — בלי צ'יפ. ## הערות - עיצוב: מוקאפ `29-generate-status-indicator` אושר דרך שער Claude Design (X17). - `npm run api:types` לריענון post-deploy (ה-endpoint טרם חי; המודול לא צורך types.ts). אימות חי: curl `/api/cases/1043-02-26/generate/interim_draft/status`. - tsc + eslint + py_compile ירוקים. **Invariants:** G12, G1. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-06 11:34:17 +00:00
feat(generate): סימון-סטטוס לריצת-הרקע של "הפקת מסמכים" (#227 ג)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
Lint — undefined names / undefined-names (pull_request) Successful in 15s
b296422d87
עד כה ה-"מייצר…" כיסה רק את שנייה-ה-POST; אחרי זה לא היה חיווי אם ההפקה
רצה/הצליחה/נכשלה — ריצה שבוטלה נראתה כמו הצלחה. עכשיו צ'יפ-סטטוס ליד כל
כפתור-הפקה: בתור · רץ+שעון-חי · הושלם+מתי · נכשל+סיבה+"נסה שוב".

**נשמר-שרת (דרישת חיים):** הסטטוס נגזר בשרת מ-issue-הילד של ה-CEO +
ה-heartbeat_run האחרון + קיום-הקובץ — לא מזיכרון-הדף. שעון-הריצה מעוגן
ל-started_at של השרת, כך שעזיבה+חזרה לדף מציגות את המצב והזמן הנכונים,
בלי צורך להישאר בדף.

Backend:
- paperclip_client.get_generation_run_status — קורא issue-ילד + latest run
  מ-Paperclip DB (read-only, מאחורי שער-הפלטפורמה G12); dedup לפי כותרת.
- GET /api/cases/{n}/generate/{action}/status — ממפה ל-idle/queued/running/
  done/failed + output_ready + started_at/finished_at (UTC). run שהסתיים בלי
  קובץ = failed (שלא ייראה כהצלחה).

Frontend:
- useGenerateStatus (poll 5s רק כשפעיל; עוצר בטרמינלי) + GenerateStatusChip
  (שעון-ריצה חי מ-started_at; רכיב חסר-מצב). כפתורי-ההפקה מרעננים את
  שאילתת-הסטטוס ב-onSuccess. שורה 3 (החלטה מלאה, סינכרוני) — בלי צ'יפ.

עיצוב: מוקאפ 29-generate-status-indicator אושר ע"י חיים דרך שער Claude Design (X17).
tsc + eslint + py_compile ירוקים. (api:types לריענון post-deploy.)
Invariants: G12 (Paperclip רק בשער), G1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit a0a30092e8 into main 2026-07-06 11:34:27 +00:00
chaim deleted branch worktree-generate-status-indicator 2026-07-06 11:34:27 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#399