# סיכום סשן — 0055
תאריך: 2026-06-11 10:00
אפליקציה: Vitruvius (פלאגין Revit לתיקון עברית ב-DWG)
נושא: תיקון היסט מיקום טקסט — דגל BACKWARD

## מה נבנה/הושלם
1. **פונט Vitruvius Hebrew Mono** (`fonts\build-hebrew-mono.py` + `Vitruvius_HebrewMono.ttf`) —
   מונוספייס דחוס, נגזר מ-Hebrew Visual: כל גליף נדחס אופקית וממורכז בתא קבוע.
   כיול סופי: CELL=1015 יחידות (em=2048) = יחס 19/21 שנמדד מ-techno_m.shx האמיתי דרך dumpshx.
   מותקן per-user (קובץ versioned + registry HKCU) + נוסף ל-`installer\Vitruvius.iss`.
2. **FontRecommender**: `HebrewMonoFamily`/`HebrewVisualFamily` constants; משפחות `_m`
   (techno_m/moran_m/sivan_m/michal_m) → Mono; `IsMonospaceHebrewShx()` מנתב `_m` לא-מוכרים → Mono.
3. **ShxFontMapWriter**: עוקף ברירות-מחדל של Revit (`IsRevitDefaultFont` = ערך שמתחיל "Revit_")
   במקום להתייחס אליהן כבחירת-משתמש; מוחק שורה לא-מנוהלת כפולה כשמשתלטים על מפתח.
4. **🔥 BackwardTextNormalizer** (`Core\Dwg\BackwardTextNormalizer.cs`) — התיקון האמיתי למיקום.
   מחובר כ-pass 2.5 ב-`DxfTextReverser.Reverse`. ראה "החלטות" להלן.
5. בדיקות: 132→**146/146** (FontCoverage +5 עודכנו, FontMap +2, ScanTests פוצל מונו/פרופורציונלי,
   BackwardTextNormalizationTests +8 חדשות כולל רוטציה 45°, sanity-fail, style-inherited).
6. HTML הסבר למשתמש: `Vitruvius\_הסבר-שני-מנגנונים.html` (שני המנגנונים — פונט גלובלי מול
   היפוך פר-קובץ) + תמונת הוכחה `_mono-vs-proportional.png`.

## החלטות שהתקבלו
- **שורש הבעיה (מאומת בנתונים, לא השערה):** כל טקסט עברי בקבצי בריגה נושא group 71=2
  (BACKWARD) ברמת TEXT וגם ברמת STYLE ("WinHeb backward"). העברית מאוחסנת EN-typed בסדר
  **לוגי** (לא ויזואלי!). אוטוקד מצייר במראה מימין-לשמאל מהעוגן (גליפי SHX מראש-ממוראים יוצאים
  ישרים). Revit מתעלם מהדגל → מצייר קדימה → סדר הפוך + הטקסט משתרע לכיוון הלא נכון מהעוגן
  = היסט במלוא רוחב הטקסט. מסביר את שני הכיוונים: LEFT/BASE זז ימינה, RIGHT/BOT זז שמאלה.
- **ראיית הזהב:** קווי מתיחה (underline LINEs) בקובץ משתרעים בדיוק בין g11 ל-g10 של כל תווית
  → ה-span המצויר = [g11 (קצה שמאלי, bottom), g10 (קצה ימני, baseline)]. עוגן ודאי מהקובץ עצמו.
- **הטרנספורמציה מוכחת:** היפוך תווים + ציור-קדימה משמרים בדיוק את רצף הגליפים הוויזואלי של
  ציור-אחורה. לכן הנרמול = איפוס דגל + העברת עוגן לקצה השמאלי-baseline של ה-span:
  RIGHT+pair → g11 בגובה g10 (דאטה טהור, sanity 0.45–1.8× מול אומדן רוחב SHX);
  LEFT/BASE → הזזה שמאלה ב-cells×(19/21)×h×wf; CENTER/MIDDLE → איפוס דגל בלבד (סימטרי);
  style-inherited (אין 71 בישות) → הוספת 71=0 מפורש; רוטציה דרך הטלת וקטורים.
- **scope שמרני:** מנרמלים רק ישויות שההיפוך באמת רץ עליהן; גיאומטריה לא-מזוהה → לא נוגעים
  (Skipped נספר ללוג). digit-only backward values — לא בגרסה זו (מתועד כעתידי).
- ה-fontmap עודכן ידנית אצל המשתמש (techno_m/sivan_m/moran_m/michal_m → Hebrew Mono).

## בעיות שנפתרו
- **🔥 accoreconsole "לא יציב" — חידה בת 4 סשנים נפתרה:** הוא נתקע (3.8GB runaway) רק כשמופעל
  מ-Git Bash; אותה פקודה בדיוק דרך PowerShell/Process.Start רצה בשניות. כל אפיזודות ה"flakiness"
  (כולל 0051) היו כנראה זה. **חוק: להריץ accore רק מ-PowerShell/.NET.** עודכן memory.
- ה-classifier חסם הורדת LibreDWG — נפתר ממילא ע"י תיקון סביבת ההרצה של accore.
- Revit נעל את ה-DLLs בזמן deploy → hot-swap ב-rename (שינוי שם עובד על קובץ נעול) + copy חדש.
- `dumpshx.exe` (`D:\AutoCAD2027\AutoCAD 2027\Express\`) חילץ מטריקות SHX אמיתיות:
  techno_m header "21,7" (above/below), space advance 19 → תא/גובה = 19/21 = 0.905.

## מה לא עבד / צריך להיזהר
- **המסלול הראשון (פונט Mono) היה אבחנה שגויה** — שיפר רוחב אבל לא פתר את המיקום. המשתמש
  הוכיח בצילומים שההיסט קיים כבר בהכנסה הראשונה והכריח חפירה לקובץ עצמו. הפונט נשאר (שיפור
  נאמנות רוחב אמיתי), אבל הלקח: לא לסגור אבחנה לפני שמודדים את הקובץ עצמו.
- ezdxf: `Vec3[:2]` זורק TypeError — לגשת `.x/.y`; `pip install ezdxf` עובד; ניתוח DXF בפייתון מהיר.
- אסור per-string order detection בענף EN-typed — נשאר בתוקף (ההיפוך הלא-מותנה נכון).

## קבצים שנוצרו/שונו
**חדשים:**
- `src\Vitruvius.Core\Dwg\BackwardTextNormalizer.cs`
- `tests\Vitruvius.Core.Tests\BackwardTextNormalizationTests.cs`
- `fonts\build-hebrew-mono.py`, `fonts\Vitruvius_HebrewMono.ttf`
- `Vitruvius\_הסבר-שני-מנגנונים.html`, `Vitruvius\_mono-vs-proportional.png`
**שונו:**
- `src\Vitruvius.Core\Dwg\DxfTextReverser.cs` (pass 2.5 + histogram backwardNormalized/Skipped)
- `src\Vitruvius.Core\Fonts\FontRecommender.cs` (Mono routing + IsMonospaceHebrewShx)
- `src\Vitruvius.Core\Fonts\ShxFontMapWriter.cs` (IsRevitDefaultFont override + dedup)
- `tests\...\{FontCoverageTests,FontMapTests,ScanTests}.cs`
- `installer\Vitruvius.iss` (+Hebrew Mono TTF)
- `%APPDATA%\...\Revit 2024\shxfontmap.txt` (ידני, עם backup)
- DLLs פרוסים per-user `%APPDATA%\Autodesk\Revit\Addins\2024\Vitruvius\` (OLD\ ארכוב ×3)
- `D:\אדריכלות\...\בריכה\briha.dwg` שוחזר למקור (מה-bak) ואז תוקן בהצלחה ע"י המשתמש
- memory: `vitruvius-fix-safety-hardening.md` (root cause), `accoreconsole-cold-start.md` (Git Bash), `MEMORY.md`

## הצעד הבא
המשתמש אישר "עובד מצויין" על בריגה. פתוח: בדיקת הקובץ השני (שרטוט מלא עם באנר אלכסוני —
אותה קונבנציה, מכוסה ע"י הרוטציה) · digit-only backward (עתידי) · המתנה לפידבק לוטן דייטש.
