# סיכום סשן — 0051
תאריך: 2026-06-07 13:35
אפליקציה: Vitruvius (פלאגין Revit)
נושא: אבחון כשל DWG + תיקון טלמטריה/דשבורד + זיהוי תוכן

## הקשר
התחיל כהמשך 0049 (סגירת שאלות בטא). המשתמש דיווח על כשל חי: פתח פרויקט Revit חדש, חילץ מחדש את `1978 pit5.dwg` לתיקייה, קישר, הריץ "תקן טקסט" → דיאלוג "0 תוקנו, 1 נכשל" + תווית "תוקן בעבר" על קובץ טרי + הדשבורד לא הראה כלום. שלוש שאלות: למה נכשל, למה הדשבורד שתק, ושהשגיאה תסביר מה/למה/לתקן/להימנע.

## מה נבנה/הושלם
1. **לכידת פלט accoreconsole** — `DwgReverseService.RunAccoreScript` שמר handlers ריקים (זרק stdout/stderr). עכשיו ring-buffer 40 שורות + `TailText` שמסנן רעש (SYSVARMONITOR/banner/Command echo); בכשל מחזיר `accoreconsole exit code N. accoreconsole said: <tail>`.
2. **`FixErrorClassifier`** (Core, חדש) — `Classify`→קטגוריה, `Code`→exception_type, `ReasonCode`→reason_code בטוח (exit_N/timeout/no_output_file/not_found). מסווג יחיד לטלמטריה.
3. **דיאלוג** — בגרסה ראשונה הוספתי בלוק הרגעה+מה/למה/לתקן/להימנע+"סיבה שדווחה". **המשתמש דחה** → החזרתי לדיאלוג המינימלי (מספרים + `✗ filename: לא ניתן היה לתקן`), בלי טכני.
4. **טלמטריה+דשבורד** — הפלאגין יורה `error_thrown{command, exception_type, reason_code}` בכשל; Cloud Function מסכם `links_fixed_total/links_failed_total`; דשבורד קורא משם + מציג `⚠ stage · reason_code` אדום.
5. **🔥 זיהוי "תוקן בעבר" מבוסס-תוכן** — `FileSignature` (FNV-1a64, `len-hex`) + `FixStatusEvaluator` 3 שכבות + `contentHash` ב-state.json. `BuildFixItems` משתמש בו. 7 בדיקות חדשות.

## החלטות שהתקבלו
- **הטקסט הגולמי של accoreconsole לא נשלח לדשבורד** — עלול להכיל שם-קובץ יועץ (חוזה פרטיות אוסר). רק reason_code בטוח. הטקסט המלא ביומן מקומי.
- **דיאלוג אדריכל מינימלי** (החלטת משתמש מפורשת) — "רק אני צריך לדעת למה נכשל".
- **הטיה בטוחה בזיהוי-תוכן: ספק→"תוקן"** — תווית "לא תוקן" שגויה על קובץ EN-typed שכבר תוקן = המשתמש מתקן שוב = היפוך-כפול שמקלקל (memory 0048). false-negative מסוכן יותר מ-false-positive.
- **Firebase = vitruvius-telemetry** (עסקי, --account מפורש). אושר ע"י המשתמש לפני פריסה.

## בעיות שנפתרו
- **כשל הדיווח:** ה-SAVEAS (DXF→DWG) של accoreconsole החזיר exit≠0. ההיפוך עבד (873 ישויות). הכשל לפני שלב הגיבוי → **הקובץ המקורי שלם** (backup=null). הסיבה הוסתרה כי זרקנו את הפלט.
- **שתיקת הדשבורד:** `error_thrown` הוכרז ב-allowlist אבל **אף פעם לא נורה**; "נכשלו" קרא ממנו (תקוע 0); "הצליחו" ספר כל fix_completed כולל כשלונות; ה-function התעלם מ-links_failed.
- **תווית שגויה:** הזיהוי היה מבוסס-נתיב (state.json key + קיום גיבוי) → קובץ טרי באותו נתיב = "תוקן" שקרי.
- **accoreconsole לא יציב:** שחזור חי על אותו קובץ נתקע 5+ דק' על 4GB (אותו שלב לקח 7ש' בבוקר). AutoCAD היה סגור (שלל נעילה). מחזק IxMilia/רישוי.

## מה לא עבד / להיזהר
- שחזור חי ידני של accoreconsole נתקע (prompt/רישוי ב-headless). לא להסתמך עליו לאבחון — היומן הוא המקור.
- ה-guard מפיל **כל** האירוע על prop לא-מורשה → חובה להוסיף reason_code ל-allowlist (נעשה).
- `config.json telemetryEnabled` הוא vestigial — הטלמטריה נשלטת רק ע"י `telemetry.config` enabled. לא לבלבל.

## קבצים שנוצרו/שונו
**חדשים:**
- `src\Vitruvius.Core\Dwg\FixErrorClassifier.cs`
- `src\Vitruvius.Core\State\FileSignature.cs`
- `src\Vitruvius.Core\State\FixStatusEvaluator.cs`
- `tests\Vitruvius.Core.Tests\FixStatusEvaluatorTests.cs` (7 בדיקות)

**שונו:**
- `src\Vitruvius.Core\Dwg\DwgReverseService.cs` (ring-buffer + TailText)
- `src\Vitruvius.Core\State\VitruviusStateCache.cs` (contentHash + Record מחשב hash)
- `src\Vitruvius.Core\Telemetry\TelemetryGuard.cs` (+reason_code ל-error_thrown)
- `src\Vitruvius.Core\I18n\L.cs` (+fix.err.fileGeneric; בלוק הדרכה נוסף ואז הוסר)
- `src\Vitruvius.Revit2024\Commands\FixGibberishCommand.cs` (NoteFailure, error_thrown, דיאלוג מינימלי)
- `src\Vitruvius.Revit2024\UI\LinkSelectionDialog.cs` (FixStatusEvaluator)
- `backend\functions\index.js` (roll-up links_fixed/failed)
- `backend\hosting\index.html` (KPI מהמונים + error_thrown feed)

**DLL:** Core 162KB · Revit2024 132KB, פרוס `Addins\2024\Vitruvius\` (OLD\2026-06-07_13-30). בנייה 4/4, בדיקות 118/118.
**Firebase:** functions+hosting פרוסים ל-vitruvius-telemetry. `vitruvius-telemetry.web.app` חי.

## הצעד הבא
1. **חוסם: אבחון accoreconsole** — המשתמש מריץ "תקן טקסט" → קריאת `diagnostic.log` שורת `fix.dwg.result` (כוללת עכשיו exit code + accoreconsole said). הכרעה: IxMilia / רישוי / קובץ.
2. פידבק לוטן דייטש (אם הגיע — `03 שאלון.html` ערוך).
3. אפשרי: `/code-review` על שינויי היום.
