feat(i18n): translate models.json chapter to Brazilian Portuguese

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.
This commit is contained in:
Marcos Paulo
2026-09-06 18:30:37 -03:00
parent fd031b0842
commit 160a324317
+24 -24
View File
@@ -2,57 +2,57 @@
"id": "models", "id": "models",
"eyebrow": { "eyebrow": {
"en": "Model routing", "en": "Model routing",
"pt": "Model routing" "pt": "Roteamento de modelos"
}, },
"title": { "title": {
"en": "Choose the<br><em>engine.</em>", "en": "Choose the<br><em>engine.</em>",
"pt": "Choose the<br><em>engine.</em>" "pt": "Escolha o<br><em>motor.</em>"
}, },
"lede": { "lede": {
"en": "A model has a capability ceiling. Effort controls how much room it gets to reason. Route by uncertainty and verification cost.", "en": "A model has a capability ceiling. Effort controls how much room it gets to reason. Route by uncertainty and verification cost.",
"pt": "A model has a capability ceiling. Effort controls how much room it gets to reason. Route by uncertainty and verification cost." "pt": "Um modelo tem um teto de capacidade. O esforço controla quanto espaço ele ganha para raciocinar. Roteie por incerteza e custo de verificação."
}, },
"cards": [ "cards": [
{ {
"label": { "label": {
"en": "LOW", "en": "LOW",
"pt": "LOW" "pt": "BAIXO"
}, },
"title": { "title": {
"en": "Bounded rhythm", "en": "Bounded rhythm",
"pt": "Bounded rhythm" "pt": "Ritmo delimitado"
}, },
"copy": { "copy": {
"en": "Lookup, small edits, formatting, and transformations with clear checks.", "en": "Lookup, small edits, formatting, and transformations with clear checks.",
"pt": "Lookup, small edits, formatting, and transformations with clear checks." "pt": "Consultas, edições pequenas, formatação e transformações com checagens claras."
} }
}, },
{ {
"label": { "label": {
"en": "MEDIUM", "en": "MEDIUM",
"pt": "MEDIUM" "pt": "MÉDIO"
}, },
"title": { "title": {
"en": "Default work", "en": "Default work",
"pt": "Default work" "pt": "Trabalho padrão"
}, },
"copy": { "copy": {
"en": "Normal implementation where the contract is clear but context matters.", "en": "Normal implementation where the contract is clear but context matters.",
"pt": "Normal implementation where the contract is clear but context matters." "pt": "Implementação normal em que o contrato é claro, mas o contexto importa."
} }
}, },
{ {
"label": { "label": {
"en": "HIGH", "en": "HIGH",
"pt": "HIGH" "pt": "ALTO"
}, },
"title": { "title": {
"en": "Ambiguity", "en": "Ambiguity",
"pt": "Ambiguity" "pt": "Ambiguidade"
}, },
"copy": { "copy": {
"en": "Planning, architecture, security judgment, and hard failures.", "en": "Planning, architecture, security judgment, and hard failures.",
"pt": "Planning, architecture, security judgment, and hard failures." "pt": "Planejamento, arquitetura, julgamento de segurança e falhas difíceis."
} }
} }
], ],
@@ -60,59 +60,59 @@
{ {
"eyebrow": { "eyebrow": {
"en": "Two knobs", "en": "Two knobs",
"pt": "Two knobs" "pt": "Dois controles"
}, },
"title": { "title": {
"en": "Capability<br>× effort", "en": "Capability<br>× effort",
"pt": "Capability<br>× effort" "pt": "Capacidade<br>× esforço"
}, },
"panelLabel": { "panelLabel": {
"en": "ROUTING RULE", "en": "ROUTING RULE",
"pt": "ROUTING RULE" "pt": "REGRA DE ROTEAMENTO"
}, },
"panelCode": { "panelCode": {
"en": "strong model + high effort → frame ambiguity\nlight model + low effort → bounded execution\nraise one knob at a time → compare evidence", "en": "strong model + high effort → frame ambiguity\nlight model + low effort → bounded execution\nraise one knob at a time → compare evidence",
"pt": "strong model + high effort → frame ambiguity\nlight model + low effort → bounded execution\nraise one knob at a time → compare evidence" "pt": "modelo forte + esforço alto → enquadrar ambiguidade\nmodelo leve + esforço baixo → execução delimitada\nsuba um controle por vez → compare evidências"
} }
}, },
{ {
"eyebrow": { "eyebrow": {
"en": "Sequence", "en": "Sequence",
"pt": "Sequence" "pt": "Sequência"
}, },
"title": { "title": {
"en": "Spend judgment<br>where it <em>compounds.</em>", "en": "Spend judgment<br>where it <em>compounds.</em>",
"pt": "Spend judgment<br>where it <em>compounds.</em>" "pt": "Invista julgamento<br>onde ele <em>compensa.</em>"
}, },
"steps": [ "steps": [
{ {
"label": { "label": {
"en": "Plan", "en": "Plan",
"pt": "Plan" "pt": "Planejar"
}, },
"copy": { "copy": {
"en": "Strong model: scope, risks, acceptance, and worktree split.", "en": "Strong model: scope, risks, acceptance, and worktree split.",
"pt": "Strong model: scope, risks, acceptance, and worktree split." "pt": "Modelo forte: escopo, riscos, aceitação e divisão de worktrees."
} }
}, },
{ {
"label": { "label": {
"en": "Build", "en": "Build",
"pt": "Build" "pt": "Construir"
}, },
"copy": { "copy": {
"en": "Focused worker: smallest context and lightest model that can pass.", "en": "Focused worker: smallest context and lightest model that can pass.",
"pt": "Focused worker: smallest context and lightest model that can pass." "pt": "Worker focado: o menor contexto e o modelo mais leve que passa."
} }
}, },
{ {
"label": { "label": {
"en": "Review", "en": "Review",
"pt": "Review" "pt": "Revisar"
}, },
"copy": { "copy": {
"en": "Independent pass when missed issues cost more than the call.", "en": "Independent pass when missed issues cost more than the call.",
"pt": "Independent pass when missed issues cost more than the call." "pt": "Revisão independente quando erros perdidos custam mais que a chamada."
} }
} }
] ]