# WEB003-LAB1 — راهنمای فراگیر

هدف: اثبات قرارداد bounded scheduling با simulator محلی deterministic؛ شبکه لازم نیست.

1. در ریشه lab فرمان `python run_checks.py --self-test` را اجرا کنید. این مرحله فقط ساختار fixture را بررسی می‌کند و scheduler شما را تأیید نمی‌کند.
2. `learner/starter/index.html` را در مرورگر استاندارد باز کنید یا از core checkهای Node-compatible استفاده کنید. قبل از edit، `scheduler-core.js` را بخوانید و peak و timeout behavior را پیش‌بینی کنید.
3. `mapWithConcurrency(items, limit, worker)` را طوری repair کنید که active work از `limit` بیشتر نشود و کارهای مستقل بتوانند overlap داشته باشند.
4. `runWithDeadline(taskFactory, timeoutMs)` را طوری repair کنید که task abort-aware بتواند cancellation signal دریافت کند. از timer race به‌تنهایی ادعای cancellation نکنید.
5. `python mutation_probe.py --submission-dir learner/starter` را اجرا و حداقل یک چرخه prediction/observation/diagnosis/repair را در evidence ثبت کنید.
6. `learner/transfer` را مستقل repair کنید. تعداد item، delay، failure و budget آن متفاوت است.
7. `learner/evidence/learner_evidence.json` را با schema عمومی artifact کامل کنید. تا وقتی fixture را واقعاً در مرورگر مشاهده نکرده‌اید، `browser_dom_observation.claimed` را false نگه دارید؛ در صورت claim، browser/environment، observation مستقیم و inference محدود را جدا ثبت کنید.

Browser observation فقط وقتی ثبت شود که واقعاً مشاهده شده باشد. Node-compatible checks scheduling core را اثبات می‌کنند، نه browser/AT behavior را.
