Fill the `pt` mirror fields on the /agents/ chapter so the bilingual
contract stops being silently English-only. 24 fields: hero eyebrow,
title, lede, three role cards (FRAME/HAND OFF/PROVE), and two
sections (the worktree-map panel and the handoff steps).
The chapter adds two shapes that the prior translations did not need:
the FRAME/HAND OFF/PROVE chip labels (uppercase action verbs in the
source) and the tree-drawing `panelCode` block. Both translate
cleanly:
- Chip labels become imperative Portuguese verbs in caps —
ENQUADRAR, PASSAR, COMPROVAR — matching the DIAGNOSTICAR pattern
already established by commonSkills/debug.json.
- Tree-drawing characters (├──, └──, │) in panelCode are
language-neutral and preserved byte-for-byte. The English and
Portuguese forms are visually parallel at every column.
Translation register follows the conventions established by
src/content/commonSkills/*.json, the full-guide PT snapshot, and
the three prior commits on this branch (1baa314 landing.json,
fd031b0 summary.json, 160a324 models.json): imperative voice,
second-person `você`, sentence-case prose, all-caps labels, and
English kept for product nouns (skill, worktree, brief, gate,
pipeline, recall, prompt, enforcement, runs, orchestrator). `Worker`
becomes `Agente` because the card title is a prose role-noun (per
the glossary rule: worker in tab labels and code-like fragments,
agente in prose). `Brief` (the handoff step) stays English as a
product noun. `Passagem` for "Handoff" follows full-guide-pt.json.
Verified by .agents/scripts/audit-translations.mjs: agents.json
contribution to the offenders list drops from 24 to 0 (one field,
`steps.0.label` for "Brief", remains identical by design — Brief is
a product noun and is intentionally kept in English). Remaining
identical fields live in skills.json (16) and the 7-each numeric
card-label residues in landing.json and summary.json, which land in
subsequent commits.
The English side is byte-identical to origin/main, including the
tree-drawing panelCode. Confirmed via byte-level diff before commit.
Three strands of work on the chapter surface, all reading from the same
constraint: this site ships no runtime dependencies, so every effect below
is native CSS or an .astro component.
Motion (src/styles/motion.css, DrawRule.astro). A scroll-driven layer of
reveals, hero parallax, section depth, and a hairline that paints itself
along its path, scrubbed by `animation-timeline: view()` — 0KB against
lottie-web's ~60KB gzipped on the main thread. Every scrubbed rule sits
inside `prefers-reduced-motion: no-preference` and `@supports`, so a
Firefox reader or an opted-out one gets the complete static page rather
than one with holes in it. Ranges key to `cover 40%`-`cover 75%` where the
motion is meant to be watched: `view()` ranges key to first visibility,
which on a 2600px page is long before anyone is reading the section.
`.agents/skills/motion/references/scroll-driven.md` records the technique
and the two ways `pathLength` normalisation was broken while building it.
Diagrams (StepFlow.astro, WorktreeMap.astro). The `.steps` stack on
/skills/, /models/, and /agents/ becomes a numbered flow with connectors,
and /agents/ grows the worktree map it was describing in prose — reusing
the `trees` collection rather than a second set of strings. The map's
static variant is gated one class deeper than full-guide's page styles, so
the interactive copy renders byte-identical. Connectors are pseudo-elements,
not SVG: a stretched path desynchronises its own dash pattern, and a
straight line does not need one. Mermaid was considered and rejected at
~1MB of runtime.
Retrieval practice (/rules/, /skills/). A "check yourself" section of
native `<details>` question/answer pairs plus a citation row, both bilingual
through the existing `data-copy` toggle, and both JavaScript-free.
Two audit blind spots surfaced and are closed rather than worked around:
`build.inlineStylesheets: 'never'`, because Astro inlined sheets under ~4kB
and audit-ui.mjs reads its colour and size baseline from dist/_astro/*.css;
and `--columns` declared in the grid components, because an element-level
custom property is not a declaration the audit can resolve.
legacy/styles/skills.css is renamed and imported for its side effect. Inside
a *page*, `?url` resolves to that page's own CSS chunk whatever file it
names, so the link pointed at the wrong asset and the sheet was emitted but
never loaded — the package preview had been rendering unstyled and
overflowing since the Astro cutover.
verify.mjs gains 5 assertions for the recall sections and their Portuguese
copy: 89 now, against the 84 baseline.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fill the chapters collection that task 04 defined and tasks 05/06 left
empty. Five entries (landing, summary, models, agents, skills), each
with both en and pt locales on every localized field.
Landing and summary carry the six-card route map with non-uniform CTAs
(four "Open chapter →", one "Open lab →", one "Open desk →"); the
CTA text travels as cards[].cta and the destination as cards[].href,
both added in the schema change that landed first.
Models / agents / skills carry their hero + cards + sections + steps,
including the highlighted rule panels (ROUTING RULE / MAIN /
ORCHESTRATOR / package-anatomy hint) as section-level panelLabel /
panelCode / panelHint.
Strings copied verbatim from the existing HTML files (index.html and
the four chapter pages). Tasks 12 and 13 own the page migration;
this commit is data only.
Co-Authored-By: Claude Code <noreply@anthropic.com>