ה
ה·סטודיו

להחלטה

פריטים שמחכים להחלטה שלך, של דולב, או של שניכם. בנוסף - קונפליקטים שזוהו אוטומטית במערכת. כל פריט סגור משתחרר לפעולה במקום אחר.

3
דחוף
8
לפי זמן
2
חסומים
20
קונפליקטים

דחוף (3)

כתובת קבועה לאתר הסטודיו

דחוף שניהם infra

כיום ה-URL הוא ephemeral trycloudflare.com שמתחלף בכל restart של cloudflared (כבר קרה ב-2026-05-13 ו-2026-05-14). אין כתובת יציבה לשתף עם לקוחות.

אופציות:
Cloudflare Named Tunnel חינם - דורש domain (קיים? יש לדולב dolev-dashboard?). יציב, מהיר, אותו datacenter.
Tailscale Funnel חינם עד 3 משתמשים - כתובת .ts.net אוטומטית. תוך 5 דק'. גישה רק דרך Tailscale auth.
domain חדש + reverse proxy $10/שנה - studio.inbal-del.com או דומה. גמיש לעתיד.
המלצה שלי: Cloudflare Named Tunnel - אם יש דומיין זמין, אפס עלות + מהיר ביותר. אם אין, Tailscale Funnel בתור hold-over עד שתחליטו על domain.

BRIGHTDATA credentials rotation

דחוף שניהם security

blast radius גבוה - מ-handoff 2026-05-14. ה-API key + 2 proxy passwords ב-~/.config/studio/api-keys.env. ייתכן ש-leaked דרך /tmp scripts ישנים.

אופציות:
Inbal+דולב יחד: login → regenerate → update vault → restart Flask 30 דק' - תהליך מוסבר בפרטים ב-backlog item URGENT 1
המלצה שלי: לבצע בשבוע הקרוב. עד אז - לא להשתמש ב-domain-intelligence skill מ-public.

ניקוי /tmp scripts ישנים עם credentials

דחוף ענבל security

/tmp/send-studio-email-old-2026-05-11.py + /tmp/send-studio-publish-2026-05-13.py - world-readable עם credentials. ענבל ביקשה לשמור היסטוריה.

אופציות:
מחיקה מיידית - אובדן היסטוריה אבל הכי בטוח
העברה ל-~/.config/studio/archive/ + 600 perms - שומר היסטוריה, חוסם world-read
השארה כפי שהוא - סיכון נמשך
המלצה שלי: אופציה 2 - העברה ל-archive עם 600 perms. שומר היסטוריה אבל סוגר את החור.

קונפליקטים במערכת (20)

drift ב-ecosystem (skills במפה שלא ב-registry) (5)

asset-builder

ecosystem.py LAYERS מצביע על skill שלא ב-registry. הוסף ל-registry.py או הסר מ-ecosystem.py כדי שמפת הסטודיו תהיה מדויקת.

creative-designer

ecosystem.py LAYERS מצביע על skill שלא ב-registry. הוסף ל-registry.py או הסר מ-ecosystem.py כדי שמפת הסטודיו תהיה מדויקת.

marcom

ecosystem.py LAYERS מצביע על skill שלא ב-registry. הוסף ל-registry.py או הסר מ-ecosystem.py כדי שמפת הסטודיו תהיה מדויקת.

marcom-strategist

ecosystem.py LAYERS מצביע על skill שלא ב-registry. הוסף ל-registry.py או הסר מ-ecosystem.py כדי שמפת הסטודיו תהיה מדויקת.

template-factory

ecosystem.py LAYERS מצביע על skill שלא ב-registry. הוסף ל-registry.py או הסר מ-ecosystem.py כדי שמפת הסטודיו תהיה מדויקת.

drift ב-action_plan (target_files שלא קיימים) (15)

id=2 · Wire Hebrew-First audit לכל הסקילים של דולב
target: D-I-main-studio/marcom/

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=2 · Wire Hebrew-First audit לכל הסקילים של דולב
target: D-I-main-studio/article-engine/

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=3 · Em-dash linter כ-pre-commit gate
target: .git/hooks/pre-commit

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=9c · קטגוריה C: לשלב 7 workflow skills כ-dependencies
target: studio-catalog/skills/pre_publish_qa.py (wire layout-review)

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=9c · קטגוריה C: לשלב 7 workflow skills כ-dependencies
target: ~/.claude/agents/design-reviewer.md (wire design-coach)

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=13 · Install LibreOffice + Playwright Chromium
target: SETUP-NEEDED-FOR-DOLEV.md

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=13 · Install LibreOffice + Playwright Chromium
target: studio-catalog/settings.html

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=14 · Connect Beehiiv / HubSpot / Mailerlite API keys
target: studio-catalog/.env

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=14 · Connect Beehiiv / HubSpot / Mailerlite API keys
target: studio-catalog/settings.html

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=16 · editorial-router cron daily run
target: crontab

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=17 · competitor-scan LIVE
target: studio-catalog/skills/competitor_scan.py

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=21 · seo-plan LIVE (wraps organic-seo)
target: studio-catalog/skills/seo_plan.py

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=25 · Wire annotation-handler לכל deliverables
target: studio-catalog/skills/annotation_handler.py

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=26 · Feedback aggregator ל-design-coach
target: studio-catalog/skills/feedback_aggregator.py

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

id=27 · studio-manager dashboard - live data
target: studio-catalog/skills/studio_manager.py

ה-target_file לא קיים. ייתכן שהמשימה כבר בוצעה (השם השתנה), או שעדיין צריכה להתחיל. מועמדות לסגירה / עדכון.

פתוחים להחלטה (8)

Backup target: Google Drive / Hetzner Storage Box / שניהם

ענבל infra

P1 #10 מהביקורת. כיום 0 backup ל-studio data (174 ריצות + clients/ + vault + audit logs). ניתוח מלא מ-2026-05-14 ב-~/.claude/plans/jiggly-riding-blum.md.

אופציות:
Google Drive (זמין מיד) חינם - 15GB משותף עם תמונות אישיות. מהיר לבדיקה ראשונית.
Hetzner Storage Box €3.20/חודש 100GB - אותו DC. EU data-residency = טוב ללקוחות EU עתידיים. תומך גם ב-Duplicati של Windows.
שניהם - Drive עכשיו + Hetzner כשתעשי signup - defense in depth. הסקריפט גנרי, רק target משתנה.
המלצה שלי: Hetzner Storage Box - בעיקר בגלל data-residency ל-GDPR + יחידות backup רציני שמאחד גם את Duplicati של Windows. החיסכון של Drive (€0) לא מצדיק אובדן בידוד תפעולי לאורך זמן.
תכנון מוכן: ~/.claude/plans/jiggly-riding-blum.md

Pricing tiers לסטודיו (Brand Pack / Content Month / Strategic Plan)

שניהם product

מ-recommendations P1 (tiered-packages). 3 חבילות self-serve דרך Stripe. ענבל+דולב צריכים להחליט מחירים, מה כל חבילה כוללת, channel לקנייה.

אופציות:
Brand Pack (חד-פעמי) - discovery + brand + 1 month content. price TBD
Content Month (חודשי, חוזר) - calendar + 30 פוסטים + dashboard. price TBD
Strategic Plan (חודשי, premium) - הכל + 4 ייעוצים + brand evolution. price TBD
המלצה שלי: להתחיל עם 1 לקוח שיר (existing) לרפרנס, ואז להחליט מחיר. /pricing-strategy skill יכול לעזור.

GDPR data-residency policy (לקוחות EU)

ענבל compliance

כשיהיה לקוח EU ראשון - data חייב להישאר ב-EU. Hetzner=EU, Google Drive=US. מחייב החלטה מקדימה: לאן backup, לאן audit log shipping אם נעשה, לאן API responses נשמרות.

אופציות:
EU-only stack (Hetzner everywhere) - פתיחה ללקוחות EU. שינוי backup target חובה.
Per-client routing - EU client = Hetzner; non-EU = current. מורכב יותר.
להחליט כשיגיע הלקוח - אבל אז זה הופך urgent + חוסם onboarding.
המלצה שלי: להחליט עכשיו לטובת EU-only - מפשט הכל. גם נדרש לבחירת backup target.

הרחבת מנגנון conflict detection בעמוד /decisions

ענבל infra

כיום 5 detectors פעילים: sync (broken_deliverables), scheduler_overlaps (חפיפות calendar אותו לקוח+תאריך+ערוץ), state_drift (published_at לא תואם status), ecosystem_drift (skills במפה שלא ב-registry), action_plan_drift (target_files שלא קיימים). אפשר להוסיף עוד אם רוצים.

אופציות:
cron timing collisions - זיהוי 2+ scripts שרצים באותה דקה - יוצרים race conditions
audit log error spikes - יותר מ-X errors ב-Y דקות = פיק חריג. גם זיהוי skills שלא נקראו N ימים = candidate למחיקה
idle skills - skills ב-registry שלא הופעלו 30+ ימים מ-audit log - candidate ל-cleanup או ל-stub
API key approaching quota - מ-cost-monitoring העתידי (P1 #11). Brightdata/Publer/etc.
manifest checksum mismatch - אם _manifest.yaml תוקן ידנית בלי לעדכן audit log - drift forensics
להשאיר על 5 הקיימים בלבד - כיסוי סביר היום, להוסיף לפי צורך
המלצה שלי: להוסיף את 'idle skills' + 'audit log error spikes' מיד אחרי שהיומן מצטבר 30 ימים (כיום רק 3 רישומים). cron collisions אם נוסיף עוד crons בקרוב. השאר - לעת הצורך.

כלל הברזל em-dash: 12+ הפרות בתכני דולב

דולב voice

סריקה גילתה 12+ em-dash (`—`) + 3 en-dash (`–`) במסמכי לקוחות שדולב מייצר. מיקומים: clients/amitai/marcom-templates/v1-html/render.py:96, clients/amitai/domain-intel/_raw/bshcpa/research-section.md (11+ שורות), clients/shir/domain-intel/_raw/atlas/seo-scan-derived-section.md:7, clients/shir/domain-intel/_raw/mgc/domain-scan-raw.md:95,99. ה-IRON RULE של ענבל (feedback_no_em_dash.md): רק hyphen `-`, em/en אסור בכל הטקסטים כולל טווחי תאריכים.

אופציות:
ניקוי one-shot כעת + pre-commit hook ב-D-I-main-studio - ~20 דק' sed/find&replace + הוק שחוסם em-dash חדש. הכי שלם.
pre-commit hook בלבד - פערים קיימים יישארו עד שדולב יגע בקובץ. חוסם הצטברות אבל לא מתקן.
filter ב-pre_publish_qa.py - כל סקיל שמוציא תוצר עובר auto-replace `—` → `-`. דולב לא צריך לזכור.
להתעלם - _raw/ זה content חיצוני שענבל לא קוראת בפועל. רק render.py + marcom outputs קריטיים.
המלצה שלי: Filter ב-pre_publish_qa.py - חוסך מדולב לזכור את הכלל ידנית, ועדיין עוצר תוצרים פתוחים לפני שמגיעים לעיני ענבל. ניקוי one-shot של הקיימים יקרה בפעם הבאה שדולב נוגע בקובץ.

שם ענבל מאויית עם א במקום ע ב-4 קבצים ישנים

דולב voice

ההוק של pre-commit (commit 2026-05-13 ב-CLAUDE-CONFIG) חוסם כתיבה חדשה של השם באיות השגוי (א-prefix). אבל קבצים שנכתבו לפני ההוק לא תוקנו אוטומטית. נמצאו 4 כאלה: D-I-main-studio/_protocols/hebrew-first-output.md:222, D-I-main-studio/annotation-handler/SKILL.md:22, D-I-main-studio/brand-identity-builder/references/README.md:87+93. כולם דולב כתב. הסקריפט check-name-spelling.py מזהה אותם אוטומטית.

אופציות:
ענבל מריצה sed עכשיו על 4 הקבצים + commit 30 שניות - פקודה: find על D-I-main-studio + sed להחלפת א-prefix ל-ע-prefix. אחר-כך diff לוודא.
להניח לדולב לתקן כשמגיע לקבצים האלו - סיכוי שלא יגע בהם בזמן הקרוב. המצב הפגום ייכנס לדרך לקוחות חדשים שיקראו.
להוסיף --fix ל-check-name-spelling.py - סקריפט אינטראקטיבי שמציע fix לכל הופעה. overkill ל-4 מקומות.
המלצה שלי: sed עכשיו. 4 קבצים, סיכון אפס, אין סיבה להמתין.

פרוטוקול: HTML ב-.md - איפה מותר, איפה אסור

שניהם voice

ענבל קוראת .md כ-monospace ב-VSCode. תגי `<div>`, `<table>`, `<br>` יוצגו כ-literal text. אבל יש קבצי .md שדולב מייצר שהם templates ל-render דרך Jinja - שם HTML לגיטימי. ויש קבצי _raw/ עם HTML שיוצא מ-curl של אתרים חיצוניים. נחוץ כלל ברור.

אופציות:
HTML מותר רק ב-`marcom-templates/*.html` ו-`templates/*.html`. אסור ב-`clients/*/*.md`. - כלל קשיח. כל .md = pure markdown.
_raw/ פטור (קלט גולמי, לא נקרא ב-chat). בודקים רק `clients/*/*.md` שלא תחת _raw/. - מתחשב במציאות - מחקרי web tend to leak HTML.
pre_publish_qa מנקה HTML אוטומטית מ-.md לפני שעמוד הסטודיו מציג - אגרסיבי - יסנן את הביניים אבל הקובץ המקורי נשאר עם HTML.
המלצה שלי: אופציה 2 - _raw/ פטור. בודקים רק `clients/*/*.md` שאינם תחת _raw. החליטו בנפרד אם רוצים auto-strip ב-pre_publish_qa.

Notification ל-pending approvals ב-scheduler

ענבל operations

P1 #8 (wire-social-publisher) - scheduler עובד עם approved=true ידני ב-CSV. אם לא תזכרי לאשר - פוסטים לא יוצאים. צריך התראה.

אופציות:
Email תזכורת יומית ב-08:00 IDT - אם יש >0 pending - שולח רשימה. דרך morning-email pipeline קיים.
WhatsApp תזכורת שבועית בראשון - GREEN-API קיים. רק 1 הודעה בשבוע.
Dashboard counter בלבד - פסיבי - חייבת לבדוק אתר
המלצה שלי: אופציה 1 - email יומי. תעלה על morning-email הקיים. אם 0 pending - דילוג שקט.

חסומים על-ידי החלטות אחרות (2)

Hetzner Storage Box signup

ענבל infra

תלוי בהחלטת backup-target. ~€3.20/חודש 100GB. שיוך לאקאונט Hetzner קיים של השרת.

חסום על-ידי: backup-target

Client-portal subdomains strategy (shir.studio... / amitai.studio...)

שניהם product

מ-recommendations P1 (client-portal). subdomain לכל לקוח עם UI ממותג. תלוי גם ב-stable-studio-url ובדומיין שתבחרו.

חסום על-ידי: stable-studio-url

הוחלטו (1)

למה הדריפט לא עלה בסקירת הבוקר

ענבל process

ענבל שאלה: 'כבר עשית הבוקר סקירה של הפערים האלו, למה זה לא עלה?'. תשובה כנה: הסקירה של הבוקר (P1 #6 - skill-deliverable mismatch sync, commit 0f239ed) הייתה רק על registry.py ↔ deliverables.py. הצירים האדג'נטיים - ecosystem.py LAYERS, action_plan.py target_files - לא נסרקו. אם הם היו נסרקים, היו עולים 19 הפערים שעלו אחרי שבנינו את עמוד /decisions. הפער הוא תהליכי, לא קוד.

אופציות:
checklist קבוע ב-_protocols/drift-survey.md - מסמך עם כל הצירים שצריך לסרוק. מתעדכן כשנוסף עוד cross-check. סקירה בהמשך תכסה הכל.
להוסיף ל-protocol הקיים שלי (memory file) - feedback_research_methodology.md כבר קיים. להוסיף 7-step protocol שמכלול drift sweeps.
להשאיר כפי שהוא - reactive במקום proactive - סורקים כשמשהו עולה. סיכון: דריפט מצטבר.
המלצה שלי: checklist ב-_protocols/drift-survey.md. סורק תמיד מכסה את כל הצירים. מתעדכן עם הזמן (כל cross-check חדש נוסף לרשימה). אופציה 1+2 ביחד.
הוחלט (2026-05-14): checklist קבוע נוצר ב-_protocols/drift-survey.md. 15 cross-checks מתועדים (7 שמות סקילים, 3 נתוני לקוחות, 5 כללי טקסט עברי). מתוכם 7 כבר אוטומטיים ב-decisions.py, 8 עוד לא. המסמך מגדיר: מתי להריץ סקירה, איך להוסיף ציר חדש, מה היה השגיאה ההיסטורית. living document - מתעדכן עם כל cross-check חדש.
מקור הנתונים: studio-catalog/skills/decisions.py
קונפליקטים: מזוהים runtime מ-sync_validator (skill↔deliverable), content-calendar.csv (חפיפות + state drift)
לעדכן פריט (סגירה / שינוי): ערוך skills/decisions.py + restart Flask