# Notes

- **Why this topic:** GitHub issue [#24](https://github.com/ayv4zyan/teach/issues/24) — *Learn MessageChannel (and MessagePort)*. Closed completed 2026-08-26. Related closed issue [#15](https://github.com/ayv4zyan/teach/issues/15) named MessageChannel as a sibling of window `postMessage`; this track owns the pair.
- **Do not read neighbouring topic folders** for content or assets. Ground teaching in #24, the WHATWG spec, and MDN. Neighbouring tracks exist (postMessage, BroadcastChannel, structured clone, workers) only as *labels* the issue already names.
- **Shape:** same as other FE platform tracks — decision fluency + light in-browser practice. React when a framework example is needed (`Agents.md`).
- **file://:** lessons are opened as local files. Use classic `<script src>` — not `type="module"` — so Chrome does not CORS-block the lab and quizzes.
- **Spec watch:** HTML §9.4 now includes `MessagePort.onclose` / a `close` event on disentangle (WHATWG [html#1766](https://github.com/whatwg/html/issues/1766)). Support is newer than `close()` itself — teach `close()` as the teardown API; treat `onclose` as a compat-sensitive bonus, not the design default.
- **ZPD:** pair through extra-pipe teardown (LR-0002–LR-0008) plus mixed choose/reject retrieval (LR-0009) are floor. Mission success criteria are demonstrated. No further unit unless they ask. [#24](https://github.com/ayv4zyan/teach/issues/24) is closed completed.
- **Glossary:** add a term only after the learner uses it.
- **Quizzes:** `quiz.js` shuffles each fieldset’s labels on bind. `data-answer` is the option value.
- **file:// lab contexts:** an iframe `srcdoc` keeps the same origin as the lesson file. A second `file://` document does not. A dedicated worker on `file://` is a classic `blob:` Worker — not a second file URL, not `type: "module"`.
