Skip to content

chore: local quality checks: knip, size-limit, madge, assets, html, doctor (supersedes #1060) - #1078

Merged
Swissystem7 merged 4 commits into
masterfrom
chore/madge-circular-and-assets-check
Nov 14, 2026
Merged

Swissystem7 merged 4 commits into
masterfrom
chore/madge-circular-and-assets-check

Conversation

@Swissystem7

@Swissystem7 Swissystem7 commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

מה נוסף

PR נפרד, שנפתח מ-master. הוא לא נוגע ב-#1060.

  • madge@8.0.0 כ-devDependency מדויק, כולל עדכון package-lock.json
  • npm run check:circular מריץ madge --circular --extensions js src pilot/js
  • npm run check:assets מריץ tools/check-assets.js, סקריפט Node קצר בלי תלויות:
    • מה נסרק: קובצי ה-HTML בשורש, sw.js, manifest.webmanifest, src/**, pilot/*.html ו-pilot/js/**.
    • מה נבדק: כל מחרוזת שמסתיימת בסיומת של קובץ שמע או תמונה (mp3, wav, ogg, png, svg, jpg, webp, ico ועוד).
    • איך הנתיב נפתר: כמו בדפדפן, יחסית לדף שטוען את הסקריפט (השורש, או pilot/ עבור pilot/js), או יחסית לקובץ ה-HTML עצמו.
    • שם קובץ בלי תיקייה: למשל 'prompt_counting.wav', שמחובר ל-basePath בזמן ריצה. מספיק שיהיה קיים איפשהו תחת sounds/ או icons/.
    • תיקיות בסיס: תיקייה מילולית שמשמשת לבניית נתיבים בזמן ריצה (למשל 'sounds/voice/he/') חייבת להתקיים.
    • מה מדולג: URL-ים, data: ו-template strings עם ${...}.
    • קוד יציאה 1 אם משהו חסר.
  • סקריפטים מקומיים בלבד: לא נוסף workflow, ולא נגעתי ב-Actions או בקוד האפליקציה

תוצאות ההרצה המקומית

npm run check:circular: קוד יציאה 0

madge עיבד 191 מודולים ומצא 132 קשרי require. אין תלויות מעגליות, לא ב-src/ ולא ב-pilot/js/.

npm run check:assets: קוד יציאה 1

נבדקו 46 נתיבים, ו-7 חסרים:

מיקום נתיב הערה
src/lib/narrationPlayer.js:13-18 sounds/voice/he/prompt_addition.mp3, prompt_subtraction.mp3, prompt_multiplication.mp3, prompt_division.mp3, feedback_good.mp3, feedback_retry.mp3 ב-sounds/voice/he/ יש רק קובצי .wav. ה-mp3 אמורים להיווצר עם tools/elevenNarration.js, שדורש מפתח ElevenLabs, ועוד לא נוצרו. narrationPlayer.js לא נטען כרגע באף דף (רק בבדיקות), ויש בו fallback שקט, ולכן אין היום השפעה על המשתמש.
pilot/js/app.js:231 ../sounds/pilot/ (תיקיית בסיס ל-<id>.mp3) התיקייה sounds/pilot/ לא קיימת, ולכן כל קריינות ב-pilot תיפול ל-fallback.

כל האייקונים (icons/*, manifest ו-sw.js) וכל 16 קובצי ה-.wav ש-voicePrompt.js מפנה אליהם קיימים.

npm test

2710 עברו, 0 נכשלו (2728 בסך הכול).

הערות

  • npm audit מדווח על 2 חולשות ברמה moderate בתלויות עקיפות של madge (minimatch, דרך @typescript-eslint/typescript-estree). זה כלי פיתוח מקומי בלבד, ולא מגיע לדפדפן.
  • גם ה-PR הזה וגם chore: הוספת knip ו-size-limit כסקריפטים מקומיים #1060 משנים את package.json ואת package-lock.json. מי שימוזג שני יצטרך פתרון קונפליקט קטן.

Draft. לא למזג אוטומטית.


סבב 3: PR מאוחד (מחליף את #1060)

ה-PR הזה כולל עכשיו את כל כלי הבדיקה, עם package.json אחד ו-package-lock.json אחד:

  • knip@6.45.1 (npm run knip) ו-size-limit@14.3.0 + @size-limit/file (npm run size). הגיעו מ-chore: הוספת knip ו-size-limit כסקריפטים מקומיים #1060.
  • madge@8.0.0 (npm run check:circular) ו-tools/check-assets.js (npm run check:assets).
  • tools/check-html.js (npm run check:html): בודק בלי תלויות ids כפולים, קובצי <script src> ו-<link href> מקומיים שלא קיימים, ו-<img> בלי alt. אפשר לשמור baseline עם --update-baseline.
  • tools/doctor.js (npm run doctor): מריץ test, knip, size ו-check:html ברצף ומציג סיכום.

תיקון 7 נכסים חסרים (check:assets: ‏46/46)

  • src/lib/narrationPlayer.js: 6 הנתיבים הפנו ל-.mp3 שלא קיימים. עכשיו הם מפנים לקובצי .wav שכבר נמצאים ב-sounds/voice/he/. למפתח feedback_good אין קובץ בשם הזה, ולכן הוא מפנה ל-feedback_correct.wav. שם המפתח לא השתנה. הבדיקה ב-test/elevenNarration.test.js עודכנה בהתאם.
  • pilot/js/app.js:231 מחפש ../sounds/pilot/<id>.mp3 כמקום אופציונלי, ומסתיר את הכפתור כשאין קובץ. לא שיניתי את הקוד. הוספתי את התיקייה sounds/pilot/ עם README שמסביר את המקום הזה.
  • שימו לב: tools/elevenNarration.js, הכלי שמייצר את ההקלטות, עדיין כותב קבצים בשם *.mp3. לא נגעתי בו.

שינויים קטנים בהגדרות

תוצאות

בדיקה תוצאה
npm test 2710 עברו, 0 נכשלו, 2 דולגו, 16 todo
npm run knip עובר (7 אזהרות על ייצואים)
npm run size 628.47 kB מתוך 645 kB; ‏index.html בתוך 70 kB
npm run check:circular אין תלויות מעגליות
npm run check:assets כל 46 הנתיבים קיימים
npm run check:html 14 קבצים, 0 בעיות
npm run doctor 4/4 עברו

סבב 4 (דחיפה אחת)

tools/elevenNarration.js: יוצר עכשיו בדיוק את קובצי ה-.wav ש-narrationPlayer מנגן

  • שמות הקבצים שונו מ-*.mp3 ל-*.wav. ההקלטה של המפתח feedback_good נכתבת ל-feedback_correct.wav, כמו המיפוי בנגן.
  • הבקשה ל-API כוללת עכשיו ?output_format=pcm_22050, כלומר PCM גולמי במונו, 16 ביט, 22.05 kHz. האפשרות הזו זמינה בכל מסלול מנוי (44.1 kHz דורש Pro). את הבייטים עוטפת כותרת WAV שנבנית מקומית (pcmToWav, בלי תלויות). אם מתקבל קובץ שכבר הוא WAV, הוא נשמר כמו שהוא. אפשר לבחור פורמט אחר עם options.outputFormat.
  • הקוד לא הופעל מול ה-API, ולא השתמשתי באף מפתח. בבדיקות fetch מוחלף בפונקציה מדומה.
  • הבדיקות ב-test/elevenNarration.test.js עודכנו ונוספו חדשות:
    • כתובת הבקשה כוללת את output_format, והקובץ שנכתב הוא RIFF/WAVE עם קצב הדגימה הנכון.
    • רשימת הקבצים שהכלי יוצר זהה לרשימה ב-NarrationPlayer.NARRATION_ASSETS.
    • הכותרת ש-pcmToWav בונה נכונה.
  • הקבצים הקיימים ב-sounds/voice/he/ הם 8 kHz במונו, 16 ביט. הנגן מנגן כל קצב דגימה, כך שהבדל ב-22.05 kHz לא משנה לו.

בדיקות חדשות (כולן נכנסו ל-npm run doctor)

  • check:sw (tools/check-sw.js): מוודא שכל כתובת ברשימת ASSETS ב-sw.js קיימת בדיסק. כתובת שמסתיימת ב-/ צריכה index.html. התוצאה: 181 כתובות, 0 חסרות.
  • check:a11y-static (tools/check-a11y-static.js): בודק:
    • ל-<html> יש lang, ובדף בעברית גם dir="rtl".
    • אין <button> ריק בלי aria-label, ‏aria-labelledby או title.
    • לכל <input> ו-<select> יש label, ‏aria-label או title.
    • אפשר לשמור baseline, אבל לא היה צורך: 14 קבצים, 0 בעיות.
  • check:i18n (tools/check-i18n.js): אין בריפו קובצי שפה. הממשק בעברית בלבד. לכן הבדיקה טוענת את 172 המודולים ב-src/ (קריאה בלבד) ובודקת את טבלאות המחרוזות שהם מייצאים:
    • תגי HTML לא סגורים.
    • ערכים ריקים בטבלאות תוויות ובשדות he.
    • רשימות שבהן לרוב הפריטים יש שדה he ולחלקם אין.
    • התוצאה: 0 בעיות.

תוצאות

בדיקה תוצאה
npm test 2712 עברו, 0 נכשלו (2 דולגו, 16 todo)
npm run doctor 7/7 עברו: test, knip, size, check:html, check:sw, check:a11y-static, check:i18n
check:assets / check:circular 46/46 נתיבים קיימים / אין תלויות מעגליות

@codecov

codecov Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

… + check:html + doctor); narration paths now point to the existing .wav clips
@Swissystem7 Swissystem7 changed the title chore: check:circular (madge) + check:assets chore: local quality checks: knip, size-limit, madge, assets, html, doctor (supersedes #1060) Nov 14, 2026
…add check:sw, check:a11y-static, check:i18n to doctor
@Swissystem7
Swissystem7 marked this pull request as ready for review November 14, 2026 21:03
@Swissystem7
Swissystem7 merged commit 508b1f1 into master Nov 14, 2026
5 checks passed
@Swissystem7
Swissystem7 deleted the chore/madge-circular-and-assets-check branch November 14, 2026 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants