# 09 — نقشه راه، تست و ریسک‌ها

## 1. فازبندی پیاده‌سازی

### فاز ۰ — زیرساخت (۱ هفته)
- ریپوی monorepo (`client/` + `server/`)، CI (lint+test)، سروک استاتیک و سرور Express با `/healthz`
- ✅ خروجی: «Hello AlphabetPlay» قابل استقرار

### فاز ۱ — هسته‌ی بازی MVP — فقط فارسی (۳–۴ هفته)
- Core: EventBus · Router · Store · i18n/RTL · PackLoader (پک فارسی کامل)
- Engine: letterSelector · masteryTracker · SRS · scoring
- ۳ بازی: `letter-pop` · `memory-match` · `alphabet-safari`
- AudioEngine با فایل‌های ضبط‌شده + AnimationService با ۵ انیمیشن پایه
- پیشرفت فقط local (localStorage) — سرور هنوز درگیر نیست
- ✅ معیار پذیرش: کودکِ آزمون ۴–۶ ساله بدون کمک بزرگ‌تر، ۱۰ دقیقه بازی پیوسته

### فاز ۲ — بک‌اند و سینک (۲ هفته)
- Express: auth والد + پروفایل کودک + `progress:batch` + events + SQLite
- SyncQueue + RestRepo + حل تعارض
- ✅ معیار پذیرش: قطع اینترنت وسط بازی → ادامه بازی → بازگشت شبکه → سینک بدون خطا و بدون از دست رفتن پیشرفت

### فاز ۳ — پک انگلیسی و هلندی + TTS (۲–۳ هفته)
- پک‌های en/nl (LTR) روی همان موتور — **بدون تغییر کد بازی‌ها** (آزمون واقعی معماری)
- بازی‌های `sound-hunt` · `odd-one-out` · `trace-letter` · `word-builder` · `catch-basket`
- Fallback زنجیره‌ای صوت + TTS
- ✅ معیار پذیرش: پک جدید فقط با افزودن JSON + دارایی‌ها راه می‌افتد (یک روز کاری)

### فاز ۴ — پنل والدین، PWA، جشن‌ها (۲ هفته)
- گزارش هفتگی، حروف ضعیف، سقف زمانی؛ `star-reveal` کامل + نشان‌ها
- Service Worker + manifest + حالت آفلاین کامل
- ✅ معیار پذیرش: Lighthouse PWA + Performance ≥ 90 در موبایل

### فاز ۵ — هوشمندسازی (مداوم)
- تنظیم خودکار وزن‌های letterSelector از روی داده‌های واقعی
- آنالیز حروف خطاخیز واقعی (نه فقط لیست نظری confusables)
- محلی‌سازی بیشتر (عربی؟ کردی؟ — سازه‌ها آماده‌اند)

## 2. راهبرد تست

| سطح | ابزار | نمونه موارد حیاتی |
|---|---|---|
| واحد | Jest | `masteryTracker` (ارتقا/عدم-تنزل) · `letterSelector` (وزن‌ها، تزریق confusable) · `syncQueue` (cap 500، حل تعارض) |
| ادغام API | Supertest | auth دو-scope · batch sync · حذف آبشاری GDPR |
| اعتبارسنجی پک | اسکریپت CI | ارجاع معلق، فایل صوتی غایب، id تکراری |
| E2E | Playwright | مسیر کامل: ورود آواتاری → ۳ بازی → سینک → گزارش والد |
| UX کودک | تست دستی/مشاهده‌ای | جلسه ۱۵ دقیقه‌ای با ۳ کودک واقعی در هر فاز — **هیچ فازی بدون این تست تحویل نمی‌شود** |
| حافظه/نشتی | DevTools snapshot | kill شدن timelineها در `destroy` |

## 3. ریسک‌ها و پاسخ‌ها

| ریسک | احتمال | اثر | پاسخ |
|---|---|---|---|
| حجم کار ضبط صوت برای ۳ زبان | بالا | متوسط | فاز ۱ فقط فارسی؛ en/nl می‌توانند تا ضبط کامل با TTS شروع کنند |
| کیفیت TTS فارسی روی برخی دستگاه‌ها | متوسط | متوسط | زنجیره‌ی fallback + فایل‌های ضبط‌شده اولویت ۱ |
| تنبلی کد بدون فریمورک (بی‌نظمی) | متوسط | بالا | ساختار پوشه‌ی سخت‌گیرانه + ESLint قواعد سفارشی (ممنوعیت left/right منطقی) + review |
| دقت تتبع حرف روی دستگاه‌های لمسی ارزان | متوسط | متوسط | آستانه‌ی ۷۰٪ پوشش + حالت «تماس‌آماده» (tap روی نقاط راهنما به‌جای drag) |
| GDPR/مجوز کودک در NL | کم | بالا | طراحی حداقل‌داده از روز اول (سند 08) — داده‌ای که ذخیره نشود افشا نمی‌شود |
| سوگیری آموزشی برای کودکان پیش از دبستانِ بسیار کوچک (۳ سال) | متوسط | متوسط | سن پایه ۴+؛ برای کوچک‌ترها فاز ۵ حالت Safari آزاد |

## 4. تعریف «تمام» برای نسخه ۱.۰ (Definition of Done)

- [ ] سه پک زبانی fa/en/nl کامل با صدا و تصویر
- [ ] ۸ بازی فعال با سختی تطبیقی
- [ ] سینک ابری + آفلاین کامل + گزارش والدین
- [ ] Lighthouse ≥ 90 (Performance, Accessibility, PWA)
- [ ] پوشش تست واحد موتور ≥ 80٪
- [ ] تست UX با حداقل ۵ کودک هدف، نرخ تکمیل جلسه ≥ 70٪
