# WEB013-LAB1 — راهنمای یادگیرنده

## هدف
primitive فیلتر محدود را repair کنید تا قرارداد keyboard و focus آن قابل مشاهده و قابل دفاع باشد. starter عمداً خراب است؛ PASS شدن public structural checks را accessibility verdict تلقی نکنید.

## مسیر الزامی
1. قبل از تغییر code، expected contract را ثبت کنید.
2. فقط با keyboard وارد primitive شوید، actionها را اجرا کنید و آن را dismiss کنید.
3. focus را واضح و قابل تشخیص کنید.
4. نیاز pointer-only در custom action را حذف کنید؛ هرجا product contract اجازه می‌دهد native control را ترجیح دهید.
5. focus restoration منطقی بعد از dismissal را پیاده‌سازی یا توجیه کنید.
6. با `mutation_probe.py` یک mutation عمدی اجرا کنید؛ قبل از اجرا failure را پیش‌بینی کنید، سپس observe، diagnose و repair کنید.
7. transfer تغییرکرده را حل کنید؛ در آن invoker ممکن است حذف شود.
8. `evidence/learner_evidence.json` را با observation مستقیم و یک residual limitation کامل کنید.

## Boundary
responsive layout یا directional-key behavior را بازطراحی نکنید؛ این موارد متعلق به درس‌های مجاورند مگر اینکه مستقیماً مانع قرارداد محدود keyboard/focus شوند.

## حالت‌های public checker
پیش از repair، برای اعتبارسنجی starter ارائه‌شده `python run_checks.py --structure-only` را اجرا کنید. پس از تکمیل repair و evidence rowها، `python run_checks.py` را بدون آن flag اجرا کنید. PASS فقط completeness ساختاری/evidence را نشان می‌دهد؛ رفتار واقعی browser همچنان باید توسط خودتان observe و ثبت شود.
