# ۲۹ — نقشه‌ی موج‌های بعدی (تکمیل موج ۱ · موج ۲ · موج ۳)

> پیوند: ممیزی [۲۷](27-project-audit.md) §۵ (نقشه‌ی سه‌موجی) · اجرای موج ۱: CHANGELOG «1.10.0»
> تاریخ: ۲۰۲۶-۰۹-۲۶ · وضعیت: **موج ۱ کامل بسته شد** (همه‌ی ۷ آیتم ✓) — گام بعدی: موج ۲
> قاعده‌ی پذیرش همه‌ی آیتم‌های کدی (سبک همیشگی): تست واحد/e2e سبز + مستند + ردیف README.

---

## ۰. خلاصه‌ی اجرایی

| موج | هدف | مدت برآوردی | پیش‌نیاز | معیار خروج (Definition of Done) |
|---|---|---|---|---|
| **۱ · پایدارسازی** | زیرساخت تولید بی‌خطری (git/TLS/بکاپ/CSP/پایش) | ✅ کامل (۲۰۲۶-۰۹-۲۶) | — | دیپلوی با TLS + بکاپ شبانه بازیابی‌شده + خطاها دیده می‌شوند + CI با پوشش |
| **۲ · اعتبارسازی و عمق** | اثبات ارزش با کودک واقعی + محتوای عمیق | ۴-۶ هفته (تقویمی) | تکمیل موج ۱ | ۵ جلسه‌ی UX انجام + پایلوت ۱۰-۲۰ خانواده با سنجه‌ی یادگیری + هر حرف ≥۵ واژه |
| **۳ · رشد پلتفرم** | مقیاس و مدل درآمد — **فقط با داده‌ی موج ۲** | پس از پایلوت | گزارش پایلوت موج ۲ | هر آیتم با داده توجیه شود، نه حدس |

درصد پیشرفت (ممیزی ۲۷ → برآورد بعد از هر موج): عرضه‌ی عمومی **~۶۰٪ → ~۷۰٪** (پایان موج ۱) → **~۸۵٪** (پایان موج ۲) → ۱۰۰٪ با رشد موج ۳.

---

## ۱. موج ۱ «پایدارسازی» — وضعیت و تکمیل

### ۱.۱ بسته‌شده (۲۰۲۶-۰۹-۲۶ · کامیت‌های `6613db8` + `630fbda` · تگ `v1.10.0`)

| # | آیتم ممیزی | وضعیت |
|---|---|---|
| ۱ | git + LICENSE (MIT کد / CC-BY-4.0 محتوا) + CHANGELOG + tag | ✅ ۱۷۲ فایل، صفر راز/DB در تاریخچه |
| ۲ | Docker + Caddy (TLS خودکار) + CSP + هدرها | ✅ Dockerfile غیرroot + healthcheck · compose · [سند ۲۸](28-deploy.md) |
| ۳ | بکاپ خودکار + **تست بازیابی** | ✅ اسنپ‌شات WAL امن + manifest + چرخش ۱۴ نسخه + CLI + ۱۰ تست (بازیابی عملی، رد نسخه‌ی خراب، باگ برخورد نام) |

**دو درس ثبت‌شده از این مرحله** (جزئیات در CHANGELOG):
1. **باگ پارسر CSP در کروم ۱۵۳**: یک source نامعتبر (هش base64 بدون `/`) کل `script-src` را بی‌اثر می‌کند → راه‌حل نهایی: **صفر اسکریپت inline** (نسخه از `<meta>`, تعویض CSS در `boot.js`) — گارد دائمی در تست‌ها.
2. **بازپایه‌ی بودجه‌ی Lighthouse کارایی ۸۵→۸۳** با A/B مستند همان‌ماشین (onload=۸۵ · CSP-clean=۸۳-۸۴؛ +۱ امتیار با `fetchpriority=low`). ریشه‌چین در موج ۳ (باندل esbuild) بودجه را به ۸۵ برمی‌گرداند.

### ۱.۲ بقیه‌ی موج ۱ — همه بسته شدند (۲۰۲۶-۰۹-۲۶ · کامیت «موج ۱ کامل»)

#### ۱) پایش خطا + لاگ ساختاریافته (S · نیم روز)
- **چه چیزی:** سرویس سوم در docker-compose: GlitchTip (سلف‌هاست، داده در کنترل ما) — یا Sentry SaaS (تصمیم §۶/۱). سمت سرور: `uncaughtException`/`unhandledRejection` + خطاهای 5xx به JSON ساختاریافته (pino) → ارسال. سمت کلاینت: قلاب موجود `Diagnostics` → `POST /api/v1/diagnostics` (batch، نرخ‌محدود، بدون PII کودک).
- **پذیرش:** یک خطای آزمایشی (دکمه‌ی تست ادمین) ظرف <۱ دقیقه در داشبورد + هشدار ایمیل · تست واحد برای Sanitize (بدون نام کودک/ایمیل والد در پیام) · ردیف README.

#### ۲) reset رمز والد (M · ۱-۲ روز)
- **چه چیزی:** جریان «فراموشی رمز»: درخواست → توکن یک‌بارمصرف ۳۰دقیقه‌ای (هش‌شده در DB، الگوی refresh موجود) → رمز تازه + **ابطال همه‌ی نشست‌ها**. تا وقتی SMTP نیست (موج ۲): کانال = پنل ادمین (ادمین ریست می‌کند، والد در ورود بعدی رمز موقت می‌گیرد).
- **پذیرش:** تست‌های API: توکن منقضی/مصرف‌شده/رمز ضعیف رد · پس از ریست، refresh قدیمی مرده · e2e ادمین‌محور · مستند در سند ۲۸.

#### ۳) retention رویدادها + ابطال دستگاه (S · نیم روز)
- **چه چیزی:** job شبانه (همان زمان‌بند بکاپ): `session_events` > ۱۸۰ روز → حذف (مجموعه‌های report از قبل تجمیعی‌اند، خام فقط برای دیباگ). + endpoint «خروج از همه‌ی دستگاه‌ها» برای والد (ابطال همه‌ی refreshها) + دکمه در UI والدین.
- **پذیرش:** تست: seed رویداد ۲۰۰ روزه → بعد از اجرای job حذف · ابطال دستگاه → جلسه‌ی کودک مرده · ردیف README.

#### ۴) c8 + آستانه‌ی پوشش + dependabot (S · نیم روز)
- **چه چیزی:** `c8` روی ۱۳ سوئیت (فقط `server/` — کلاینت با e2e پوشش داده می‌شود)، آستانه‌ی **≥۷۰٪ خطوط** در CI (گزارش در artifact)، `dependabot.yml` هفتگی + grouped به‌روزرسانی‌ها.
- **پذیرش:** CI با گزارش پوشش سبز · dependabot نصب و اولین PR باز · اگر پوشش فعلی <۷۰٪ است، عدد واقعی اندازه‌گیری و آستانه‌ی صادقانه ثبت شود (نه تسهیل).

---

## ۲. موج ۲ «اعتبارسازی و عمق» (۴-۶ هفته تقویمی)

> هدف: از «دموی مهندسی‌محورِ تمیز» به «محصولی که خانواده‌ها ۴ هفته واقعاً استفاده می‌کنند و کودک در آن حرف یاد می‌گیرد».
> ترتیب درون‌موجی: محتوا و SMTP بلافاصله → ۵ جلسه‌ی UX → اصلاح → پایلوت.

### ۲.۱ پنج جلسه‌ی UX سند ۲۳ (انسانی — فقط با خودِ کاربر)
- پروتکل نسخه 1.10.0 + کیت `docs/ux-test-kit.xlsx` (سنجه‌های خودکار) آماده‌اند؛ پیش‌اجرای فنی ۹/۹ سبز (سند ۲۶).
- **پذیرش:** ۵ کودک × ۹ وظیفه ثبت‌شده (ستون‌های L تا P) · آستانه‌های سند ۲۳ (⭐ ≥۲۰/۲۵، گیت کامل، عبور خودانگیخته) · جدول «یافته→اصلاح» ≥۱۰ ردیف پر · حکم نهایی قبول/مردود هر سنجه.

### ۲.۲ اسپرینت محتوا (M · کار تألیفی، موازی با جلسات) — ✅ کامل (سند ۳۰)
- وضعیت ممیزی: کل **۳۰۹ واژه / ۳۴ داستان / ۱۴۱ حرف**؛ فارسی **۱۹/۳۲ حرف با <۳ واژه‌ی شروع‌شونده**.
- **هدف:** هر حرف هر سه زبان **≥۵ واژه‌ی شروع‌شونده** (→ ~۷۰۰ واژه) + داستان برای یک‌چهارم‌های پایانی نقشه (هر حرف حداقل در یک داستان) + بازبینی «واژه-تصویر» (واژه‌های تصویرپذیر و آشنا برای ۴-۶ سال؛ حذف مبهم‌ها).
- **پذیرش:** تست `packs.test` برای آستانه‌ی ≥۵ واژه/حرف به‌روز و سبز · گزارش عمق محتوا (بازتولید اعداد ممیزی) · بازبینی انسانی مستندشده.

### ۲.۳ پایلوت ۱۰-۲۰ خانواده · ۴ هفته (M) — ابزار سنجه آماده (سند ۳۲ §۶)؛ اجرا با کاربر
- جذب از شبکه‌ی شخصی/مجتمع‌های ایرانی روتردام (تصمیم §۶/۳ برای پیام).
- **سنجه‌ها:** یادگیری = آزمون تشخیص حرف پیش/پس (۱۰ حرف، همان ابزار سند ۲۳) · retention هفته‌ی ۲ ≥ ۶۰٪ · crash-free ≥ ۹۹٪ · NPS والد ≥ ۴۰.
- **پذیرش:** ≥۱۰ خانواده تا پایان هفته‌ی ۴ · گزارش پایلوت (سند ۳۱) با تجزیه‌ی سنجه‌ها · فهرست اولویت‌دار اصلاحات موج ۲.۵.

### ۲.۴ ممیزی دسترس‌پذیری واقعی (S) — ✅ کامل (سند ۳۱)
- Lighthouse a11y=۱۰۰ فقط صفحه‌ی اول است (یافته‌ی ممیزی): هدف لمس ≥۴۴px در همه‌ی بازی‌ها · کنتراست ≥4.5:1 · ناوبری کیبورد صفحه‌های والد · خواندن با VoiceOver/NVDA در بازی اصلی.
- **پذیرش:** چک‌لیست مکتوب + اصلاحات + اجرای Lighthouse a11y روی ۵ مسیر (خانه/نقشه/بازی/گالری/والدین).

### ۲.۵ موارد تکمیلی (S) — ✅ کامل (سند ۳۲)
- i18n پنل ادمین (en) · نشانگر آنلاین/آفلاین کودک (از sync) · **SMTP** (Resend/Mailgun — تصمیم §۶/۲) → reset رمز self-serve + ایمیل خوش‌آمد + گزارش هفتگی · بکاپ ریموت شبانه (restic → S3/R2؛ تکمیل قاعده‌ی ۳-۲-۱ طبق سند ۲۸ §۴).

**وضعیت تکمیل موج ۱ (خلاصه‌ی اجرا):**

| آیتم | اجرا | آزمون |
|---|---|---|
| ۴) پایش خطا + لاگ ساختاریافته | `server/monitoring.js` (Envelope v7 → Sentry/GlitchTip، صف ۳۰تایی، sanitize) · `server/logger.js` (JSON-line) · `POST /api/v1/diagnostics` (۳۰/دقیقه) · `Diagnostics` کلاینت دسته‌ای (۸ث، keepalive) · uncaughtException/rejection + SIGTERM تمیز | ۶ تست monitoring + ۲ تست api + e2e |
| ۵) reset رمز والد | `server/passwordReset.js` — رمز موقت `AP-XXXXXXXX` مستقیم در password_hash (بدون جدول توکن = بدون سطح حمله) + ابطال همه‌ی نشست‌ها + حسابرسی `parent_reset` · نقش پشتیبان مجاز · مودال مخصوص پنل ادمین | ۱ تست یکپارچه admin (رمز قدیمی مرده، refresh مرده، 403 محتوا، audit بدون رمز) + e2e-admin |
| ۶) retention + ابطال دستگاه | `server/retention.js` (رویداد >۱۸۰ روز + refreshهای مرده، هر شب بعد از بکاپ) · `POST /api/v1/parent/sessions/revoke` + دکمه‌ی «خروج از همه دستگاه‌ها» در UI والدین (۵ زبان) | ۱ تست retention + ۱ تست api (مرگ refresh و دستگاه) + e2e |
| ۷) پوشش + dependabot | c8: **خطوط ۸۷.۱۲٪ واقعی** (پس از فیکس SIGTERM→flush پوشش سرورهای تستی!) · آستانه: خطوط/دستورات ۷۵، توابع ۷۰، شاخه ۶۰ · `npm run test:coverage` در CI · dependabot هفتگی گروهی (npm+actions) | خود CI دروازه است |

**آزمون پایانی موج ۱:** واحد/یکپارچه **۲۱۲** (۱۴ سوئیت) · e2e **۲۵+۱۶+۶** · Lighthouse میانه ۸۴ ≥ ۸۳ · پوشش ۸۷٪ ≥ ۷۵٪.

**خروج موج ۲:** گزارش پایلوت + محتوای کامل + اعتماد عملیاتی. بدون این موج، موج ۳ = ساخت روی حدس.

---

## ۳. موج ۳ «رشد پلتفرم» (فقط با داده‌ی موج ۲)

| آیتم | چه چیزی unlock می‌کند | داده‌ی لازم از پایلوت |
|---|---|---|
| **حالت کلاس/معلم** (لیست دانش‌آموز، تکلیف حرف، داشبورد کلاس) | طبیعی‌ترین مدل درآمد B2B (مجتمع‌ها/مدارس) | تقاضای واقعی از ۵+ والد/مربی |
| **تشخیص گفتار محلی** (Whisper small روی سرور یا WASM) | آفلاین + حریم خصوصی کامل + خروج از وابستگی به Chrome/Edge | نرخ موفقیت سناریوی ۹ در جلسات UX |
| **تحلیل یادگیری** (قیف افت، حروف در خطر، گزارش هفتگی والدین) | ارزش والدین‌محور و کاهش churn | الگوی واقعی رویدادهای پایلوت |
| **باندل esbuild** (بدون تغییر معماری) | ~۳۰٪ وزن بوت کمتر · **برگشت بودجه‌ی Lighthouse به ۸۵** (قلم بازپایه‌ی موج ۱) | — (هر وقت) |
| **بسته‌بندی اپ‌استور** (Capacitor) + نصب PWA از استور | کانال توزیع + اعتماد والدین | نرخ نصب PWA در پایلوت |
| **Postgres + object storage** | مقیاس >۱۰۰۰ خانواده | داده‌ی مقیاس — نه زودتر |
| **زبان‌های جدید** (ur/de) | بازار جدید؛ زیرساخت JSON-pack آماده است | تقاضا در پایلوت/جوامع |
| **مدل تطبیقی داده‌محور** | وزن‌های selector به‌جای دستی، از داده | ≥۱۰k جلسه‌ی بازی |

---

## ۴. ترتیب و وابستگی‌ها

```
تکمیل موج ۱ (۲-۳ روز)
   ├──► اسپرینت محتوا (۲.۲)  ──┐ (موازی)
   ├──► SMTP + بکاپ ریموت (۲.۵) ┤
   └──► ۵ جلسه‌ی UX (۲.۱) ──────┤
                                ▼
                    اصلاحات یافته‌ها (۲.۴ هم اینجا)
                                ▼
                     پایلوت ۴ هفته (۲.۳) ──► گزارش سند ۳۱
                                ▼
                     موج ۳ — فقط آیتم‌هایی که داده توجیه کرد
```

- گلوگاه‌های انسانی: جلسات کودک (کاربر) · تألیف محتوا (تصمیم §۶/۳) · جذب خانواده.
- آیتم‌های موج ۱ باقی‌مانده مانع فنی جلسات UX نیستند — می‌توان موازی پیش برد.

## ۵. ریسک‌های شناخته‌شده

1. **۵ جلسه‌ی کودک فقط با خودِ کاربر انجام می‌شود** — بزرگ‌ترین ریسک تقویمی؛ بدون آن پایلوت معنا ندارد.
2. ریزش خانواده‌ها در پایلوت → برنامه‌ی یادآوری هفتگی + تعهد «۴ هفته، ۱۰ دقیقه در روز» از ابتدا.
3. تألیف محتوا دیرتر از برآورد (کیفیت > سرعت) — بازبینی واژه‌ها با متخصص الزامی است.
4. SpeechRecognition فقط Chrome/Edge — قاعده‌ی N/A-م سند ۲۳ پوشش می‌دهد؛ موج ۳ (Whisper) ریشه‌چین می‌کند.
5. نویز ±۲ Lighthouse — بودجه با ۵ اجرا در CI پایدار شده؛ رگرسیون‌های واقعی با A/B تشخیص داده شوند (الگوی امروز).

## ۶. تصمیم‌های باز (نیازمند تصمیم کاربر)

| # | تصمیم | گزینه‌ها | پیشنهاد |
|---|---|---|---|
| ۱ | پایش خطا | GlitchTip سلف‌هاست vs Sentry SaaS (رایگان اوپن‌سورس) | سلف‌هاست — داده‌ی کودکان در کنترل ما (روح GDPR سند ۰۸) |
| ۲ | سرویس ایمیل | Resend / Mailgun / SMTP خودِ VPS | Resend — ساده‌ترین برای تراکنشی؛ دامنه باید SPF/DKIM بخورد |
| ۳ | منبع تألیف محتوا | شخصی / متخصص پیش‌دبستانی / تولید ماشینی+بازبینی | مکث: واژه‌نامگی کودک حساس است — بازبینی انسانی الزامی |
| ۴ | مدل درآمد موج ۳ | رایگان کامل / B2B مدرسه و مجتمع / اشتراک خانوادگی | بعد از داده‌ی پایلوت — الان تصمیم نگیریم |
| ۵ | زبان چهارم | عربی (i18n آماده) / اردو / آلمانی | بعد از موج ۲ |

---

**مستندات مرتبط:** ممیزی [۲۷](27-project-audit.md) · استقرار [۲۸](28-deploy.md) · پروتکل UX [۲۳](23-ux-test-protocol.md) · کیت جلسات `ux-test-kit.xlsx` · پیش‌اجرای [۲۶](26-ux-rehearsal-report.md)
