# Task 15d — Assemble /full-guide/ **Agent**: `page-migrator` · **Model**: **Codex** **Depends on**: 10, 13, 15a, 15b, 15c · **Parallel with**: 16 · **Blocks**: 15e, 18, 19 **Worktree**: `.agents/scripts/worktree.sh start 15d page-full-guide` ## Goal `src/pages/full-guide.astro`. 22 KB of HTML, bilingual throughout, everything interactive already built by 15a/15b/15c and every block already built by task 10. **This task is assembly.** If you find yourself writing a new island, stop — it belongs to one of the earlier briefs and you should report the gap instead. Read the reports from 15a, 15b and 15c first. They state their props and the language contract. ## Islands and nothing else | Island | Directive | From | | ------------------------------- | ---------------- | ---- | | Guide selector (one, ×9 groups) | `client:visible` | 15a | | Copy-prompt buttons + progress | `client:visible` | 15b | | Language toggle | `client:idle` | 15c | Everything else is server-rendered. ## Asserted by verify.mjs — all must survive `const phases`, `const handsOnPrompts`, `const modelGuide`, `const skillSources`, `const skillInstallPrompts`, `render('plan')`, `renderTree`, `renderWorker`, `renderRoute`, `renderModelProvider`, `renderEffort`, `renderSkillFile`, `renderSkillWorkflow`, `renderCommonSkill`, `renderHandsOn`, `copyPrompt`, plus `data-copy-target="prompt-install-skills|prompt-basic|prompt-skills"`, `hands-on/starter/`, `additional-reading.md`, `role="tablist"`, `