VitTeamAgents · Council Session

ישיבת מועצת הסוכנים

תאריך: 2026-06-13 · סטטוס: הושלמה · נוכחים: 9 סוכני domain (יועצים)

פתיחה — המנהל

המנהל · Authority 95

בוקר טוב. כינסתי את הישיבה כשבוע אחרי ישיבת ה-08 ביוני. כל אחד מ-9 יועצי ה-domain קיבל חלון הקשר נקי וסרק את הקוד והתיעוד בעצמו — שיווק, אדריכלות, אבטחה, Firebase, קונסטרוקציה, מערכות, מחקר-שוק, פיננסים ומוצר. הכלל היה כבכל פעם: כל ממצא חייב file:line, ו-15-20% מטענות P0 צפויות להיות הזיות. אימתתי כל P0/P1 שחזר לפני שנכנס לפרוטוקול.

השנה השבוע אינו רק "מה חולה". יותר מסוכן אחד חזר אליי עם אותה תובנה מטרידה: החלטות שכבר נפסקו — לא בוצעו. מפתח Gemini שסומן לביטול ב-08 ביוני עדיין חי; תיקיית Vitru\ שצוּותה לארכוב פעמיים — עדיין מצביעה ל-production. זו אינה בעיית-קוד, זו בעיית-משמעת. השופט יתייחס אליה בסוף.

שמונה דו"חות-תוכן + דו"ח-מוצר. אחרי הצגתם — דיון צולב ופסק מחייב.

סדר היום

ממצאים קריטיים — חוצי תחום

כל הממצאים כאן אומתו על ידי במו עיניי ב-file:line אחרי הדו"חות. סדר לפי חומרה.

P0
קלון-רפאים Vitru\ מצביע ל-vitpmis בproduction עם rules פתוחים לרווחה. Vitru\firebase.json = projectId: vitpmis; Vitru\firestore.rules:7 = allow read, write: if request.auth != null על {document=**}. firebase deploy אחד מתוך התיקייה הזו ידרוס את ה-rules המוקשחות של VitPMIS+VitruAgent (אותו פרויקט) ויחזיר דלף-צולב בין כל המשתמשים. צֻווה לארכוב פעמיים (06-10, 06-11) — עדיין חי.
דווח ע"י: מומחה Firebase + מנהל מוצר · אומת ✓
P0
VitruAgent — שיחה קולית ללא תקרה צד-שרת. mintRealtimeToken מנפיק טוקנים בלי rate-limit per-uid; orchestrate\admission.js (ה-"guard against surprise bills" בהגדרת עצמו) הוא skeleton שזורק not-implemented; mintRealtimeToken\index.js:166enforceAppCheck מושבת. הטוקן גם לא נעול-מודל. לולאת-לקוח פגומה / מפתח-שדלף = חיוב Gemini ללא תקרה.
דווח ע"י: יועץ מערכות + מנהל כספים + מומחה אבטחה · אומת ✓
P0
Vitruvius — היפוך-כפול הורס את טקסט היועץ, ואין שער שחוסם אותו ב-pipeline הידני. LinkSelectionDialog.cs:23IsSelected = true תמיד; FixStatusEvaluator.IsCurrentlyFixed משמש רק לצביעת badge ולא חוסם/מבטל סימון. לחיצה כפולה על "תקן טקסט" (או "בחר הכל") מהפכת שוב EN-typed — נזק בלתי-הפיך אם הגיבוי המקורי נמחק.
דווח ע"י: אדריכל בכיר · אומת ✓
P0
VitPermit — מוצר שמיני billable בלתי-נראה ל-source-of-truth. VitPermit\ קיים עם כלים חיים (DWF extractor), משרת לקוח אמיתי, ו-CLAUDE.md שלו מכריז חפיפת-ICP עם Vitruvius — אבל grep VitPermit D:\Vitruvius Ecosystem\CLAUDE.md = 0, אין VitPermit\brand\, אין ב-Brand Brains. מעמדו לא הוכרע. (גם Gizdurim\ קיים בלי brand.)
דווח ע"י: מנהל מוצר · אומת ✓
P0
כשל-ביצוע חוזר (meta). מפתח Gemini סומן לביטול ב-08 ביוני — ה-README בהסגר (_SECRETS-PENDING-REVOKE\) עדיין אומר "ממתין לביטול ידני". Vitru\ צֻווה לסגירה פעמיים. 3 מ-4 החלטות מועצת 06-11 לא בוצעו ביומיים. הסיכון אינו הממצא — הוא חוסר-האכיפה.
דווח ע"י: מנהל מוצר + מומחה אבטחה · אומת ✓
P1
VitruAgent — שם "VitPMIS" דולף במסכים הראשונים שמשתמש רואה. שם המוצר הוא "ויטרו". בפועל: main.dart:36,232 (title:'VitPMIS', footer), login_screen.dart:182 (כותרת מסך ההתחברות), tree_screen.dart:216, calendar_service.dart:60 ([VitPMIS] ביומן), notification_service.dart. rename-and-clone שלא נסגר.
דווח ע"י: מנהל שיווק · אומת ✓
P1
סודות בטקסט-גלוי על הדיסק ב-Vitruvius, בלי root .gitignore. Vitruvius\backend\.api-key.txt (32 תווים) — לא מכוסה ב-gitignore כלשהו; Vitruvius\backend\functions\.env מחזיק TELEMETRY_API_KEY. אין .gitignore בשורש האקוסיסטם — git init בשורש יכניס גם את קובץ-המפתח שבהסגר.
דווח ע"י: מומחה אבטחה + מומחה Firebase · אומת ✓
P1
VitSiteReport — תורי upload/transcription לא שורדים קריסת process. upload_queue_service.dart:64 מודה "not a process restart"; אין סורק re-enqueue ב-bootstrap. אדריכל במרתף ללא קליטה → Android הורג process → ממצאים על הדיסק בלי מי שיעלה אותם, ו-imageStoragePath מצביע לאובייקט חסר. בנוסף: התמלול נכתב completed ללא קשר להעלאת האודיו (transcription_queue_service.dart:236).
דווח ע"י: יועץ מערכות · אומת ✓ (חלקית — ראה ספקות)
P1
VitClip — storage.rules עם allow read: if true לא רשום ב-firebase.json, ואין rate-limit per-caller. VitClip\storage.rules:12 public-read; אין בלוק storage ב-firebase.json → לא נפרס בפועל. ה-backend מאמת SHARED_SECRET בלבד, בלי תקרת-נפח. (ה-secret עצמו כן ב-.gitignore — לא דליפה.)
דווח ע"י: מומחה Firebase + מנהל כספים + יועץ מערכות · אומת ✓
P1
VitVital — composite indexes חסרים מ-firestore.indexes.json. הקובץ ריק ("indexes": []), אך gym_session_screen.dart:101-104, exercise_history_sheet.dart:98 מריצים where(==)+where(>)+orderBy — דורש composite index. אם נוצר ידנית בקונסולה, הוא לא reproducible ל-deploy/פרויקט חדש.
דווח ע"י: מומחה Firebase · אומת ✓ (קיום ה-query; אם נוצר ידנית — ספק)
P1
Brand Brain של VitTeamAgents סותר את source-of-truth: "26 סוכנים" מול 23. _brand-brains-data.json = "26 עובדים / 26 סוכנים"; CLAUDE.md = "23 agents". domain.marketing_manager קורא את ה-Brand Brains — הוא יצטט מספר שגוי כלפי-לקוח.
דווח ע"י: מנהל מוצר · אומת ✓
P1
חפיפת ICP: Vitruvius ↔ VitSiteReport — אותו משרד בטא (לוטן דייטש), ו-Vitruvius מתומחר נמוך מה-value שלו עצמו. שני המוצרים מכוונים לאדריכל ישראלי 5-50 איש; ₪29/חודש משדר "תוסף זול" בעוד ה-ICP מצהיר "מציל deadline". שריפת משאב-המכירה היחיד על שני מוצרים בו-זמנית.
דווח ע"י: חוקר שווקים + מנהל מוצר
P2
Vitruvius — RestoreToOriginal משחזר ללא אטומיות. RestoreToOriginalCommand.cs:101 = File.Copy(overwrite:true) ב-path היחיד שמבטיח "חזרה למקור" — קריסה באמצע = קובץ-עבודה קטוע ש-Revit יסרב לטעון. תיקון של שורה אחת: AtomicFile.Copy.
דווח ע"י: אדריכל בכיר · אומת ✓
P2
Vitruvius — טקסט-עזרה חי מפנה לכפתור שכבר לא קיים. SettingsWindow.cs:81 אומר "...בלי צורך ללחוץ 'תקן ג'יבריש'" — אבל הכפתור עבר rename ל"תקן טקסט" (סשן 0048). המשתמש יחפש ולא ימצא.
דווח ע"י: מנהל שיווק · אומת ✓
P2
Vitruvius — MTEXT ארוך: כל מקטע (group 3 / group 1) מהופך בנפרד. DxfTextReverser.cs:224-269 — מילה עברית שנחצתה על גבול 250-תווים מתערבבת בתפר. היקף מוגבל (רק MTEXT שעובר 250 תווים), drift-בקצה לא כשל-ליבה.
דווח ע"י: קונסטרוקטור · ספק לאמת על קובץ-שדה

הדו"חות במלואם

מנהל שיווק· Marketing Manager Authority 64

נסרק

  • _brand-brains-data.json (7 VOICE-DNA/ICP/PROJECT-BRIEF — מקור-אמת)
  • חיפושי-רוחב: "גמרת", "Powered by", milestone codes, "telemetry" על כל .dart/.cs/.arb
  • VitruAgent\lib\main.dart · login_screen.dart · tree_screen.dart · services
  • VitSiteReport\lib\l10n\app_he.arb+app_en.arb · VitVital\lib\screens\ · Vitruvius\...\I18n\L.cs+SettingsWindow.cs

תצפיות

  • ה-Brand Brains עשירים ועקביים — טון, taglines, do/don't, אנטי-השראות לכל מוצר. תחזוקה גבוהה
  • VitSiteReport הבוגר ביותר: aboutPoweredBy="מבית Vitruvius Ecosystem" ✓, disclaimer ב-PDF תואם VOICE-DNA מילה-במילה, אין "גמרת" ב-UI חי
  • VitruAgent — מסכי הליבה אומרים "ויטרו" נכון, אבל ה-shell שעבר rename חלקי מ-VitPMIS עדיין חושף "VitPMIS"
  • VitPMIS / VitClip — לא נמצאו הפרות Brand Voice ב-UI חי

ביקורות

  • P1 — VitruAgent חושף "VitPMIS" במסך הראשון. login_screen.dart:182 (כותרת ההתחברות), main.dart:36 (title:'VitPMIS'), main.dart:232 (footer), tree_screen.dart:216 (תווית root), calendar_service.dart:60 (prefix [VitPMIS] ביומן המשתמש), notification_service.dart:16,101
  • P1 — Vitruvius SettingsWindow.cs:81 מפנה ל"תקן ג'יבריש" — הכפתור עבר rename ל"תקן טקסט" (L.cs:325)
  • P2 — VitVital שרידי-אנגלית: workouts_screen.dart:657 Text('WORKOUTS'); medical_screen.dart:442 "בטאב NUTRITION" בתוך משפט עברי
  • P2 — VitSiteReport app_en.arb:370 עדיין "anonymous usage telemetry" — VOICE-DNA אוסר "טלמטריה"
  • P2 — VitSiteReport\Reviews-Summary.html:329,354 מציג "גמרת סיור" כ-copy מאושר (מסמך ישן מלפני חוק "סיימת" — לא UI חי, אך מלכודת-העתקה)

ספקות / טענות לאמת

  • ה-tagline של Vitruvius ("סיימת לייבא — סיימת עם הג'יבריש") — לא נמצא ב-.cs חי, ייתכן רק ב-installer/release-notes
  • לא סרקתי HTML שיווקי חיצוני (landing/store/USB-docs) — ייתכנו דליפות jargon נוספות שם

המלצות

  • rename מלא ל-VitruAgent — 6 sites של "VitPMIS" → "ויטרו" (כולל calendar prefix + notification channel)
  • Vitruvius: SettingsWindow.cs:81 → "תקן טקסט"; grep פנימי לוודא שאין שאריות
  • VitVital: 'WORKOUTS' → "אימונים"; "בטאב NUTRITION" → "בטאב תזונה"

הערות לסוכנים אחרים

למנהל מוצר: ה-rename החלקי של VitruAgent הוא "clone-and-rename שלא הושלם" — גם ה-system prompt ב-gemini_service.dart:82 עדיין "for VitPMIS". מצביע ש-pivot המוצר לא נסגר.
שורה תחתונה: אין "גמרת" חי ב-UI (אין P0). שתי P1 ממוקדות + שלוש P2 קלות. ה-Brand Brains איכותיים — הפערים הם execution drift, לא אסטרטגיה.
אדריכל בכיר· Senior Architect Authority 78

נסרק

  • Vitruvius.Core\Verify\FixGuard.cs · Dwg\DwgReverseService.cs · DxfTextReverser.cs · BackwardTextNormalizer.cs
  • Io\AtomicFile.cs · State\{BackupDiscoveryService,FixStatusEvaluator}.cs · Dwg\ShxArchiveService.cs
  • Revit2024\Commands\{FixGibberishCommand,RestoreToOriginalCommand}.cs · Events\DwgReloadHandler.cs · UI\LinkSelectionDialog.cs

תצפיות

  • שרשרת הבטיחות בנויה היטב במקרה הרגיל: AtomicFile (File.Replace אטומי) + גיבוי timestamped לפני החלפת המקור
  • FixGuard.SizeRatioFloor (0.65) לא ניתן לכיבוי — שער "do-no-harm" נכון
  • ShxArchiveService באמת לא-הרסני — מעביר ולא מוחק; מחריג ltypeshp.shx; Restore לא דורס SHX שהמשתמש החזיר
  • FixStatusEvaluator מבוסס-תוכן (hash → גיבוי → mtime) עם הטיה בטוחה ל"תוקן"

ביקורות

  • P0 — היפוך-כפול הורס טקסט, אין שער ב-pipeline הידני. LinkSelectionDialog.cs:23IsSelected=true תמיד; IsCurrentlyFixed רק צובע badge, לא חוסם. ה-FixGuard.VerifyTextChange מדלג במכוון על EN-typed (FixGuard.cs:116) — בדיוק הענף הפגיע. auto-reload מוגן ב-mtime guard; הקליק הידני לא
  • P1 — Restore ללא אטומיות. RestoreToOriginalCommand.cs:101 = File.Copy(overwrite:true) — קריסה/lock באמצע = קובץ קטוע. צריך AtomicFile.Copy (קיים)
  • P1 — הגיבוי של ה-host DWG מצביע לקובץ שכבר ספג round-trip. אם המשתמש מריץ "תקן" שוב, הגיבוי החדש כבר איבד proxy/Civil objects. השחזור מגיע למקור רק כל עוד הגיבוי הישן קיים
  • P2 — BackwardTextNormalizer: אומדן רוחב SHX (19/21) נמדד על mono, מוחל על proportional. ענף LEFT/BASE ללא sanity-window (בניגוד ל-RIGHT) — היסט-מיקום על פונט פרופורציונלי
  • P2 — LooksLikeUtf8 (DxfTextReverser.cs:453) heuristic — DXF latin עם בית-גבוה בודד יסווג UTF-8 → ה-EN-typed reverse לא ירוץ בשקט

ספקות / טענות לאמת

  • האם FixGuard.VerifyTextChange מפיל תיקוני-Unicode לגיטימיים? לא אומת על drawing אמיתי
  • FixXrefs — xref משותף בין שני host-DWGs בשני סשנים יכול להיהפך פעמיים? ה-dedup הוא per-run בלבד
  • accoreconsole SAVEAS "2018" — מחזיר כל DWG ל-2018 ללא קשר לגרסת המקור. לא אומתה השלכה ויזואלית

המלצות

  • לחסום היפוך-כפול: IsCurrentlyFixed==true → skip/disable עבור EN-typed (P0 — הפגיעה הישירה ביותר בנכס האדריכל)
  • AtomicFile.Copy ב-Restore (שורה אחת)
  • לבדל את consultant-original משאר ה-snapshots + אזהרה כשהגיבוי המקורי כבר אינו זמין

הערות לסוכנים אחרים

למומחה אבטחה/correctness: ה-P0 הוא correctness bug עם נזק בלתי-הפיך-בפועל (אין undo אם הגיבוי נמחק). שווה אימות עצמאי — ראיתי רק את ה-callers שבדקתי.
לכל מי שבודק idempotency: RunSilently (auto-reload) מוגן ע"י mtime guard; Execute הידני לא. להפריד בין שני ה-entry points.
מומחה אבטחה· Security Authority 80

נסרק

  • 6 קבצי firestore.rules + 3 storage.rules
  • VitClip\backend\index.js (2252 שורות — SSRF, auth, secrets)
  • _SECRETS-PENDING-REVOKE\ · כל .gitignore/.env/.shared_secret/.api-key.txt · --dart-define ב-build scripts

תצפיות (חיובי)

  • VitClip SSRF מטופל היטב: safeFetch/assertPublicHost חוסמים IP פנימי/loopback + 169.254.169.254 (metadata server)
  • VitClip auth: timingSafeEqual עם בדיקת-אורך, secret מסרב לעלות אם חסר/דיפולטי/קצר
  • כל ה-Firestore rules נקיים מ-auth != null הישן — VitSiteReport path-scoped + anti-spoof; VitPMIS+VitruAgent allowlist-מייל + email_verified
  • המפתח שדלף הועבר נכון: VitruAgent\מפתח גמיני.txt כבר לא קיים; בהסגר ב-_SECRETS-PENDING-REVOKE\
  • VitruAgent dev-key = String.fromEnvironment (ריק ב-release → rethrow, אין fallback)

ביקורות

  • P1 — Vitruvius\backend\.api-key.txt לא ב-gitignore. 32 תווים (כנראה telemetry write-key); functions\.gitignore מכסה רק .env, ואין root Vitruvius\.gitignore
  • P2 — _SECRETS-PENDING-REVOKE\ לא מכוסה ב-gitignore כלשהו — בשורש האקוסיסטם; git init בשורש יכניס את קובץ המפתח
  • P1 (תפעולי) — המפתח שדלף עדיין לא בוטל בפועל. הסגר ≠ ביטול — הערך עדיין תקף אצל הספק (חוב מ-06-08)

ספקות / טענות לאמת

  • VitClip\backend\.env.yaml (SHARED_SECRET) — מכוסה ב-.gitignore (אומת). לא דליפה
  • firebase_options.dart עם AIzaSy... = Firebase Web key ציבורי, לא סוד — לא ממצא
  • VitSiteReport היעדר hasOnly ב-update = החלטה מודעת (CLAUDE 0044), לא P0

המלצות

  • צור root .gitignore ב-D:\Vitruvius Ecosystem\ עם דפוסי-סוד גלובליים (*secret*.txt, *api*key*.txt, .env*, _SECRETS-PENDING-REVOKE/, *.shared_secret)
  • השלם ביטול מפתח Gemini ב-AI Studio, ואז מחק את ההסגר
  • העבר .api-key.txt/TELEMETRY_API_KEY ל-Secret Manager / env

הערות לסוכנים אחרים

לתשתית/DevOps: אין root .gitignore — כל ההגנה על סודות מסתמכת על gitignore פר-פרויקט. root gitignore = הגנת-עומק זולה.
שורה תחתונה: אין P0 חדש באבטחה-נטו. הבסיס מוקשח (SSRF, auth, rules, הסגר). הפעולות הפתוחות תפעוליות: ביטול-בפועל של המפתח + כיסוי-gitignore.
מומחה Firebase· Firebase Authority 76

נסרק

  • 8 קונפיגורציות: VitClip, VitPMIS, Vitru, VitruAgent, Vitruvius/backend, VitSiteReport, VitVital
  • כל firestore.rules (8) + storage.rules (3) + firestore.indexes.json (8) + firebase.json/.firebaserc
  • כל ספריות functions + דפוסי queries בקליינטים

תצפיות

  • שלושה פרויקטים חולקים vitpmis, לא שניים: VitPMIS, VitruAgent, וגם Vitru\ — קלון כמעט-מלא
  • רק VitPMIS הוא git repo. ה-rules ה"קנוניות" של VitruAgent לא תחת version control
  • כל firestore.indexes.json ריקים חוץ מ-VitClip

ביקורות

  • P0 — Vitru\firestore.rules:8 פרוץ + firebase.jsonvitpmis. firebase deploy מתוך Vitru\ ידרוס את ה-rules המוקשחות. נראה זנוח (26 במאי) — אבל הסיכון נשאר
  • P1 — VitVital composite indexes חסרים. gym_session_screen.dart:101-104, :507-510, exercise_history_sheet.dart:98where(==)+range+orderBy דורש index; לא ב-indexes.json
  • P1 — VitClip storage.rules קיים אך לא ב-firebase.json. digests/{file} = allow read: if true. לא נפרס; כשייפרס — public-read
  • P1 — Vitruvius\backend\functions\.env:1 = TELEMETRY_API_KEY בטקסט-גלוי (ב-gitignore, אך התיקייה אינה repo — secret על דיסק)
  • P2 — VitVital functions\ חסר entry point (רק generateSummary.ts, אין package.json, לא ב-firebase.json)
  • P2 — .firebaserc ריקים (VitVital/VitPMIS/VitSiteReport) — deploy ללא --project עלול לפנות לפרויקט שגוי

ספקות / טענות לאמת

  • האם indexes של VitVital כבר נוצרו ידנית בקונסולה? אם ה-queries עובדים היום — כנראה כן, אך לא reproducible
  • האם Vitru\ פעיל או זנוח? אם זנוח — ה-P0 תיאורטי; אם פעיל — חמור
  • billing account משותף? לא ניתן לאמת מקומית

המלצות

  • למחוק/לנטרל את Vitru\ (P0) — הסיכון היחיד שדורס בידוד פרוס בפקודה אחת
  • להוסיף 3 composite indexes של VitVital ל-indexes.json
  • להכריע VitClip storage (לרשום + signed-URL, או למחוק storage.rules)
  • TELEMETRY_API_KEY → Functions secret; למלא .firebaserc default

הערות לסוכנים אחרים

לאבטחה: ה-rules עצמן כתובות היטב. החור היחיד הוא העותק השלישי הפרוץ (Vitru\) על אותו vitpmis — בידוד מצוין שניתן לדרוס בטעות.
לארכיטקטורה: שיתוף vitpmis בין 3 אפליקציות הוא חוב — כל collection חדשה דורשת עדכון rules ידני בכל העותקים, אחרת deny-by-default → כשל-קריאה שקט.
קונסטרוקטור· Structural Engineer Authority 72

נסרק

  • Vitruvius: Verify\FixGuard.cs · Dwg\DwgReverseService.cs · DxfTextReverser.cs · BackwardTextNormalizer.cs · Hebrew\HebrewOrderDetector.cs
  • VitSiteReport: models\finding.dart · services\pdf_service.dart · annotate_screen.dart (חלקי)

תצפיות

  • ה-pipeline של ה-DWG מגן על עצמו במכוון: גיבוי תמיד, כתיבה אטומית, ניקוי scratch ב-finally, שער "do-no-harm" שמרני שלא חוסם EN-typed (by-design)
  • הבחירה ש-data-loss = לא-חוסם אבל מסומן+מגובה עקבית עם החלטת המשתמש (0054)

ביקורות

  • P1 — MTEXT ארוך: כל מקטע (group 3/1) מהופך בנפרד. DxfTextReverser.cs:61-64,224-269 — מילה עברית שנחצתה על גבול 250-תווים מתערבבת בתפר. שכיח בהערות/מפרטים על MTEXT בשרטוטי בנייה
  • P1 — DIMENSION/MTEXT override לא יקבל position-fix של BACKWARD. BackwardTextNormalizer.cs:163-166 מנרמל מיקום רק ל-TEXT/ATTRIB/ATTDEF; ה-reverser מהפך גם MTEXT/DIMENSION → טקסט הפוך נכון אך מיקום מוסט
  • P2 — בדיקת data-loss סופרת בייטים בלבד, מתעלמת מ-entity-count. DwgReverseService.cs:191-198 אוסף InputEntities אך CheckDwgLoss שופט רק SizeRatio — proxy דחוס = false-negative
  • P2 — VitSiteReport: ה-PDF חסר drawingRef/sheetRef. finding.dart:78-154 — ממצא בלי הפניה לגיליון מאבד אמינות מול היזם; carry-over מתבסס רק על כותרת+תמונה

ספקות / טענות לאמת

  • MTEXT עברי >250 תווים קיים בקבצי השדה? אם רוב הלייבלים TEXT קצרים — ה-P1 תיאורטי
  • הלייבלים BACKWARD בשרטוטי בריגה הם MTEXT/DIMENSION או רק TEXT? (0055 אימת רק TEXT)
  • RecoverCp862 false-positive על מפרט עם זוג בייטים גבוהים לא-עבריים — סביר שלא, לא הוכח

המלצות

  • MTEXT: לאחד מקטעי group-3+1 → להפוך → לפצל לפי 250; או לכל הפחות לוג dxf.reverse.histogram כשמזוהה MTEXT עברי רב-מקטעי
  • BACKWARD ל-MTEXT/DIMENSION — רק אחרי אימות חי שהגיאומטריה (10/11) זהה
  • VitSiteReport: שדה אופציונלי drawingRef ב-Finding (schemaVersion קיים) — להצהיר בתחילת סשן

הערות לסוכנים אחרים

לאדריכל בכיר: ה-P2 שלי על drawingRef מחזק את ה-location-hierarchy שעלה ב-0043. שווה הצעה משותפת ל-schema.
למתאם: שתי הביקורות הוודאיות (MTEXT independent-reverse, entity-count לא-נצרך) אינן חוסמות שילוח — drift-בקצה, לא כשל-ליבה. ה-pipeline על TEXT/EN-typed איתן.
יועץ מערכות· Systems Consultant Authority 70

נסרק

  • VitClip backend (2252 שורות — Cloud Run, yt-dlp, Vertex, audio/chat endpoints) + Dockerfile + .env.yaml
  • VitruAgent voice: gemini_live_client.dart · agent_screen.dart · mintRealtimeToken\index.js · orchestrate\
  • VitSiteReport: upload_queue_service.dart · transcription_queue_service.dart; VitVital: camera_service.dart · health_connect_service.dart

תצפיות

  • תורי upload/transcription מיישמים token-based supersession נקי — תשתית עמידה ברמת in-process
  • VitClip backend: SSRF-guard, stream-cap, SIGTERM cleanup, startup sweep, URL cache — בשלות גבוהה
  • camera_service.dart = דוגמה טובה ל-process-death recovery (retrieveLostData+pending tag)
  • רכיבי orchestrate\ = skeletons שזורקים not implemented — לא מחווטים. החיווט הקולי החי עובר ישירות מהלקוח ל-Gemini, בלי admission/circuit-breaker צד-שרת

ביקורות

  • P0 — אין תקרה צד-שרת על שיחות קוליות. התקרות (5דק'/סשן, 20דק'/יום) חיות רק בלקוח; mintRealtimeToken מנפיק uses:1 TTL 25דק' ללא rate-limit per-uid; admission.check() = not implemented; enforceAppCheck כבוי (mintRealtimeToken\index.js:166)
  • P0 — הטוקן לא נעול-מודל. liveConnectConstraints נדחה ע"י ה-REST surface → הטוקן מאפשר כל מודל Live; טוקן דולף יכול לבחור מודל יקר יותר
  • P1 — VitClip URL-cache משותף בין משתמשים (ממופתח לפי URL בלבד) — דליפת transcript חוצת-משתמש אם ייפתח מעבר ליחיד
  • P1 — VitSiteReport: התמלול "completed" מנותק מהעלאת האודיו. transcription_queue_service.dart:236-253 כותב completed מיד, ללא קשר ל-upload נפרד שעלול להיכשל
  • P1 — שני התורים נמחקים ב-process restart, אין re-enqueue. upload_queue_service.dart:64 מודה זאת; אדריכל במרתף → process kill → ממצאים על הדיסק בלי מי שיעלה
  • P1 — VitClip: מודל hard-coded ללא fallback. אם Google ידיח את gemini-2.5-flash (קרה בעבר 404) — כל בקשה נופלת בו-זמנית
  • P2 — VitruAgent: דליפת dart-define בלי enforcement. אין assert(!kReleaseMode || _kDevOnlyApiKey.isEmpty)

ספקות / טענות לאמת

  • לא קראתי routing.js/session_affinity.js במלואם — ייתכן rate-limit עקיף; אמת ב-Firestore rule נפרד
  • לא קראתי bootstrap/router של VitSiteReport — אמת ב-grep uploadQueueProvider/enqueue ב-app-start
  • health_connect_service.dart לא הניב דפוסי timeout/retry — היעדר-ממצא, לא ביקורת

המלצות

  • VitruAgent — token-bucket ב-Firestore ב-mintRealtimeToken (per-uid + daily-minute) לפני משתמש שני
  • VitSiteReport — סורק re-enqueue ב-bootstrap לתורי upload/transcription
  • VitClip — רשימת fallback-models (כמו _imageModelCandidates ב-VitVital)

הערות לסוכנים אחרים

לאבטחה: שני ה-P0 ב-VitruAgent הם וקטור abuse/cost, לא רק resilience. enforceAppCheck כבוי = ה-callable מוגן רק ב-allowlist-email, ללא הוכחת-לקוח.
לכספים: ה-"surprise bill" ב-admission.js:5 ממשי כל עוד admission לא מומש. כדאי לכמת תקרת-חשיפה (25דק' × מחיר Live × קצב mint).
חוקר שווקים· Market Researcher Authority 66

נסרק

  • _brand-brains-data.json — PROJECT-BRIEF+ICP+VOICE-DNA של 7 מוצרים (אומת מול קבצי המקור)
  • שורות תמחור ב-Vitruvius/PROJECT-BRIEF.md:21 + VitSiteReport

תצפיות

  • שני "מוצרי שוק" אמיתיים בלבד: Vitruvius + VitSiteReport (ICP חיצוני + תמחור + משרד בטא). VitClip מצהיר "אישי, לא מסחרי". VitruAgent/VitTeamAgents = פנימי
  • משרד בטא יחיד לשני מוצרים: לוטן דייטש מופיע כבטא-ראשון לשניהם; ICP כמעט זהה
  • בידול טכני חזק ב-Vitruvius (DWG בינארי, 3 קידודי עברית, xref nested) — הנכס התחרותי החזק ביותר
  • Anti-positioning עקבי: הימנעות מ-"Powered by AI" — נכון מול קהל ישראלי ספקן

ביקורות

  • P0 — חפיפת ICP + קניבליזציה של ערוץ בטא. Vitruvius ↔ VitSiteReport, אותו אדריכל, אותו משרד. הצגה ראשונה מבולבלת ("פלאגין תיקון או אפליקציית פיקוח?")
  • P0 — תמחור Vitruvius ₪29/חודש נמוך מדי. ה-ICP עצמו מזהיר "מחיר נתפס כ'כלי תיקון'". הערכת שוק, confidence 70%: כלי שחוסך שעות מצדיק ₪49-69 או per-office flat (₪199-299)
  • P1 — VitVital ICP צר מאוד (תלוי מאזני Xiaomi S400 + בדיקות דם + מתאמן). TAM ישראלי אלפים בודדים. confidence 75%
  • P1 — VitPMIS בלי moat מול Monday (חברה ישראלית עם RTL מלא ותקציב). "למה לא Notion חינם?" בלי תשובה. confidence 65%
  • P1 — VitruAgent: per-minute סותר את "מדבר שעות". ה-ICP מודה בעלות; ה-BRIEF מבטיח שימוש רציף
  • P2 — VitTeamAgents עברית-first מצמצם TAM בשוק orchestration גלובלי-אנגלי (LangChain/CrewAI)
  • P2 — Vitruvius "Unknown Publisher" = friction conversion ברגע מכירה רחבה

ספקות / טענות לאמת

  • טווח תמחור פלאגיני Revit בישראל — confidence 60%. ייתכן ש-Vitruvius הוא קטגוריה-של-אחד (מצדיק תמחור גבוה יותר)
  • TAM של "בעלי S400 + מתאמנים" — ניחוש confidence 50%
  • האם לוטן מקבל שני מוצרים בכוונה (cross-sell) או באג? לאמת עם הבעלים
  • מתחרה ישיר ישראלי ל-VitSiteReport — confidence נמוך שאני יודע את כל השוק

המלצות

  • לפצל ציר-זמן של בטא Vitruvius vs VitSiteReport — לא באותו שבוע
  • לבחון תמחור Vitruvius כלפי מעלה — ₪29 מתחת ל-value שה-ICP עצמו מצהיר
  • להכריע מפורשות אילו מוצרים = הכנסה (Vitruvius+VitSiteReport) ואילו lifestyle/פנימי

הערות לסוכנים אחרים

לכספים: ₪29 נמוך מדי + per-minute של VitruAgent הם שלך לעומק — אני סימנתי כיוון-שוק, אתה צריך את היחידה-הכלכלית.
למוצר: חפיפת ICP על אותו לקוח-בטא + VitPMIS בלי moat = החלטות תיק-מוצרים, לא שיווק.
מנהל כספים· Finance Authority 74

נסרק

  • VitClip: backend\index.js (כל ה-routes) + .env.yaml
  • VitVital: gemini_service.dart · ai_usage_service.dart · gemini_image_cache.dart
  • VitruAgent: gemini_live_client.dart · mintRealtimeToken\index.js · agent_screen.dart · agent_prefs.dart
  • 7 קבצי PROJECT-BRIEF.md (שורות תמחור)

תצפיות (מה גודר טוב)

  • VitClip בוגר: MAX_DURATION_SEC=3600, MAX_FILESIZE=50M, timeout 4דק', cache 60דק', MEDIA_RESOLUTION_LOW, מסלול audio-only (~32 vs ~258 tok/sec)
  • VitVital: GeminiImageCache (FNV-1a, אפס re-bill) + AiUsageService + חסם quota (gemini_service.dart:275 — 429 זורק GeminiQuotaException ולא נופל בשקט ל-Firebase בתשלום)
  • VitruAgent: המפתח עבר ל-secret; ephemeral token (single-use, ≤25דק'); 3 שכבות cost-cap על הקול (client-side)

ביקורות

  • P1 — VitClip ללא rate-limit/daily-budget per-caller. checkAuth מאמת secret בלבד; ה-caps per-request, לא per-volume. הערכה: 10K קריאות זדוניות ≈ ~$30 + Cloud Run egress
  • P2 — VitVital ai_usage_service.dart:22freeTierDailyLimit=1500 מספר-תצוגה קשיח שעלול להיות לא מדויק (רק UI; ה-guard האמיתי תקין)
  • P2 — VitruAgent daily-cap client-side per-device (agent_screen.dart:496) — reinstall מאפס; mintRealtimeToken לא סופר שימוש. התקרה האמיתית = TTL 25דק' של הטוקן בלבד
  • P2 — VitClip drift defaults (index.js:23-24 = gemini-2.0-flash@europe-west1 מול env 2.5-flash@us-central1) — env מנצח, אך deploy ללא env-file ייפול בשקט

ספקות / טענות לאמת

  • מכסת AI Studio החינמית 1500/יום — לא אומת מול ai.google.dev הרשמי (משתנה לעיתים, RPM+RPD)
  • תמחור gemini-2.5-flash (~$0.30/1M input) — לא אומת; audio/video מתומחר שונה
  • TTL מקסימלי של ephemeral token (הקוד מניח 30דק') — לא אומת מול ה-endpoint

המלצות

  • daily-budget global ל-VitClip backend (הדפוס כבר קיים אצלכם ב-VitruAgent — להעתיק)
  • ליישר defaults בקוד VitClip למודל/region שבאמת רצים
  • כשמוצר עובר ממשתמש-יחיד למסחרי — להעביר את כל ה-caps מ-client-side ל-server-side per-uid

הערות לסוכנים אחרים

לאבטחה: mintRealtimeToken עם enforceAppCheck מושבת — כל caller מאומת-allowlist יכול למתוח טוקנים, אין הגנת App Check.
למוצר: VitClip+VitruAgent הם "burn pure" מוצהרים — אין מסלול החזר-עלות. החלטה מודעת לשלב הנוכחי, אבל כל קריאת Gemini היא הוצאה נטו על הבעלים.
מנהל מוצר· Product Manager Authority 82

נסרק

  • מבנה התיקיות המלא של D:\Vitruvius Ecosystem\ (top-level)
  • _brand-brains-data.json (7 Brand Brains) · VitPermit\CLAUDE.md · Vitru\ מול VitruAgent\
  • pubspec.yaml של 4 אפליקציות מול גרסאות מוצהרות · _council-meeting-2026-06-11.html (ביצוע ההחלטות)

תצפיות

  • scope מוצהר = 7 מוצרים; הדיסק = 8 מוצרים פעילים + קלון נטוש (Vitru\) + Gizdurim\
  • מועצת 06-11 כבר זיהתה את VitPermit ואת Vitru — אף החלטה לא בוצעה ביומיים. כשל-ביצוע חוזר, לא ממצא חדש
  • VitruAgent (Flutter, קולי) ו-VitTeamAgents (Python, תיאום) מוצרים נבדלים — אין קניבליזציה (רק דמיון-שם)

ביקורות

  • P0 — Vitru\ קלון-רפאים חי → vitpmis. הוראת-סגירה שלישית (06-10, 06-11) שלא בוצעה. firebase deploy בטעות ידרוס rules+hosting
  • P0 — VitPermit מוצר-8 billable בלתי-נראה. grep VitPermit CLAUDE.md=0, אין brand, לא ב-Brand Brains. ה-CLAUDE.md שלו מכריז חפיפת-ICP עם Vitruvius (אותו TAM 200-280, אותו צבע)
  • P1 — drift גרסה VitruAgent: CLAUDE מצהיר v8, pubspec.yaml = 1.0.5+11 (3 builds לא-מתועדים)
  • P1 — Brand Brain "26 סוכנים" מול 23. _brand-brains-data.json stale; marketing_manager יצטט מספר שגוי
  • P2 — VitClip drift + digest: pubspec=0.1.0+8 (CLAUDE תיעד +6), firebase deps לפיצ'ר digest לא-מתועד פורמלית

ספקות / טענות לאמת

  • VitClip digest — האם נכתב קוד בפועל או deps-only? אם מומש → P1 ולא P2
  • Vitruvius\PLAN.md מעודכן ל-0055? לא נפתח
  • VitVital drift (v40→v41) נראה נסגר ב-CLAUDE.md — לא ביקורת פתוחה

המלצות — סדר עדיפויות

  • 1. (היום) לסגור את Vitru\ סוף-סוף — סריקת-סוד → מחיקת firebase.json+rules_ARCHIVE\
  • 2. (השבוע) להכריע מעמד VitPermit. המלצה: sub-tool/internal billable תחת Vitruvius (נמנעת קניבליזציה על אותו ICP/TAM/צבע). בכל מקרה — לתעד ב-source-of-truth + brand
  • 3. לתקן "26→23 סוכנים" ב-Brand Brain
  • 4. לסנכרן VitruAgent CLAUDE → +11; לאכוף gate ה-bump-version בפועל
  • 5. לתעד VitClip digest + decision local→Firestore

הערות לסוכנים אחרים

לאבטחה/Firebase: Vitru\firebase.json ו-VitruAgent\firebase.json שניהם → vitpmis. ודאו שאין הרשאות deploy מ-Vitru, ושסריקת-הסוד מכסה את Vitru\backend\ לפני ארכוב.
למנהל/שופט: הדפוס המרכזי השבוע אינו ממצא חדש אלא failure-to-execute — 3 מ-4 החלטות 06-11 לא בוצעו. ההמלצה: לצרף owner+due+verification לכל החלטה, ולוודא ביצוע בתחילת הישיבה הבאה לפני דיון בחדש.

דיון צולב — סוכנים שמדברים זה עם זה

הנקודות שבהן יותר מסוכן אחד נגעו באותו עניין, או שסוכן הציע ביקורת לחברו.

מומחה Firebase מנהל מוצר
הסכמה מלאה — Vitru\ הוא ה-P0 השקט המסוכן ביותר. Firebase מסביר את הווקטור הטכני (deploy ידרוס בידוד פרוס על vitpmis); מנהל מוצר מסביר שזו הוראת-סגירה שלישית שלא בוצעה. לא בעיה חדשה — כשל-משמעת.
יועץ מערכות מנהל כספים מומחה אבטחה
שלושתם על אותו וקטור ב-VitruAgent. מערכות: admission.js skeleton + טוקן לא-נעול-מודל. כספים: אין ספירת-טוקנים צד-שרת, התקרה היחידה היא TTL. אבטחה: enforceAppCheck כבוי. זו בעיה אחת בשלושה פנים — תקרה צד-שרת ב-mintRealtimeToken פותרת את כולן.
אדריכל בכיר קונסטרוקטור
שניהם על שלמות-הנתון ב-Vitruvius, מזוויות שונות. אדריכל: היפוך-כפול בלי שער (P0, נזק בלתי-הפיך). קונסטרוקטור: MTEXT/DIMENSION מקבל היפוך אך לא position-fix (P1, drift-בקצה). ה-pipeline על TEXT/EN-typed איתן — הסיכון בקצוות ובחזרתיות.
מומחה אבטחה מומחה Firebase
הסכמה — סודות-על-דיסק + היעדר root .gitignore. אבטחה: .api-key.txt חשוף, וההסגר לא מכוסה אם git init בשורש. Firebase: TELEMETRY_API_KEY ב-.env. שניהם דורשים root gitignore + מעבר ל-Secret Manager.
יועץ מערכות מומחה Firebase / PDF
אזהרה על VitSiteReport: ה-de-sync בין שני התורים (transcript completed אך audio לא הועלה) יוצר Finding לא-עקבי שמגיע ל-PDF. שווה לוודא ש-FindingImageCache מכסה גם אודיו חסר ב-Storage, לא רק תמונות.
חוקר שווקים מנהל כספים מנהל מוצר
הסכמה משולשת — תמחור. מחקר: ₪29 של Vitruvius מתחת ל-value, ו-VitVital/VitruAgent בלי תמחור. כספים: "burn pure" בלי מסלול-החזר. מוצר: צריך להכריע מי הכנסה ומי lifestyle. ההמלצה המשותפת: שורת-תמחור מפורשת לכל מוצר billable לפני בטא משלמת.
מנהל שיווק מנהל מוצר
הסכמה — ה-rename של VitruAgent לא נסגר. שיווק: 6 sites של "VitPMIS" במסכים הראשונים. מוצר: גם system-prompt עדיין "for VitPMIS" — clone-and-rename שלא הושלם, סימפטום ל-pivot מוצר פתוח.
מנהל מוצר מנהל שיווק
הסכמה — Brand Brain stale. "26 סוכנים" בעוד source-of-truth = 23. שניהם מזהירים: domain.marketing_manager קורא את ה-Brand Brains, ולכן יצטט מספר שגוי כלפי-לקוח. תיקון של דקה, השפעה אמיתית.
חוקר שווקים אדריכל בכיר / מנהל מוצר
חזרה הדדית — חפיפת ICP Vitruvius↔VitSiteReport. מחקר: אותו משרד בטא, הצגה מבולבלת. מוצר: VitPermit מוסיף שלישי-באותו-ICP. שלושתם על אותו אדריכל ישראלי — צריך תזמון רצף, לא מקביל.

פסק השופט — החלטות מחייבות

השופט · Authority 92

שמעתי 9 דו"חות. השנה אני פותח בתקדים: שלוש מהחלטות מועצת 06-11 לא בוצעו. מנהל המוצר אימת זאת בעצמו. לכן הפסק הראשון אינו על קוד אלא על משמעת.

החלטה 0 — Verification gate. כל החלטה בפרוטוקול זה נושאת owner + due + מבחן-אימות. בתחילת הישיבה הבאה — בדיקת-ביצוע לפני כל דיון בחדש. החלטה שלא בוצעה תיפתח מחדש כ-P0 עם escalation.

החלטה 1 — Vitru\ נסגר היום. זו הוראה שלישית. סריקת-סוד ל-Vitru\backend\ → מחיקת firebase.json ו-firestore.rules (מנטרל את וקטור ה-deploy ל-vitpmis) → העברה ל-_ARCHIVE\Vitru-pre-rename\. מבחן-אימות: Vitru\firebase.json לא קיים.

החלטה 2 — VitruAgent freeze נמשך + מורחב. שלושה סוכנים זיהו את אותו וקטור (אין תקרה צד-שרת + טוקן לא-נעול-מודל + AppCheck כבוי). אסור הרחבה מעבר למשתמש-יחיד עד: (א) token-bucket per-uid + daily-minute-cap ב-mintRealtimeToken; (ב) enforceAppCheck:true. בנוסף — המפתח שבהסגר חייב ביטול-בפועל היום (חוב מ-06-08, שבוע).

החלטה 3 — VitPermit מעמד מוכרע: sub-tool תחת Vitruvius. מקבל את מנהל המוצר. לא מוצר מסחרי-8 עצמאי (חפיפת ICP/TAM/צבע עם Vitruvius = קניבליזציה). חובה בכל מקרה: כניסה ב-CLAUDE.md הראשי. אם בעתיד יהפוך מסחרי — אז brand מלא.

החלטה 4 — Vitruvius double-reverse הוא חוסם-שילוח. מקבל את האדריכל. אסור בטא ללוטן דייטש עד שה-pipeline הידני חוסם היפוך EN-typed שכבר-תוקן (IsCurrentlyFixed==true → skip/disable). זה נזק בלתי-הפיך לנכס המקצועי. בנוסף — AtomicFile.Copy ב-Restore (שורה אחת).

החלטה 5 — סדר הבטא: VitSiteReport ראשון, Vitruvius שבוע אחריו. חוזר על פסק 06-08, כי החפיפה עדיין לא נפתרה. שניהם בו-זמנית למשרד יחיד = פידבק מבולבל. מחקר-השוק צודק.

החלטה 6 — root .gitignore לאקוסיסטם. דפוסי-סוד גלובליים (*secret*.txt, *api*key*.txt, .env*, _SECRETS-PENDING-REVOKE/, *.shared_secret) + הוספת .api-key.txt של Vitruvius. הגנת-עומק זולה לפני כל git init עתידי.

החלטה 7 — drift תיעוד. לתקן "26→23 סוכנים" ב-Brand Brain, ולסנכרן VitruAgent CLAUDE → +11. ה-gate של bump-version ייאכף — לא יוגדר build חדש בלי עדכון CLAUDE באותו סשן.

זה סוף הישיבה.

פעולות מיידיות

סדר עדיפויות לפי החלטות השופט. כל פעולה עם בעלים + מועד + מבחן-אימות.

סגור את Vitru\. סריקת-סוד → מחק Vitru\firebase.json + Vitru\firestore.rules → העבר ל-_ARCHIVE\Vitru-pre-rename\. אימות: Vitru\firebase.json לא קיים.
בעלים: בעל-הריפו + מומחה Firebase · מועד: היום
בטל בפועל את מפתח Gemini ב-AI Studio (חוב מ-06-08), ואז מחק את _SECRETS-PENDING-REVOKE\vitruagent-gemini-key-REVOKE-2026-06-08.txt. אימות: ה-key מסומן revoked בקונסולה.
בעלים: בעל-הריפו · מועד: היום
VitruAgent — תקרה צד-שרת לפני משתמש שני. token-bucket per-uid + daily-minute-cap ב-mintRealtimeToken + enforceAppCheck:true (mintRealtimeToken\index.js:166). אימות: קריאה בלולאה נחסמת.
בעלים: מומחה Firebase + יועץ מערכות · מועד: לפני הרחבה
Vitruvius — חסום היפוך-כפול. ב-FixGibberishCommand/LinkSelectionDialog.cs:23IsCurrentlyFixed==true → IsSelected=false + checkbox מושבת עבור EN-typed. חוסם בטא ללוטן. אימות: לחיצה כפולה לא הופכת קובץ שכבר-תוקן.
בעלים: מפתח ראשי · מועד: לפני בטא Vitruvius
צור root .gitignore ב-D:\Vitruvius Ecosystem\ עם דפוסי-סוד גלובליים + *.api-key.txt. אימות: git check-ignore תופס את Vitruvius\backend\.api-key.txt.
בעלים: DevOps · מועד: היום
הכרע VitPermit כ-sub-tool תחת Vitruvius — הוסף כניסה ל-D:\Vitruvius Ecosystem\CLAUDE.md הראשי (מעמד + אין-brand-בשלב-זה). אימות: grep VitPermit CLAUDE.md > 0.
בעלים: מנהל מוצר · מועד: השבוע
VitruAgent rename מלא: 6 sites של "VitPMIS" → "ויטרו" (main.dart:36,232, login_screen.dart:182, tree_screen.dart:216, calendar_service.dart:60, notification_service.dart). אימות: grep VitPMIS VitruAgent\lib = 0 ב-UI.
בעלים: מפתח ראשי + מנהל שיווק · מועד: לפני build הבא
VitSiteReport — re-enqueue ב-bootstrap. סורק שמוצא Findings עם imageStoragePath + קובץ מקומי קיים + אובייקט Storage חסר → re-enqueue. + סנכרן transcript completed עם הצלחת upload. אימות: kill-process באמצע upload → הקובץ עולה בעלייה הבאה.
בעלים: יועץ מערכות + מפתח ראשי · מועד: לפני בטא שדה
VitClip — הכרע storage + daily-budget. רשום storage.rules ב-firebase.json עם signed-URL (או מחק); הוסף מונה-יומי per-caller ל-backend. אימות: אין read:if true פרוס; מעל הסף → 429.
בעלים: מומחה Firebase + מנהל כספים · מועד: השבוע
VitVital — הוסף 3 composite indexes (workouts: isDraft + startTime) ל-firestore.indexes.json + deploy. אימות: firebase deploy --only firestore:indexes רושם אותם.
בעלים: מומחה Firebase · מועד: סוף השבוע
תקן drift תיעוד: "26→23 סוכנים" ב-_brand-brains-data.json (PROJECT-BRIEF+ICP של vitteamagents); סנכרן VitruAgent CLAUDE → +11; אכוף gate bump-version. אימות: Brand Brain אומר 23.
בעלים: מתעד גרסאות + מנהל מוצר · מועד: הסשן הבא
תזמן בטא רצף ללוטן דייטש — VitSiteReport ראשון, Vitruvius שבוע אחריו (לא מקביל). שקול תמחור Vitruvius כלפי מעלה (₪49-69 או per-office). אימות: שני תאריכי-שליחה נפרדים ביומן.
בעלים: מנהל מוצר + חוקר שווקים · מועד: השבוע
תיקוני P2 ל-polish: Vitruvius SettingsWindow.cs:81 → "תקן טקסט"; VitVital 'WORKOUTS'→"אימונים" + "בטאב NUTRITION"→"בטאב תזונה"; Vitruvius AtomicFile.Copy ב-Restore. אימות: grep נקי.
בעלים: מפתח ראשי + מנהל שיווק · מועד: הסשן הבא