Fill the `pt` mirror fields on the /models/ chapter so the bilingual
contract stops being silently English-only. 24 fields: hero eyebrow,
title, lede, three effort-tier cards, and two sections (the routing
rule panel and the sequence steps).
The chapter reuses the same six surface primitives as landing.json
and summary.json, with one new shape: the routing-rule panel
(panelLabel + panelCode) on the first section, and a three-step
sequence (steps[].label / steps[].copy) on the second. The English
panel code mixes prose and prose-like tokens (→, ×, ·); the
Portuguese preserves all of those.
Translation register follows the conventions established by
src/content/commonSkills/*.json, the full-guide PT snapshot, and the
two prior commits on this branch (1baa314 landing.json, fd031b0
summary.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,
model-tier names). Numeric and tier labels (LOW / BAIXO, MEDIUM /
MÉDIO, HIGH / ALTO) translate as established by the efforts
collection. `Ambiguidade` for "ambiguity" follows phases/plan.json's
established usage; `execução delimitada` for "bounded execution"
mirrors routes/build.json. The English metaphor "spend judgment /
compounds" is rendered as `Invista julgamento onde ele compensa`,
which carries the same meaning in Portuguese; the literal calque
`compostos` would be opaque.
Verified by .agents/scripts/audit-translations.mjs: models.json
contribution to the offenders list drops from 24 to 0. Remaining
identical fields live in agents.json (24) and skills.json (16),
which will land in subsequent commits.
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>