feat(generate): סימון-סטטוס נשמר-שרת לריצת-הרקע של "הפקת מסמכים" (#227 ג) #399
Reference in New Issue
Block a user
Delete Branch "worktree-generate-status-indicator"
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?
חצי ג של #227 (משלים את חצי ב, PR#398). מוסיף צ'יפ-סטטוס ליד כפתורי "הפקת מסמכים" (סיכום-מנהלים + טיוטת-ביניים) שמראה את מצב-ריצת-הרקע האמיתי:
בתור · רץ+שעון-חי · הושלם+מתי · נכשל+סיבה+"נסה שוב". הכשל שאובחן (ריצה שבוטלה) יופיע עכשiv כצ'יפ אדום במקום להיראות כהצלחה.נשמר-שרת (דרישת חיים המפורשת)
הסטטוס נגזר בשרת ולא מוחזק בזיכרון-הדף — כך שעזיבה+חזרה לדף מציגות את המצב הנכון, בלי צורך להישאר בדף:
started_atשל השרת → הזמן שחלף נכון גם בחזרה.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.🤖 Generated with Claude Code
עד כה ה-"מייצר…" כיסה רק את שנייה-ה-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>