diff --git a/plans/astro-refactor/task-15d-page-full-guide.md b/plans/astro-refactor/task-15d-page-full-guide.md index 140d906..4bc2f78 100644 --- a/plans/astro-refactor/task-15d-page-full-guide.md +++ b/plans/astro-refactor/task-15d-page-full-guide.md @@ -56,3 +56,47 @@ re-points them to output-level checks; you do not. - [ ] Screenshots match at 560 / 800 / 1100 / 1600 px - [ ] `pnpm run gate` green — the full gate, not `verify` + `audit-ui` alone - [ ] 42 assertions intact + +## What 15a, 15b and 15c actually shipped + +Read `.agents/context/content-i18n.md` first — it is the language contract and +it is binding on this task. + +- **`src/components/islands/GuideSelector.astro`** — one island, all nine + groups. Render it as + ``. `data` needs + `phases`, `workers`, `trees`, `routes`, `providers`, `efforts`, `skillFiles`, + `skillWorkflow`, `commonSkills` and a bilingual `labels` object; the + `GuideSelectorData` interface at the top of the file is the exact shape. You + server-render each group's shell and its initial detail panel, keeping today's + `data-*` hooks and `.active` state. Mark each group `role="tablist"` and its + controls `role="tab"` or the keyboard handler will not bind. +- **`src/components/islands/LanguageToggle.astro`** — render each localized + fragment twice, with `data-language-content="en"` or `"pt"` on the outer + element. The toggle flips `hidden` on those, sets ``, and fires + `ai-for-dummies:languagechange` on `window`. It is a plain `.astro` island + that defers its own setup with `requestIdleCallback`; **do not** put + `client:idle` on it — that directive is framework-components only. +- **`src/components/islands/CopyPrompt.astro`** — one per button. Pass + `target="prompt-install-skills" | "prompt-basic" | "prompt-skills"`. Render + `

` exactly once on the + page; the island writes into it. Fill the `

` bodies
+  from the `handsOnPrompts` and `skillInstallPrompts` collections — 15b verified
+  those are byte-identical to the legacy `app.js` constants, and the clipboard
+  copies whatever you render, so do not reformat them.
+- **`src/components/islands/ReadingProgress.astro`** — replaces the legacy
+  `
` at the top of the page. + +Nothing else is missing. If you are about to write an island, you are doing +another task's work — report the gap instead. + +## Two things to expect + +- **The snapshot will not match by construction.** Dual-locale rendering emits + both languages into the HTML where today's page emits English plus a + Portuguese map inside `app.js`. Compare _rendered, language-filtered_ output + against today's page, and if `.agents/snapshots/` needs regenerating, say so + explicitly in your report with what changed and why — do not quietly rewrite a + snapshot to make a diff go away. +- **`renderHandsOn` takes no argument** and is not part of GuideSelector's + nine-group pattern. It is yours. Its name is asserted by `verify.mjs`.