# WEB003-LAB1 — learner instructions

Purpose: prove a bounded scheduling contract with a deterministic local simulator. No network is required.

1. Run `python run_checks.py --self-test` from the lab root. This checks fixture structure only; it does not certify your scheduler.
2. Open `learner/starter/index.html` in a standards-capable browser, or use the Node-compatible core checks described below. Inspect `scheduler-core.js` before editing. Predict the baseline peak and timeout behavior.
3. Repair `mapWithConcurrency(items, limit, worker)` so measured active work never exceeds `limit` while independent items can overlap.
4. Repair `runWithDeadline(taskFactory, timeoutMs)` so an abort-aware task can receive a cancellation signal. Do not claim cancellation from a timer race alone.
5. Run `python mutation_probe.py --submission-dir learner/starter`. Record at least one prediction/observation/diagnosis/repair cycle in the evidence file.
6. Repair `learner/transfer` independently. Its item count, delays, failure placement and budget differ from the guided case.
7. Complete `learner/evidence/learner_evidence.json` using the public artifact schema. Keep `browser_dom_observation.claimed` false until you have actually observed the fixture in a browser; when claimed, record the browser/environment, the direct observation, and the bounded inference separately.

A browser observation must be recorded only if you actually observed it. Node-compatible checks prove the scheduling core, not browser/AT behavior.
