# 12 — گزارش پیاده‌سازی فاز ۳ (چندزبانه + ۵ بازی جدید)

> وضعیت: ✅ تکمیل · تاریخ: ۲۰۲۶-۰۹-۲۴ · مطابق نقشه‌ی راه سند 09

## آنچه ساخته شد

### 🌍 پک‌های زبانی جدید — فقط JSON، صفر تغییر در موتور
| پک | حروف | کلمات | dir | TTS |
|---|---|---|---|---|
| **en** (English) | ۲۶ (phonics: name + sound) | ۲۶ | ltr | en-US |
| **nl** (Nederlands) | ۲۶ | ۲۶ | ltr | nl-NL |

- جفت‌های خطاخیز انگلیسی/هلندی تعریف شد: `b/d/p/q`، `m/n/h`، `u/v`، `f/t`
- فایل‌های رابط کاربری کامل: `ui-en.json` / `ui-nl.json` (هم‌ارز کلیدها با تست خودکار تضمین می‌شود)
- **آزمون معماری (ADR-02) پاس شد:** موتور، بازی‌ها و SRS بدون یک خط تغییر، سه زبان را اجرا می‌کنند

### 🎮 پنج بازی جدید (مجموع: ۸ بازی)
| بازی | مهارت | نکته‌ی پیاده‌سازی |
|---|---|---|
| 🔊 **شکار صدا** (soundHunt) | یادآوری L3 | بدون هدف تصویری (recall واقعی)؛ راهنمایی صوتی بعد از ۲ خطا |
| 🤔 **کدام متفاوت است؟** (oddOneOut) | تبعیض | ۳ یکسان + ۱ متفاوت از جفت خطاخیز؛ جهت جفت تصادفی |
| ✏️ **خط خطی کردن** (traceLetter) | تولید L4 | سنجش پوشش ۷۰٪ از پیکسل‌های خود حرف (نمونه‌گیری شبکه‌ای + درون‌یابی حرکت) |
| 🧱 **بچین و بخوان** (wordBuilder) | Blending L4 | ترتیب چیدن از `pack.dir` — همان کد برای RTL و LTR |
| 🧺 **سبد میوه** (catchBasket) | تشخیص سریع L2 | سقوط با GSAP transform؛ سرعت از Adaptive؛ از‌دست‌دادن بدون جریمه |

- هر بازی ماژول مستقل با رابط استاندارد + فیلد `icon`
- **مودال ایستگاه** حالا گرید هر ۸ بازی را نشان می‌دهد؛ بازی‌های `requiredLevel` بالاتر 🔒 هستند
- مسیر کامل تسلط **L0→L4** حالا با بازی‌ها پوشش داده می‌شود (تست شد)

### 🧭 انتخاب زبان
- صفحه‌ی اولِ بار اول: انتخاب الفبا (🇮🇷 فارسی / 🇬🇧 English / 🇳🇱 Nederlands) → بوت تمیز با پک انتخابی
- تغییر زبان از تنظیمات (والدین): local + best-effort PATCH سرور → reload
- پیشرفت هر زبان مستقل است (`childId|packId` در کلاینت، `(child, pack, letter)` در سرور)

## کیفیت

| بررسی | نتیجه |
|---|---|
| تست واحد موتور | ✅ 18/18 |
| تست سینک | ✅ 10/10 |
| تست یکپارچه‌ی API | ✅ 20/20 |
| **تست پک‌ها و i18n** (validate ×۳، هم‌ارزی کلیدها، نشان‌ها، pickWordCandidates) | ✅ 13/13 |
| ارتقای L3/L4 و مسیر کامل L0→L4 | ✅ |
| گراف import ماژول‌های جدید | ✅ |
| E2E سرور زنده: هر سه پک + UI + CSS | ✅ |
| **مجموع** | **۶۱/۶۱** ✅ |

## انحرافات آگاهانه از طراحی (و دلیل)

| انحراف | دلیل | تصمیم |
|---|---|---|
| `availablePacks.js` هاردکد (نه از سرور) | مرورگر نمی‌تواند دایرکتوری استاتیک را enumerate کند؛ باید قبل از بارگذاری پک کار کند | ثابت کوچکِ لانچر؛ نسخه‌ی آنلاین می‌تواند `/api/v1/packs` را merge کند |
| خط‌چین راهنمای Trace از فونت رندر می‌شود (نه SVG مسیرِ نقاط) | فایل‌های stroke SVG هنوز تولید نشده‌اند | پوشش پیکسلی همان کیفیت آموزشی را می‌دهد؛ SVG در فاز رسانه |
| تغییر زبان = `location.reload()` | dir/فونت/i18n/TTS همه در بوت ست می‌شوند؛ reload تمیزترین و مطمئن‌ترین راه | SPA فقط یک‌بار در تغییر زبان reload می‌شود |
| TTS برای en/nl (فایل صوتی نیست) | هنوز ضبطی موجود نیست؛ صدای en/nl روی اکثر دستگاه‌ها خوب است | زنجیره‌ی fallback سند 07 آماده‌ی فایل‌هاست |

## اجرا و تست دستی

```bash
npm test          # ۶۱ تست
npm run server    # http://localhost:8080
```

1. اولین بازدید (یا بعد از Reset): انتخاب زبان → ساخت دوست → نقشه
2. ایستگاه یک حرف L1+ → گرید ۸ بازی (🔒 برای سطح‌های بالاتر)
3. تنظیمات ⚙️ → تغییر زبان → کل اپ به انگلیسی/هلندی LTR می‌رود
