# Phase 6: Раздача / шаблоны / клон / программа **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** fullstack ## Objective Экосистема вокруг custom-sims: публикация, раздача классу, клонирование чужих, старт из шаблонов, привязка к программе (учебник/тема). ## Tasks - [ ] Публикация: тумблер draft↔published в билдере/каталоге (PUT status). Только владелец/админ. - [ ] Раздача классу: `POST /api/custom-sims/:id/share { classId }` — по паттерну «Мои материалы» (`shareMaterial`): ученики класса получают доступ/уведомление. Решить — ссылка-доступ или копия (рекоменд.: доступ-ссылка на published + запись в lab_sim_links/доступ; копия избыточна). - [ ] Клон: `POST /api/custom-sims/:id/clone` — копия спеки новому владельцу (draft). Кнопка «Клонировать» на чужой published-карточке. - [ ] Шаблоны: набор стартовых спек (встроенные JSON-фикстуры: пустая, маятник, график, бросок) → «Создать из шаблона» в билдере; «Создать из существующей» = clone. - [ ] Привязка к программе: переиспользовать `lab_sim_links` (kind=textbook|topic) для `custom:`; чип «Связано с программой» (как у встроенных, `_loadRelated`) и кнопка «В лабораторию» с карточки учебника. - [ ] Тесты: share (доступ ученику), clone (новый владелец, draft), ownership на публикации. ## Files to Modify/Create - `backend/src/controllers/customSimController.js` — share/clone/publish (modify) - `backend/src/routes/customSims.js` — роуты share/clone (modify) - `backend/src/controllers/.../lab links` — связи для custom (reuse `lab.js` links, modify при необходимости) - `frontend/sim-builder.html` / `frontend/js/labs/lab-glue.js` — шаблоны, кнопки публикации/клона/раздачи (modify) - `js/api.js` — методы share/clone (modify) - `backend/tests/custom-sims-share.test.js` (new) ## Acceptance Criteria - Учитель публикует; другой учитель видит и клонирует к себе (draft). - Выданная классу симуляция доступна ученикам класса (с уведомлением). - Старт из шаблона создаёт рабочую заготовку. Привязка к учебнику показывает чип/кнопку. ## Notes - Раздача — переиспользовать существующий механизм доступа/уведомлений, не строить новый. - Решение копия-vs-ссылка зафиксировать в CONTEXT.md. ## Review Checklist - [ ] Все задачи выполнены - [ ] Ownership на publish/share/clone покрыт тестами - [ ] Ученик класса получает доступ; чужой — нет - [ ] Reuse материалов/доступа/links, без дублей ## Handoff to Next Phase