בדיקה לא־הרסנית של קוד, routes, טפסים, נתיבים, מדיה, מצגות, אבטחה, Control Server ו־Fail Safe. היא לא מבצעת העלאות אמיתיות, לא מאתחלת את השרת ולא מכבה את המחשב.
הבדיקה עברה| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | קומפילציית Python לקובץ האדמין הפעיל | C:\TripServer\admin_server.py |
| ✅ תקין | קומפילציה עם Werror | OK |
| ✅ תקין | בדיקת קובץ אדמין מול מנגנון upload_admin_server | OK |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | שרת בקרה חיצוני Control Server פעיל | פורט 8010 עונה |
| ✅ תקין | סטטוס Fail Safe ניתן לקריאה | state=armed | ריסטארט למחשב Fail Safe נקבע לעוד 180 שניות. |
| ✅ תקין | Control Server v92 כולל אימות Runtime לאחר החלפה | generated control source compiled |
| ✅ תקין | מנגנון סטטוס עדכון מוכן | טרם נרשם apply_update ב־Control Server |
| ✅ תקין | מצב validating אינו מסומן ככשל סופי | |
| ✅ תקין | זיהוי פורט משתמש בפענוח endpoint מדויק |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | תיקיית JAPAN קיימת | C:\TripServer\JAPAN |
| ✅ תקין | תיקיית MoneyHome קיימת | C:\TripServer\MoneyHome |
| ✅ תקין | תיקיית Moneyapp קיימת | C:\TripServer\Moneyapp |
| ✅ תקין | תיקיית TripForm קיימת | C:\TripServer\TripForm |
| ✅ תקין | תיקיית USA קיימת | C:\TripServer\USA |
| ✅ תקין | תיקיית USA_TV קיימת | C:\TripServer\USA_TV |
| ✅ תקין | כתיבה/מחיקה בתיקיית tmp של האדמין | C:\TripServer\tmp\admin_server_uploads\self_test_14556_1784383776.tmp |
| ✅ תקין | תיקיית גיבויי אדמין | C:\TripServer\backups\admin_server |
| ✅ תקין | תיקיית גיבויי העלאות | C:\TripServer\backups\uploaded_files |
| ✅ תקין | USA_TV נשמר ונפתח באותו שם קבוע | save=USA_TV/usa2027-tv.html; open=/USA_TV/usa2027-tv.html |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | כל routes המרכזיים קיימים | 125 routes |
| ✅ תקין | כל טפסי הפאנל מחוברים ל־route קיים | 25 טפסים |
| ✅ תקין | אין IDs כפולים במסך האדמין | OK |
| ✅ תקין | כפתור בדיקה עצמית קיים בפאנל | נבדק href=/admin/self-test |
| ✅ תקין | כפתור טיולים מרכזי קיים בפאנל | המסך הראשי מוביל למסך טיולים ולא מציג יעדים כקטגוריות ראשיות |
| ✅ תקין | מרכז בקרת האיכות נגיש בלי כרטיס כפול במסך הראשי | נבדקו הסרת הכרטיס הכפול והגישה הקבועה מבר הפעולות העליון |
| ✅ תקין | מרכז בקרת המצגות מחובר למסלולי HTML ו-JSON | /admin/presentations + /admin/presentations/report.json |
| ✅ תקין | קישורי פתיחה מהירה לקבצי טיול קיימים | נבדקו קישורי פתיחה מהירה ל־JAPAN, USA ו־USA_TV |
| ✅ תקין | מסך Netlify קיים ומחובר להורדת ZIP | נבדקו כרטיס Netlify ושתי פעולות הורדה |
| ✅ תקין | כפתור לוגים קיים בפאנל | נבדק href=/admin/logs |
| ✅ תקין | כפתור מצלמת חדר קיים בפאנל | נבדק href=/admin/camera |
| ✅ תקין | מסך מוזיקה מציג העלאה קיימת, בדיקה ואישור לפני הטמעה | כפתורי ההעלאה הם הפעולה הראשית; מצגת יפן כוללת בדיקת טווח 5–10 שניות לפני הטמעה; probe נשאר כלי עזר בלבד |
| ✅ תקין | כפתור אתחול מתקדם מוצג ככלי בדיקה בלבד | נבדק ניסוח UX |
| ✅ תקין | מסך סטטוס נבנה ללא שגיאה | OK |
| ✅ תקין | מסך Health נבנה ללא שגיאה | OK |
| ✅ תקין | מסך לוגים נבנה ללא שגיאה | OK |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | מטריצת ששת היעדים רשומה באדמין | נדרשים בדיוק שישה יעדי ארה״ב |
| ✅ תקין | שער השוואת מצגות עם/ללא סכומים פעיל | Netlify נחסם אם קיים שינוי שאינו שקף התקציב או נתיב Deploy |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | מסך מצלמת חדר נבנה ללא שגיאה | OK |
| ✅ תקין | OpenCV זמין להפעלת מצלמה | OpenCV 5.0.0 |
| ✅ תקין | מסך סטטוס רכיבי מצלמה נבנה תקין | OK |
| ✅ תקין | מצלמה מוגנת לרשת פרטית/Tailscale בלבד | Tailscale מותר, ציבורי חסום |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | Pillow זמין להמרת/דחיסת תמונות | OK |
| ✅ תקין | FFmpeg זמין להמרת אודיו ל־MP3 | C:\ffmpeg\bin\ffmpeg.exe |
| ✅ תקין | ffprobe זמין לבדיקת אורך שירים | C:\ffmpeg\bin\ffprobe.exe |
| ✅ תקין | קובץ סטטוס העלאות מוזיקה מוגדר | C:\TripServer\presentation_music_upload_status.json |
| ✅ תקין | כללי סנכרון מוזיקה למצגות קיימים עם סטטוס אורך לאחר העלאה | v34.25 מודד משך ומסנכרן את מצגת האייפון ואת מצגת ה-TV |
| ✅ תקין | סימולציית PNG → JPG בתיקיית tmp | מצב עיבוד: optimized_jpg גודל לפני: 7.6 KB גודל אחרי: 8.9 KB מידות מקור: (1600, 900) מידות סופיות: (1600, 900) איכות JPG: 88 |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | 44 כרטיסיות מדיה למצגת ארה״ב קיימות | 44 |
| ✅ תקין | כרטיסיות ארה״ב תואמות למפת שמות המדיה | ui=44 keys=44 |
| ✅ תקין | אין תיאורים שגויים ידועים במדיה למצגת ארה״ב | OK |
| ✅ תקין | תיאורי קרוז/אורלנדו מסונכרנים | OK |
| ✅ תקין | האדמין מקבל תמונה או MP4/M4V בכל כרטיס שקף | ['.bmp', '.jpeg', '.jpg', '.m4v', '.mp4', '.png', '.tif', '.tiff', '.webp'] |
| ✅ תקין | סימולציית תזמון סרטונים ותמונות | total=54.000; image=7.500 |
| ✅ תקין | סרטונים ארוכים ממשך השיר נחסמים | OK |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | מצגת יפן קיימת לניתוח | C:\TripServer\JAPAN\japan-experience.html |
| ✅ תקין | מצגת יפן משתמשת בתמונות בפועל | 43 תמונות |
| ✅ תקין | אין תמונות חיצוניות חסרות למצגת יפן | חסרות: 0 |
| ✅ תקין | ספירת תמונות יפן מוצגת כספירת שימוש ולא כספירת תיקייה | OK |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | קבצים ראשיים נשמרים תמיד כ־index.html | OK |
| ✅ תקין | הגנת ZIP Slip / נתיבים מסוכנים | OK |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | זיהוי IP מקומי/בית/Tailscale | OK |
| ✅ תקין | כתובת ציבורית נחסמת לפעולות מחשב | OK |
| ✅ תקין | טווח טיימר כיבוי/ריסטארט מוגבל | 30-3600 שניות |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | הקובץ שנטען לזיכרון תואם לקובץ בדיסק | loaded=37e3be7a12095586378529595395c3eeea4f6a002ca2193d595ad3bcbf15518d | disk=37e3be7a12095586378529595395c3eeea4f6a002ca2193d595ad3bcbf15518d |
| ✅ תקין | האדמין רץ מהנתיב הקנוני C:\TripServer\admin_server.py | loaded=C:\TripServer\admin_server.py | expected=C:\TripServer\admin_server.py |
| ✅ תקין | Build ID ו־SHA זמינים | build=EITAN-ADMIN-GOLD-v101-20260718-01 | sha=37e3be7a12095586378529595395c3eeea4f6a002ca2193d595ad3bcbf15518d |
| ✅ תקין | התהליך הפעיל מזוהה כבעל פורט האדמין | pid=14556 | port_pids=[14556, 25996] |
| ✅ תקין | לא נמצאו עותקי admin_server.py נוספים | {"checked_at": "2026-07-18 17:09:38", "instances": [{"path": "C:\\TripServer\\admin_server.py", "role": "loaded", "exists": true, "active_loaded_file": true, "canonical_install_file": true, "sha256": "37e3be7a12095586378529595395c3eeea4f6a002ca2193d595ad3bcbf15518d", "size_bytes": 886567, "modified_at": "2026-07-18 13:04:27"}], "exact_admin_server_count": 1, "extra_exact_instances": 0, "has_extra_exact_instances": false} |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | USA_TRIP קיים | C:\TripServer\USA\index.html |
| ✅ תקין | USA_PRESENTATION_PHONE קיים | C:\TripServer\USA\usa2027-presentation.html |
| ✅ תקין | USA_TRIP_TV קיים | C:\TripServer\USA_TV\usa2027-tv.html |
| ✅ תקין | USA_PRESENTATION_TV קיים | C:\TripServer\USA_TV\usa2027-presentation-tv.html |
| ✅ תקין | Build ID אחיד בכל רכיבי USA | {"USA_TRIP": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "phone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_PHONE": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "iphone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_TRIP_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}} |
| ✅ תקין | Offline Registry schema 3 בכל רכיבי USA | {"USA_TRIP": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "phone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_PHONE": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "iphone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_TRIP_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}} |
| ✅ תקין | מדיניות תקציב TEXT_ONLY בכל רכיבי USA | {"USA_TRIP": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "phone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_PHONE": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "iphone", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_TRIP_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "trip", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}, "USA_PRESENTATION_TV": {"schema": 1, "releaseId": "EITAN-USA-GOLD-v93-20260717-01", "kind": "presentation", "profile": "tv", "offlineRegistrySchema": 3, "budgetSlideMode": "TEXT_ONLY", "defaultPresentationAction": "START_FROM_BEGINNING", "resumeAction": "SECONDARY_WHEN_AVAILABLE"}} |
| ✅ תקין | 36 ימי טיול רציפים — iPhone | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] |
| ✅ תקין | כותרת פירוט עלות בכל יום — iPhone | 43 |
| ✅ תקין | אין שגיאת ההגהה קובצי המצגת — iPhone | |
| ✅ תקין | חיפוש חכם קיים — iPhone | |
| ✅ תקין | מצב הצג/הסתר קיים — iPhone | |
| ✅ תקין | מנוע תקציב דינמי קיים — iPhone | |
| ✅ תקין | Offline registry יציב ולא תלוי בסדר — iPhone | |
| ✅ תקין | 36 ימי טיול רציפים — TV | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] |
| ✅ תקין | כותרת פירוט עלות בכל יום — TV | 36 |
| ✅ תקין | אין שגיאת ההגהה קובצי המצגת — TV | |
| ✅ תקין | חיפוש חכם קיים — TV | |
| ✅ תקין | מצב הצג/הסתר קיים — TV | |
| ✅ תקין | מנוע תקציב דינמי קיים — TV | |
| ✅ תקין | Offline registry יציב ולא תלוי בסדר — TV | |
| ✅ תקין | 44 שקפים במצגת iPhone | 44 |
| ✅ תקין | 44 שקפים במצגת TV | 44 |
| ✅ תקין | סדר ותוכן שקפים לוגי זהה iPhone/TV | {'phone': ['intro', 'roadtrip-map', 'day-01', 'day-02', 'day-03', 'day-04', 'extra-big-sur', 'day-05', 'day-06', 'day-07', 'extra-diner', 'day-08', 'day-09', 'day-10', 'day-11', 'day-12', 'day-13', 'extra-death-valley', 'day-14', 'extra-mono-lake', 'day-15', 'day-16', 'day-17', 'day-18', 'day-19', 'day-20', 'day-21', 'day-22', 'day-23', 'day-24', 'day-25', 'day-26', 'day-27', 'day-28', 'day-29', 'day-30', 'day-31', 'day-32', 'day-33', 'day-34', 'day-35', 'day-36', 'budget', 'summary'], 'tv': ['intro', 'roadtrip-map', 'day-01', 'day-02', 'day-03', 'day-04', 'extra-big-sur', 'day-05', 'day-06', 'day-07', 'extra-diner', 'day-08', 'day-09', 'day-10', 'day-11', 'day-12', 'day-13', 'extra-death-valley', 'day-14', 'extra-mono-lake', 'day-15', 'day-16', 'day-17', 'day-18', 'day-19', 'day-20', 'day-21', 'day-22', 'day-23', 'day-24', 'day-25', 'day-26', 'day-27', 'day-28', 'day-29', 'day-30', 'day-31', 'day-32', 'day-33', 'day-34', 'day-35', 'day-36', 'budget', 'summary']} |
| ✅ תקין | שקף תקציב ללא סכומים — iPhone | <section class="slide budget" data-key="budget"> <div class="slide-shell"> <div class="media-panel"> <img alt="תקציב הטיול" class="hero-image" data-local-base="media/usa-presentation/images/budget" loading="lazy" referrerpolicy="no-referrer" src="media/usa-presentation/images/budget.jpg"/> <div class="image-overlay"></div> <div class="image-caption">תכנון תקציבי</div> </div> <div class="info-panel"> <div class="badge">💰 תקציב</div> <h1>תקציב — בלי דרמה</h1> <div class="region">תמונת מצב תקציבית</div> <p class="vibe">השקף הזה משאיר את המספרים בקובץ הטיול, ובמצגת מציג רק את התמונה הכללית.</p> <ul class="summary-list"><li>המסגרת התקציבית מנוהלת בקובץ הטיול ובאפליקציית התקציב.</li><li>המעקב מחולק ללינה, פארקים, נסיעות, אוכל, קניות וקרוז.</li><li>המטרה: ליהנות מהטיול בלי להפוך כל עצירה לחישוב.</li></ul> <div class="fun-note">את המספרים המדויקים משאירים למעקב התקציב — כאן נשארים באווירה של טיול.</div> </div> </div> </section> |
| ✅ תקין | כפתור ראשי מתחיל מההתחלה — iPhone | |
| ✅ תקין | כפתור המשך משני ומותנה — iPhone | |
| ✅ תקין | אין שחזור אוטומטי לפני בחירת המשתמש — iPhone | |
| ✅ תקין | Offline Registry schema 3 — iPhone | |
| ✅ תקין | השוואת אופליין מבוססת חתימה וסט מפתחות — iPhone | |
| ✅ תקין | Manifest כולל 44 מדיות שקף + 2 אודיו — iPhone | 46 |
| ✅ תקין | שקף תקציב ללא סכומים — TV | <section class="slide budget" data-key="budget"> <div class="slide-shell"> <div class="media-panel"> <img alt="תקציב הטיול" class="hero-image" data-local-base="media/usa-presentation/images/budget" loading="lazy" referrerpolicy="no-referrer" src="media/usa-presentation/images/budget.jpg"/> <div class="image-overlay"></div> <div class="image-caption">תכנון תקציבי</div> </div> <div class="info-panel"> <div class="badge">💰 תקציב</div> <h1>תקציב — בלי דרמה</h1> <div class="region">תמונת מצב תקציבית</div> <p class="vibe">השקף הזה משאיר את המספרים בקובץ הטיול, ובמצגת מציג רק את התמונה הכללית.</p> <ul class="summary-list"><li>המסגרת התקציבית מנוהלת בקובץ הטיול ובאפליקציית התקציב.</li><li>המעקב מחולק ללינה, פארקים, נסיעות, אוכל, קניות וקרוז.</li><li>המטרה: ליהנות מהטיול בלי להפוך כל עצירה לחישוב.</li></ul> <div class="fun-note">את המספרים המדויקים משאירים למעקב התקציב — כאן נשארים באווירה של טיול.</div> </div> </div> </section> |
| ✅ תקין | כפתור ראשי מתחיל מההתחלה — TV | |
| ✅ תקין | כפתור המשך משני ומותנה — TV | |
| ✅ תקין | אין שחזור אוטומטי לפני בחירת המשתמש — TV | |
| ✅ תקין | Offline Registry schema 3 — TV | |
| ✅ תקין | השוואת אופליין מבוססת חתימה וסט מפתחות — TV | |
| ✅ תקין | Manifest כולל 44 מדיות שקף + 2 אודיו — TV | 46 |
| ✅ תקין | שקף התקציב זהה iPhone/TV | |
| ✅ תקין | Manifest לוגי זהה iPhone/TV | |
| ✅ תקין | קישורי מצגת נכונים בקובצי הטיול | |
| ✅ תקין | Regression מול USA GOLD Reference | {'reference': '103b7c87342e263b739e13685239a247cdb14d9d0276a66769740222c753cde3', 'current': '103b7c87342e263b739e13685239a247cdb14d9d0276a66769740222c753cde3'} |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | חוזה זהות קבוע מקבל גרסת Moneyapp עתידית | eitan-tripserver-artifact/v1 |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | וולידציית נתיבים פרטיים מבדילה בין זיהוי hostname לבין קישור מקומי אמיתי | {"harmless_hits": [], "dangerous_hit_counts": [1, 1, 1, 1, 1]} |
| ✅ תקין | דוח ציר זמן פנימי נשאר בשרת ואינו נכנס ל-ZIP של Netlify | {"timeline_report_copied": false, "runtime_manifest_copied": true} |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | אין כפתור USA GOLD נפרד במסך הראשי | |
| ✅ תקין | מרכז ביקורת טיולים הוא נקודת הכניסה היחידה לביקורת טיולים | |
| ✅ תקין | קישורי USA הישנים מפנים למרכז המאוחד |
| מצב | בדיקה | פירוט |
|---|---|---|
| ✅ תקין | עדכון רגיל אינו מתזמן ריסטארט מלא למחשב | protection=verified_runtime_and_rollback |
| ✅ תקין | בדיקת חיות Control משתמשת ב־TCP ישיר ולא ב־HTTP רקורסיבי | |
| ✅ תקין | Control Server v93 כולל Single Instance, Ping קל ו־Rollback | |
| ✅ תקין | Bootstrap חדש אינו מפעיל schtasks ואינו הורג Control פעיל |