docs: record the 15a/15b/15c contracts in the 15d brief
This commit is contained in:
@@ -56,3 +56,47 @@ re-points them to output-level checks; you do not.
|
|||||||
- [ ] Screenshots match at 560 / 800 / 1100 / 1600 px
|
- [ ] Screenshots match at 560 / 800 / 1100 / 1600 px
|
||||||
- [ ] `pnpm run gate` green — the full gate, not `verify` + `audit-ui` alone
|
- [ ] `pnpm run gate` green — the full gate, not `verify` + `audit-ui` alone
|
||||||
- [ ] 42 assertions intact
|
- [ ] 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
|
||||||
|
`<GuideSelector rootSelector="#full-guide" data={...} />`. `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 `<html lang>`, 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
|
||||||
|
`<p id="copy-status" role="status" aria-live="polite">` exactly once on the
|
||||||
|
page; the island writes into it. Fill the `<pre><code id="prompt-…">` 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
|
||||||
|
`<div class="reading-progress">` 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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user