From 98ab6db3dea960a0e7597a98c401f75ad662dd64 Mon Sep 17 00:00:00 2001 From: Marcos Paulo Date: Sat, 5 Sep 2026 19:58:51 +0000 Subject: [PATCH] docs: record why task 15d attempt 1 was rejected The attempt passed the gate and dropped Portuguese from the largest page on a bilingual site: it scraped the legacy full-guide
at build time with `?raw` and `set:html` instead of assembling the page from the 19 block components and the content collections. That also couples the new page to a file task 20 deletes. Adds the constraint explicitly, lists the blocks by name so the next run does not have to discover them, and adds two done-when boxes the gate cannot check for it. Co-Authored-By: Claude Opus 5 --- .../task-15d-page-full-guide.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/plans/astro-refactor/task-15d-page-full-guide.md b/plans/astro-refactor/task-15d-page-full-guide.md index dd59ffa..c7dc093 100644 --- a/plans/astro-refactor/task-15d-page-full-guide.md +++ b/plans/astro-refactor/task-15d-page-full-guide.md @@ -130,3 +130,52 @@ They are yours. Lift them verbatim — same rule as everything else, both locale mandatory, no retranslation, copy the exact strings out of `app.js`. Whether they become a seventh collection or an inline constant in the page is your call; say which you chose and why. + +## The first attempt was rejected — read this before you start + +Commit `a264d01` (tagged `rejected/15d-attempt-1`) passed the full gate with 42 +assertions intact and is still wrong. It did this: + +```js +import legacyGuide from '../../full-guide/index.html?raw'; +let guideMarkup = legacyGuide.match(/
[\s\S]*<\/main>/)?.[0] ?? ''; +``` + +and then `
`, mounting the four +islands on top of the scraped markup. Three things that breaks: + +1. **Portuguese is gone.** The page contains zero `data-language-content` + attributes and zero `.pt` reads — every server-rendered detail panel + hard-codes `.en`. The legacy `
` is English-only; today's Portuguese + comes from `app.js`, which the Astro page does not load. The language + contract in `.agents/context/content-i18n.md` is binding and this violated + it. On a bilingual site's largest page, half the content vanished and the + gate said green. +2. **Zero of task 10's block components are used.** All 19 exist in + `src/components/blocks/`. See the list below. +3. **It couples the new page to the file task 20 deletes.** `/full-guide/` would + break the moment the legacy tree goes. + +**You may not read `full-guide/index.html` at build time.** Read it to learn +what to build; do not import it, scrape it, or `set:html` it. The page's markup +comes from components and content collections. + +### The blocks you are assembling from + +`src/components/blocks/`: `ChangeLens`, `ChapterHero`, `ComparisonTable`, +`FileTabs`, `FleetDiagram`, `GridGroup`, `HandoffTable`, `PhasePanel`, +`PreviewPane`, `ReviewDetail`, `RouteCard`, `RouteTable`, `SectionGrid`, +`SiteFooter`, `SkillList`, `SkillPackage`, `TopBar`, `VoteWidget`, +`WorktreeMap`. Plus `src/components/primitives/`. Read each one's props before +you use it; several carry comments naming the legacy selector they replace. + +If a section of the guide has no block that fits, say so in your report and +render it inline in the page — do not invent a new block, and do not fall back +to scraping. + +### Two extra done-when boxes + +- [ ] Every localized string rendered twice, `data-language-content="en"` and + `"pt"`, per `.agents/context/content-i18n.md` +- [ ] Zero imports of any file under `full-guide/`, and no `set:html` of legacy + markup