docs: record why task 15d attempt 1 was rejected
verify-and-publish / gate (push) Successful in 6m14s
verify-and-publish / publish (push) Has been skipped

The attempt passed the gate and dropped Portuguese from the largest page
on a bilingual site: it scraped the legacy full-guide <main> 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 <noreply@anthropic.com>
This commit is contained in:
Marcos Paulo
2026-09-05 19:58:51 +00:00
parent 6d669d760a
commit 98ab6db3de
@@ -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(/<main>[\s\S]*<\/main>/)?.[0] ?? '';
```
and then `<div id="full-guide" set:html={guideMarkup} />`, 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 `<main>` 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