מסמכים
יומן שינויים · CHANGELOG
כל השינויים המשמעותיים באתר - תכונות חדשות, תיקוני אבטחה, עדכוני
מאגרי מידע - מסודרים כרונולוגית. מקור: CHANGELOG.he.md.
תעדכון גם באנגלית לקהילת המפתחים.
תוכן טכני - חזרה לדף הבית.
יומן שינויים
כל השינויים המשמעותיים ב-OpenCarIL מתועדים כאן.
מבנה על-פי Keep a Changelog. גרסאות על-פי Semantic Versioning. לפני 1.0 = לא יציב.
הגרסה האנגלית (יעד ל-GitHub וקהילת מפתחים): CHANGELOG.md.
[Unreleased]
נוספו
- חיפוש דגמים בעברית באמצעות טבלת תעתיקים מאוצרת
(
web/src/lib/model-aliases.ts). ה-data.gov.il שומר שמות דגמים באנגלית (FOCUS,COROLLA,MAZDA 3) אבל תוצרות בעברית, ולכן שאילתות עבריות לדגמים החזירו אפס תוצאות. ה-typeahead עכשיו מרחיב טוקנים עבריים לקבוצות OR של("פוקוס"* OR "FOCUS"*)בשאילתת ה-FTS, כולל תעתיקים מרובי-מילה (לנד קרוזר,מזדה 3). כולל ~120 השמות המסחריים הפופולריים, מכסה ~90% מהרכבים הרשומים. - תפריט המבורגר + מגירת ניווט מחליקה (RTL-תקין), מטרות מגע 44x44 בכל בקרות ה-header/drawer, נעילת גלילת body בזמן שהמגירה פתוחה. MobileNotice הותאם מ"האתר עובד יותר טוב במחשב" לרמז לגבי תפריט ☰ (מפתח סגירה עודכן מ-v1 ל-v2).
- ערוץ יצירת קשר:
nx1xlab.dev/contactנוסף ב-/aboutלצד GitHub Issues, במבוא של/roadmap, ובמגירת הנייד. - דפי
/changelogו-/roadmap- קובצי המקור.mdנטענים בזמן הבנייה דרךmarked(עם סניטיזציה). מקושרים מה-footer של האתר. /og/generic?title=…&subtitle=…- כרטיס OG פרמטרי ב-SVG לכל ראוט שלא היה לו עיצוב OG דינמי (/dataset/*,/stats*,/about,/compare/*,/changelog,/roadmap).- ממיר ITM ← WGS84 ב-
lib/itm.ts. מפת/stats/citiesשואבת קואורדינטות ממאגר יישובי הלמ"ס (1,484 יישובים). כיסוי קפץ מ-~90% (JSON מובנה של 80 ערים) ל-99%. - פיצול תיעוד לצורך פרסום קוד פתוח:
docs-internal/(לא בגיט) מכיל אתRUNBOOK.md,CLAUDE.md,work-status.md. מסמכי מדיניות ציבוריים רועננו (SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md), נוספו תבניות issue ו-PR. /api/latest-release- פרוקסי ל-GitHub Releases API, עם קאש ב-isolate. מפעיל את התג "גרסה חדשה זמינה" בכותרת כאשר הבניה שרצה מפגרת אחריmain.- דף
/credits- כל תלות זמן-ריצה ובנייה עם רישיון SPDX, בנוסף לייחוס מקורות המידע (data.gov.il, למ"ס). /api/health?bindings=1- בדיקת opt-in המדווחת האם ה-bindings של הגבלת הקצב (API_RATE_LIMIT,SEARCH_RATE_LIMIT,PLATE_GATE) אכן חוברו בסביבת הייצור. מאשר שמגבילי ה-scraping אינם נכשלים-פתוח בשקט על יעד הפריסה. כבוי כברירת מחדל כדי לא לחשוף את מבנה ה-bindings.- JSON-LD מסוג
Organizationלכל האתר (שם, לוגו,sameAsלמאגר ב-GitHub), בנוסף לאות רעננותdateModifiedהניתן לקריאה במכונה על סכימותWebSiteו-Dataset(עמודי/dataset/*), הנשען על חותמת ה-ETLlast_fetch_utc(זמן הרענון היומי, לא זמן הבנייה). - JSON-LD מסוג
BreadcrumbListעל/plate/[n]. /og/generic.png- גרסת PNG (satori + resvg-wasm) של כרטיס ה-OG הגנרי ב-SVG, כדי שתצוגות הקישור ירונדרו ב-X, Discord, LinkedIn, Facebook ו-WhatsApp-IL, שכולם משמיטיםog:imageמסוג SVG.<lastmod>על כל כתובת ב-sitemap.xml, מזמן הרענון האמיתי של ה-ETL - אות הרעננות/הסריקה-מחדש העיקרי ש-Google באמת משתמש בו.og:site_nameו-og:locale(he_IL) נפלטים לכל האתר; נוסף שדהPolicy:ל-security.txt.
שונו
renovate.jsonהועבר ל-.github/renovate.json(מיקום סטנדרטי). זמן ההמתנה (cooldown) הועלה מ-7 ימים ל-14 ימים גלובלית.daily-etl.ymlפוצל ל-build(ללא סודות Cloudflare, contents:read) ול-deploy(עם סודות CF, contents:write).deployמאמת את ה-artifact לפני שום פקודת wrangler: בדיקת allowlist עלdatasets.generated.ts, sanity על גדלי קבצי SQL, cap על גודל bundle.docs/DEPLOY.md- פוצל למסלול "GH Actions בלבד" ולמסלול "CF Git integration", עם אזהרה מפורשת "אל תפעיל את שניהם".- CHANGELOG ו-ROADMAP רועננו לקריאות ציבורית. ניתוח מפורט וממצאי
audit הועברו ל-
docs-internal/work-status.md. - משתני סביבה
CF_*שמועברים ל-wrangler שונו ל-CLOUDFLARE_*כדי להתאים לתיעוד של wrangler. - כל ה-bindings של Cloudflare (D1, שלושת מגבילי הקצב, סודות Turnstile
ו-Sentry) אוחדו לטיפוס
App.Platformיחיד; הוסרו ממשקי ה-binding הכפולים וה-casts (as) שסטו מהסביבה האמיתית. בנוסף תוקנה הערה ישנה שתיארה את המגבילים כ-[[ratelimits]]בעוד הם מוגדרים כ-[[unsafe.bindings]]. - דיווח שגיאות ל-Sentry ב-
handleErrorעכשיו נדחה דרךctx.waitUntilבייצור במקום לחסום את תגובת השגיאה על ה-import הדינמי והאתחול של Sentry.
אבטחה
/compare/[plates]ו-/plate/[n]/reportעכשיו מוגנים באותו Turnstile + rate limit כמו/plate/[n]. סוגר נתיב scraping של כל המרשם (ממצא pentester ברמת HIGH).step-security/harden-runnerמוצמד ל-SHA בכל ה-workflows (היה מוצמד לתג בלבד - cicd HIGH).- סגירת מחלקת באגים של prototype-chain lookup במקור הקודגן
(
DATASETS_BY_IDמאותחל עםObject.create(null)). - FTS5 typeahead הוקשח: catch מצומצם (היה catch-all), cap על אורך שאילתה וכמות מונחים.
- CSP במצב nonce:
'unsafe-inline'הוסר מ-script-src. {@html}ב-/changelogו-/roadmapעובר סניטיזציה בזמן הבנייה - tokens של HTML גולמי הופכים לטקסט נראה במקום קוד מבוצע.- מחרוזות placeholder בזמן פריסה ב-
wrangler.tomlמתועדות ומוגנות ב-grep הגהיינה של ה-CI, כך שלא יישלחו לפרודקשן כפי שהן. - 4 סקריפטים שכללו נתיבי WSL אישיים בקוד קשיח (
/tech-projects/*) נמחקו.
תוקנו
- כל עמודה על
/plate/[n]מציגה כעת תווית בעברית. 53 עמודות שנותרו בקטלוג WLTP (סימני ADAS, פילוגי פליטה, טכנולוגיית הנעה) שהוצגו בשם הגולמי - קיבלו תרגומים ב-etl/src/etl/datasets.py. - דף השגיאה האנגלי של ברירת המחדל של SvelteKit הוחלף ב-
+error.svelteבעברית (עם מיפוי קוד → תווית עברית). - 21 הודעות
throw error()תורגמו לעברית. - Canonical URLs: היה מוצמד ל-
/ב-app.htmlבכל ראוט (מה שגורם ל-Google לאחד את כל הכתובות לדף הבית). עכשיו מוזרק פר-ראוט דרך+layout.svelte. - תגיות OG ב-
/plate/[n],/manufacturer/[cd]ובדף המודל הוחלפו מ-SVG לגרסת.png- WhatsApp-IL לא מציגog:imageבפורמט SVG. - ל-sitemap נוספו
/stats/cities,/feed/recalls.atom,/changelog,/roadmap. <h1>כפול על/plate/[n]/reportהוחלף ל-<div>.- Typeahead מוסיף עכשיו
aria-activedescendant- דפוס ה-combobox של WAI-ARIA לא היה מיושם. /plate/[n]כלל רק<title>ב-<head>- עכשיו נפלטים<meta name="description">ו-og:descriptionהבנויים מרשומת הרכב, והשדהmanufacturerב-JSON-LD מסוגVehicleהואOrganizationתקין (במקום מחרוזת פשוטה).- שבעת עמודי ה-OG הגנרי (
/about,/stats,/stats/cities,/dataset/*,/changelog,/roadmap,/credits) הוחלפו מ-og:imageמסוג SVG ל-PNG החדש (image/png, 1200x630). - JSON-LD מסוג
Datasetעל/dataset/[slug]נושא עכשיו את קישור ה-sameAsלמקור ב-data.gov.il/CKAN, כפי שהובטח בהערה אך מעולם לא נפלט בפועל. - סורקים מוגבלי-קצב כבר לא מקבלים מעטפת אתגר ריקה עם סטטוס 200 על
/plate/[n]ו-/compare/[plates]: בוטים מאומתים (אות bot-management של Cloudflare, עם גיבוי רשימת-היתר של User-Agent) עוקפים את שער הלוחית, ומסלול האתגר האנושי מחזיר עכשיו429אמיתי עםRetry-After, כדי שסורקי חיפוש/AI ייסוגו במקום לאנדקס עמוד ריק. - עמוד הדגם (
/manufacturer/[cd]/model/[dcd]) חסרog:image:width/og:image:height- נוספו. - לשדה החיפוש בכותרת/הירו לא היה שם נגיש (placeholder בלבד) - נוסף
aria-label. /compare/[plates]מוגדר עכשיוnoindex, follow(אין לאנדקס כתובות קומבינטוריות בלתי-חסומות).
[0.1.0] - שחרור ראשוני
מערך הפיצ'רים שהיה קיים בזמן פתיחת הריפו כקוד פתוח. היסטוריית
ה-pre-1.0 המלאה (רשומות פנימיות, ממצאי audit, שיקולי refactor)
נמצאת ב-docs-internal/work-status.md.
נתונים
- צנרת ETL מעל 25 מאגרי משרד התחבורה מ-data.gov.il (~14 מיליון רשומות, 2.6 GB SQLite). ריענון יומי דרך GitHub Actions cron.
- טבלאות precompute:
_manufacturer_summary,_global_baselines,_stats_snapshot,_insights_snapshot,_vehicles_fts. - מאגר יישובים של הלמ"ס (1,484 רשומות) מעשיר את
/stats/cities.
האתר
- ממשק בעברית בלבד, RTL.
/plate/[n]- חיפוש חוצה-מאגרים על מספר רכב, כולל ציר בעלויות, אגרת רישוי שנתית, סטטיסטיקת צי, זיהוי ריקולים, תג סטטוס, שבבי שינויי מבנה ונזק./plate/[n]/report- דוח מלא ידידותי להדפסה./compare/[plates]- השוואה של 2 עד 5 רכבים./manufacturer/[cd]ותת-דפי דגמים, דפדפן מאגרים ב-/dataset/[slug]עם פילטרים ו-pagination./statsו-/stats/citiesעם footer של provenance לכל פנל.- פידי Atom של ריקולים ב-
/feed/recalls.atom(גלובלי) ופר-יצרן ב-/feed/recalls/[tcd].atom. - Typeahead מבוסס FTS5 (עברית + לטינית, ~3 מ"ש חם).
SEO / GEO
- Canonical URL פר-ראוט.
- גרף JSON-LD:
WebSite+SearchActionעל דף הבית,Datasetעל כל/dataset/[slug],Vehicleעל דפי רכב,BreadcrumbListעל דפי יצרן ודגם. - כרטיסי OG דינמיים ב-
/og/plate/[n],/og/mfr/[cd](SVG + PNG),/og/generic?title=…. - מדיניות מפורשת ל-crawlers של AI ב-
robots.txt, קובץllms.txt.
אבטחה
- CSP במצב nonce, HSTS, X-Frame-Options DENY, COOP/CORP same-origin, Permissions-Policy מורחב.
- שער Cloudflare Turnstile על ראוטים שנוגעים ברכב, עם מונה פר-IP.
- Cloudflare Rate Limiting על
/api/*,/search,/dataset/*,/plate/,/compare/,/manufacturer/. - Hook של
handleErrorעם ייבוא עצל של Sentry. - כל GitHub Actions מוצמדים ל-SHA.
harden-runnerבמצב block עם רשימות egress מותאמות. - קונפיגורציית Renovate עם המתנה של 14 ימים, dependency dashboard, התראות חולשות.