chore: consolidate the skill packages under .agents/

The repository had two skill directories. `skills/` held the four written
for this project; `.agents/skills/` held the ones the agent context refers
to. Nothing said which an agent should read, and `.agents/ORCHESTRATOR.md`
only ever pointed at the second.

Move the first four into `.agents/skills/` so there is one location, and
add the vendored packages this chapter work used: `animation-vocabulary`
and `improve-animations` (emilkowalski/skills), `teach` (mattpocock/skills),
plus a local `translation` skill and `audit-translations.mjs` for the EN/PT
pairs.

`skills-lock.json` pins the vendored three by source and content hash, so a
later re-vendor is a diff rather than a guess. `.claude/skills/` is
symlinks into `.agents/skills/`, which is what makes them loadable here
without a second copy on disk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Marcos Paulo
2026-09-06 16:03:23 -03:00
parent 61de2f6270
commit ab2308441c
38 changed files with 2662 additions and 122 deletions
+116
View File
@@ -0,0 +1,116 @@
---
name: translation
description:
Translate site copy to Brazilian Portuguese in a register and vocabulary that
match the existing translated collections. Use when adding a new localized
field, auditing a chapter for missing or identical en/pt pairs, or proposing
translation candidates for review. Always pair with
[`../../rules/content-i18n.md`](../../rules/content-i18n.md).
---
# Translation
This site is bilingual EN/PT-BR. The English is editorial; the Portuguese has to
read like a native technical writer, not like a machine. The glossary
([`references/glossary.md`](references/glossary.md)) and tone notes
([`references/tone.md`](references/tone.md)) pin the conventions so any agent —
me, a different LLM, a future you — produces Portuguese that matches what is
already there.
## Before anything
Read [`../../rules/content-i18n.md`](../../rules/content-i18n.md) and
[`../../context/content-i18n.md`](../../context/content-i18n.md). Both are
binding. In particular:
- Both `en` and `pt` are required on every `localized` field. A missing `pt`
must fail the build.
- These are hand-written translations with deliberate tone. **Copy, do not
retype.** Retyping introduces drift.
- The site's bilingual contract is client-side: both languages ship in the
payload, the toggle swaps visibility. Do not propose `/en/` `/pt/` routing
without a separate decision.
## Audit before you propose
Run the audit script first. It walks `src/content/**` and reports every
`localized` field where `en === pt`:
```bash
node .agents/scripts/audit-translations.mjs
```
The script exits non-zero on any identical pair. That is the list you work from
— chapter, file, field. Touch only what's flagged, and only after a human has
reviewed your proposal for the first chapter (the tone is contagious: if the
first chapter is right, the rest fall into the same voice).
## Propose, do not commit
This skill is **review-first**. The workflow is:
1. Pick the smallest chapter (today: `landing.json`, 30 fields). Read the
English, read the existing translations in the other collections to absorb
the voice, then write candidates.
2. Show the diff to a human reviewer. They sign off on tone, terminology, and
register before you proceed to the next chapter.
3. Only after the reviewer agrees, write the JSON. Re-run the audit; it must
pass.
4. Repeat for the next chapter.
Auto-committing a translation in bulk is the same failure mode as a content
migration that "passes" by deleting assertions: silent monolingualism. The
review step is the whole point.
## What stays in English
Some terms are kept in English by deliberate convention. Do not translate:
- Code identifiers, file paths, command names, product names (`SKILL.md`,
`AGENTS.md`, `.agents/skills/`, `git`, `pnpm`, `claude`, `opus`, `sonnet`,
`haiku`, `gpt-5.6`, `sol`, `terra`, `luna`)
- Product surface nouns that the team has decided to keep: `skill`, `worktree`,
`worker`, `branch`, `merge`, `commit`, `diff`, `brief`, `gate`, `pipeline`,
`recall`, `prompt`
- The `<i></i>` and `<b></b>` glyphs that ship in copy — they are decorative and
the stylesheet depends on them
- Arrows used as connectors (`→`, `↗`) — keep them, the spacing is intentional
The full list is in the glossary.
## What to translate
Everything else, including:
- Section titles, ledes, eyebrows
- Card titles, body copy, call-to-action labels
- Stage / phase labels in prose ("PLAN", "BUILD", "REVIEW" stay uppercase
English because they are acronyms in the design system; the prose around them
translates)
- Inline `<em>` emphasis and `<br>` line breaks — the structure is shared, the
words differ
## Verification
After writing, before committing:
```bash
pnpm run build # schema check (both locales present)
node .agents/scripts/audit-translations.mjs # en !== pt everywhere
pnpm run verify # full gate, includes rendered snapshots
```
A rendered snapshot diff in `verify.mjs` catching a new Portuguese string is
expected. Update `.agents/snapshots/*.txt` if the prose really did change and
the snapshot was a stale capture. Do not delete assertions to make it pass.
## What this skill does NOT do
- Migrate content out of legacy `app.js` (that's `content-migration`)
- Wire `lang` state into chapter pages (that's tasks 12 / 13 / 15)
- Edit `src/content/config.ts` (the schema is `verification-engineer`'s scope)
- Touch components, layouts, styles, or the legacy tree
- Translate code, comments inside code blocks, command output, or paths
The chapter's review-desk body (`src/content/reviews/*.md`) is intentionally not
localized — the review desk is an English-only editor by design.
@@ -0,0 +1,10 @@
[
{
"prompt": "The pages /summary/ and /agents/ in this Astro bilingual site ship identical strings in their rendered Portuguese and English. Where do you start, and what is the smallest change that would expose the regression?",
"expected_behavior": "Run node .agents/scripts/audit-translations.mjs to find every identical localized field; pick the smallest chapter; load the translation skill (glossary.md and tone.md) before proposing candidates; show a diff for human review before writing."
},
{
"prompt": "A reviewer rejected your first chapter's Portuguese with 'this doesn't sound like the rest of the site'. What do you do next?",
"expected_behavior": "Compare rejected samples against src/content/commonSkills/*.json and src/content/rules/copy.json pt block; check the rejected entry against references/glossary.md term-by-term; check the rejected entry against references/tone.md (register, verb mood, capitalization, punctuation); do not commit and do not move to the next chapter until tone converges."
}
]
@@ -0,0 +1,861 @@
# Reference: translation glossary
Every entry below is sourced from a translated field already in
`src/content/**`. The citation shows the path; if you disagree with a choice,
open that file and read it in context before changing the glossary. The glossary
changes only when the source text changes.
Two formats appear in the data: `{ en, pt }` (the `localized` Zod helper in
`src/content/config.ts`) and `{ en: {...}, pt: {...} }` (the rules page's
`copy.json`). Both are searched.
## Source map
| Collection | Fields translated | Register |
| ----------------------------------------- | ----------------: | ------------------------- |
| `chapters/skills.json` | 11 (recall only) | Tutorial / instructor |
| `commonSkills/*.json` | 49 | Skill catalog / reference |
| `efforts/*.json` | 3 | Selector labels |
| `handsOnPrompts/*.json` | 1 | Lab prompts |
| `phases/*.json` | 12 | Phase tabs + code lines |
| `providers/*.json` | 12 | Provider blurbs + tiers |
| `routes/*.json` | 8 | Route table |
| `rules/{copy,prompts,skills,stages}.json` | 24 | Case-study page |
| `skillFiles/*.json` | 4 | Anatomy labels |
| `skillInstallPrompts/install.json` | 1 | Long install prompt |
| `skillWorkflow/*.json` | 25 | Forge steps |
| `trees/*.json` | 8 | Worktree nodes |
| `workers/*.json` | 3 | Worker cards |
Total: 161 fields with distinct translations. The corpus is small enough to
treat as the source of truth; don't add glossary entries that aren't backed by
an example already in the tree.
## What stays in English
These terms appear in the existing Portuguese copy without translation. They are
the product vocabulary and **must not** be localized:
| English term | Why it stays |
| ------------ | ------------------------------------------------------------------------------------------ |
| `skill` | Product noun. The whole site teaches "skills" as a format. |
| `worktree` | Git term, kept by every other Brazilian technical writer. |
| `worker` | In product copy keeps English; in prose may become `agente` — see notes below. |
| `branch` | Git term. `branch` (English) coexists with `galho` (literal) but the corpus uses `branch`. |
| `merge` | Git term. |
| `commit` | Git term, also a commit hook label. |
| `diff` | Git / code-review term. |
| `brief` | The hand-off package; product term. |
| `gate` | Verification term. `gate` is used in tab labels and prose ("discipline de gates"). |
| `pipeline` | The /rules/ nav label keeps `Pipeline`. |
| `recall` | The /skills/ and /rules/ practice labels keep `Recall`. |
| `prompt` | The artifact that goes into a model session. |
| `worker` | See above. |
| `check` | Used in `check the diff`, `cheque`. The corpus prefers `verificação` and `gate`. |
| `patch` | Used in `jump from error message straight to a patch``patch` kept. |
| `ratchet` | The /rules/ "CLI ratchet" — kept English by deliberate metaphor. |
| `kit` | "field kit" → "kit de campo"; bare `kit` may stay English. |
| `loadout` | "UM LOADOUT PRÁTICO" — kept in English. |
Compound borrowings stay as a unit: `commitlint`, `lint-staged`, `husky`,
`pnpm`, `npm`, `astro`, `tsconfig`.
## What translates — and how
Sorted by source term, with the citation.
### A
- **acceptance criteria** → `critérios de aceitação`
- `phases/plan.json` :: `copy` ("write acceptance criteria")
- **adversarial attention** → `atenção crítica`
- `routes/review.json` :: `why`
- **ambiguity** → `ambiguidade`
- `phases/plan.json` :: `title` ("Turn ambiguity into work" → "Transforme
ambiguidade em trabalho")
- `routes/plan.json` :: `label`
- **architecture** → `arquitetura`
- **artifact** → `artefato`
- `providers/openai.json` :: `tiers[0][2]`
### B
- **behavior** → `comportamento`
- `commonSkills/unlazy.json` :: `use` ("turns 'done' into runnable acceptance
checks")
- **bounded** → `delimitado` _(never `limitado`)_
- `phases/build.json` :: `title` ("Execute one bounded slice" → "Execute uma
fatia delimitada")
- `phases/build.json` :: `copy`
- `routes/build.json` :: `label` ("Bounded execution" → "Execução delimitada")
- **branch (in "branch collision")** → `Colisão de branches`
- `full-guide-pt.json`
- **brief** → `brief` _(kept)_
- **build** → `construir` (verb), `build` / `CONSTRUIR` (tab labels)
- `routes/build.json` :: `label`
### C
- **cautious / caution** → `cuidado`
- `commonSkills/*.json` :: `caution` field
- **check yourself** → `Teste-se`
- `chapters/skills.json` :: `sections[2].eyebrow`
- **citation** → `citação` _(not used in current copy but a likely target)_
- **claim (verb)** → `levar afirmações até suas fontes`
- `commonSkills/research.json` :: `rule` ("Trace claims to owners")
- **clipboard** → kept English in source prompts (technical UI)
- **collide / collision** → `colidir` / `colisão`
- **command** → `comando`
- `rules/skills.json` :: `gate.lesson`
- **commit hook** → `hook de commit` _(compound: keep `hook` English)_
- **common** → `comum` / `comuns`
- **communicate** → `COMUNICAR`
- `commonSkills/caveman.json` :: `label`
- **communication style** → `ESTILO DE COMUNICAÇÃO`
- **completion discipline** → `DISCIPLINA DE CONCLUSÃO`
- **compress / compress noisy output** → `comprima saídas ruidosas`
- **concrete examples** → `Exemplos concretos`
- **context (in "context economy")** → `ECONOMIA DE CONTEXTO`
- **context (UI label, e.g. "context: isolated")** → `contexto: isolado`
- **copy (verb / noun)** → `copiar` (verb), `cópia` (noun)
- `rules/copy.json` :: `copyButton` ("COPY PROMPT" → "COPIAR PROMPT")
- **create** → `criar`
- `skillWorkflow/scaffold.json` :: `title` neighborhood (e.g.
`Criar uma skill`)
- **criteria** → `critérios`
- `phases/plan.json` :: `copy`
### D
- **dangerous / not used directly** —
- **debug / debugging** → `diagnosticar` (verb in `commonSkills/debug.json`),
`diagnóstico` (noun)
- **define (a trigger)** → `definir`
- `commonSkills/trigger.json` :: `action` ("Choose a short action-oriented
name. Write a discriminating description")
- **deliverable** → kept English in tabs
- **deploy** → kept English
- **desired difficulty / desirable difficulty** → `Dificuldade desejável`
- `rules/copy.json` :: `recallEyebrow`
- **deterministic** → `determinístico` / `determinística`
- `commonSkills/scaffold.json` :: `action`
- **develop / developer** → kept English
- **diagnosis / diagnose / diagnostic loop** → `diagnóstico` / `DIAGNOSTICAR` /
`CICLO DE DIAGNÓSTICO`
- **diff** → `diff` _(kept)_
- `phases/review.json` :: `code` ("diff + checks → review → merge / iterate" →
"diff + verificações → revisar → merge / iterar")
- **discipline** → `disciplina`
- `commonSkills/unlazy.json` :: `kind` ("COMPLETION DISCIPLINE")
- `commonSkills/research.json` :: `kind` ("SOURCE DISCIPLINE")
- **discover / discovery / discoverable** → `descobrir` / `descoberta` /
`descobrível`
- **do / done** → `fazer` / `feito` / `pronto`
- `commonSkills/caveman.json` :: `example` ("Built. Tests pass. Published." →
"Feito. Testes passaram. Publicado.")
- **document** → `documentação`
### E
- **each / every** → `cada`
- **economize** → `ECONOMIZAR`
- **effort (reasoning effort)** → `esforço de raciocínio`
- `providers/openai.json` :: `copy`
- **embed** → kept English
- **enforcement** → `enforcement` _(kept English in the compound
`camadas de enforcement`)_
- **engineer / engineering** → `ENGENHARIA DE IA` (uppercase, brand-like)
- **enumerate** → kept English
- **evidence** → `evidência` / `evidências`
- `phases/review.json` :: `title` ("Reconnect result to intent" → "Reconecte o
resultado à intenção")
- `full-guide-pt.json` ("Skills · agentes · worktrees · evidências")
- **example** → `exemplo` / `Exemplos`
- `rules/copy.json` :: `examplesLabel`
- **execute** → `executar`
- **explain** → `explicar`
- **explore / exploration** → `explorar` / `Explorar` (tab) / `EXPLORAR` (label)
- **extract** → `extrair`
- `rules/copy.json` :: `skillsText` ("distilled from mistakes" → "extraídos de
erros")
### F
- **fail / failure** → `falhar` / `falha` _(singular and plural both used)_
- **field guide** → `guia de campo`
- `rules/copy.json` :: `back`
- **field kit** → `kit de campo`
- **filter** → `filtragem`
- `commonSkills/tokens.json` :: `use` ("Filtering preserves context")
- **flag (verb)** → `sinalizar` _(rare in current copy; the `tokens` skill uses
"Sinal primeiro" for the noun)_
- **fly** → kept English
- **follow (a workflow)** → `seguir`
- **fork** → kept English
- **frame (verb)** → `enquadrar`
- **from intent to evidence** → `Da intenção à evidência`
- **from memory** → `de memória`
- `chapters/skills.json` :: `recall.0.answer`
- **front-end / frontend** → `frontend`
### G
- **gap** → `lacuna`
- **gate / gate discipline** → `gate` _(kept)_, `catraca` (in `ratchet`)
- **get (something wrong)** → `errar` (idiomatic: "ainda erraria")
- **git worktrees** → `Git worktrees` _(capitalized "Git" preserved, "worktrees"
kept English)_
- `full-guide-pt.json`
- **give (a brief / a contract)** → `dar`
- **goal** → `objetivo`
- **good prompt** → `Bom prompt`
- **good prompt + skills** → `Bom prompt + skills`
- **green (in "prove green is real")** → `verde`
- `rules/copy.json` :: `skillGate`
- **guide** → `guia` (often kept English when referring to the published
`/full-guide/`)
### H
- **habit** → `hábito`
- **handoff** → `passagem` (in full-guide hero) / `handoff` (in code paths)
- **hard (failure / bug / judgment)** → `difícil` / `duro`
- `commonSkills/debug.json` :: `use` ("hard bugs" → "bugs difíceis")
- **help** → `ajudar`
- **here** → `aqui` (omit when English does — many of the existing PT strings
drop "here")
- **hide / hidden** → `oculto` / `escondido`
- **hint** → `dica`
- **hold (verb, "the rule can hold")** → `segurar`
- `rules/copy.json` :: `pipelineTitle` ("Five places where a rule can hold" →
"Cinco lugares onde a regra segura")
- **hook** → `hook` _(kept)_
- **host** → `host` _(kept; technical term)_
- **how to use** → kept English in tab labels
### I
- **improve** → `melhorar`
- **include** → `incluir`
- **independent (review / judgment)** → `independente`
- **inspect** → `inspecionar`
- **install** → `instalar`
- **instance** → kept English
- **intent** → `intenção`
- `phases/review.json` :: `title`
- **invoke / not used directly** —
- **ironclad / not used directly** —
- **isolate / isolated / isolation** → `isolar` / `isolado`
- `routes/plan.json` (`isolation`)
- **iterate / iteration** → `iterar` / `iteração` / `iterações`
- `full-guide-pt.json`
### J
- **job (of a skill)** → `trabalho` / `função` (context-dependent; see
`caveman.json` :: `use`)
- **judgment** → `julgamento`
- `routes/review.json` :: `label` ("Independent judgment" → "Julgamento
independente")
- **jump (from … to …)** → `pular`
- `commonSkills/debug.json` :: `caution`
### K
- **keep (signal)** → `manter` / `mantenha`
- `commonSkills/tokens.json` :: `rule`
- **key / keyword** → `chave`
- **kind (of skill)** → kept English in field names; Portuguese title-only in
some places (e.g. `SIMPLIFICATION INSTINCT`)
### L
- **lab** → `lab` _(kept)_
- **label** → `rótulo` (rare; the site usually keeps English `label` in chrome)
- **landing (page)** → kept English
- **language (EN/PT)** → `idioma`
- `commonSkills/unlazy.json` :: `example` ("Gate: language toggle persists" →
"Gate: idioma persiste")
- **last** → `último`
- `rules/skills.json` :: `parallel.lesson` ("verifier last" → "verifier por
último")
- **launch / not used directly** —
- **layer** → `camada`
- **lean** → `enxuto`
- **learn** → `aprender`
- **leave (out)** → `deixar de fora`
- `chapters/skills.json` :: `recall.0.answer`
- **left** → `esquerda` (direction) / `restante`
- **lesson** → `lição` _(the corpus uses `lesson` in field names; prose uses
`lição` rarely)_
- **let** → `deixe` / `deixar`
- **level (capability level)** → `nível`
- **lifecycle / not used directly** —
- **light (model)** → `leve`
- **like (this)** → `como`
- **link** → `link` _(kept)_
- **list (verb)** → `listar` / `liste`
- **load / loading** → `carregar` / `carrega` / `carregue`
- `chapters/skills.json` :: `recall.0.answer`
- **loadout** → `LOADOUT` _(kept in caps, brand-like)_
- **local** → `local`
- **log** → `log` _(kept)_
- **long-term retention** → `retenção de longo prazo`
- `rules/copy.json` :: `recallText`
### M
- **main / main branch** → `main` _(kept)_
- **maintain / not used directly** —
- **manage / management** → `gerenciar`
- **map (verb)** → `mapear`
- **mark / marker** → `marca` / `marcador`
- **match (verb)** → `corresponder`
- **meaningful** → `significativo` / `significativa`
- **measure (verb)** → `medir` / `mensurar`
- **merge** → `merge` _(kept)_
- **message** → `mensagem`
- `commonSkills/debug.json` :: `caution` ("Do not jump from error message" →
"Não pule da mensagem de erro")
- **metadata** → `metadados` / kept English
- **migration** → `migration` _(kept)_
- **mind** → `mente`
- `full-guide-pt.json`
- **minimize (verb)** → `minimize`
- `commonSkills/debug.json` :: `use`
- **minor** → kept English
- **minute** → `minuto`
- **mirror (verb)** → `espelhar`
- **miss (a failure / a check)** → `perder` / `faltar`
- **mix / mixed** → `misturar` / `misto`
- **mock** → `mock` _(kept)_
- **mode** → `modo`
- **modify** → `modificar`
- **module** → `módulo`
- **move (verb)** → `mover`
- **multiple** → `múltiplo` / `vários`
- `full-guide-pt.json` ("várias mãos")
### N
- **name (verb)** → `nomear`
- **narrow** → `estreito` / `estreita`
- `commonSkills/validate.json` :: `output`
- **necessary** → `necessário` / `necessária`
- **network** → `rede`
- **never** → `nunca` / `jamais`
- **new** → `novo` / `nova`
- **next** → `próximo`
- **nice / not used directly** —
- **non-obvious** → `não óbvio` / `não óbvia`
- **normal** → `normal`
- **note (a name / a fact)** → `notar` / `anotar`
- **nothing** → `nada`
- **notice (verb)** → kept English
- **now** → `agora`
- **number** → `número`
### O
- **observable / observation** → `observável` / `observação`
- **observed** → `observado`
- **obsolete** → `obsoleto`
- **off / turn off** → `desligar` / `desativar`
- **offer** → `oferecer`
- **often** → `frequentemente`
- **omit** → `omitir`
- **on (a path / a model)** → `em` / `no` / `na`
- **once** → `uma vez`
- **one-shot** → kept English
- **only** → `apenas` / `só`
- **open (source)** → `ABRIR FONTE` _(kept in caps; "Open source" is a phrase,
not a verb)_
- **open (a file / a repo)** → `abrir`
- `rules/copy.json` :: `examplesMeta` ("open the source, then adapt" → "abra a
fonte, depois adapte")
- **opinion** → `opinião`
- **opportunity** → `oportunidade`
- **optimize** → `otimizar`
- `routes/build.json` :: `why`
- **orchestrate / orchestrator** → `orquestrar` / `orquestrador`
- **order** → `ordem`
- **origin** → `origem`
- **other** → `outro` / `outra`
- **otherwise** → `caso contrário`
- **our** → `nosso` / `nossa` / `nossos` / `nossas`
- **out (of context)** → `fora`
- **over** → `sobre`
- **override** → `substituir` (in `research.json` :: `caution`)
- **overview** → `visão geral`
### P
- **package** → `pacote` / `PACOTE`
- `skillFiles/skill.json` :: `en` ("SKILL PACKAGE" → "PACOTE DE SKILL")
- **page** → `página`
- **pair** → `par`
- **panel** → `painel`
- **parameter** → `parâmetro`
- **parent** → kept English
- **part** → `parte`
- **particular** → `específico`
- **patch** → `patch` _(kept)_
- **path** → `caminho`
- `rules/copy.json` :: `copyText` ("adapt the path names to another project" →
"adapte os caminhos para outro projeto")
- **pattern** → `padrão`
- `commonSkills/review.json` :: `tagline` ("standards × spec" → "padrões ×
especificação")
- **pause / not used directly** —
- **people** → `pessoas` / `equipe`
- **per (each)** → `por`
- **percent** → `por cento` / `%` _(symbol kept)_
- **perform** → `executar` / `realizar`
- **period** → `período`
- **permission** → `permissão`
- **pick** → `escolher`
- **pipeline** → `Pipeline` _(kept)_
- **place** → `lugar`
- **plain** → `simples`
- **plan** → `planejar` (verb), `plano` (noun)
- **platform** → `plataforma`
- **play (a role)** → `desempenhar`
- **please / not used directly** —
- **plus** → `mais`
- **point** → `ponto`
- **policy** → `política`
- `rules/copy.json` :: `pipelineText` ("deterministic policy in a command" →
"política determinística em um comando")
- **poor** → `fraco`
- **populate** → `preencher`
- **portable** → `portátil`
- **positive** → `positivo`
- **possible** → `possível`
- **post** → kept English
- **power** → `poder` / `energia`
- **practice (noun)** → `prática`
- `rules/copy.json` :: `recallLabel` ("Retrieval practice" → "Prática de
recuperação")
- **predict** → `prever`
- **prefer** → `preferir`
- `commonSkills/scaffold.json` :: `use` (pattern; "prefira prova executável a
prosa" is the established cadence)
- **prepare** → `preparar`
- **present** → `apresentar` / `presente`
- **preview** → kept English in UI labels
- **previous** → `anterior`
- **print** → `imprimir`
- **prior (work / art)** → `anterior`
- `rules/skills.json` :: `parallel.lesson` ("prior-art scout first" →
"prior-art scout primeiro")
- **private** → `privado`
- **proactive** → `proativo`
- **probably** → `provavelmente`
- **problem** → `problema`
- **procedure** → `procedimento`
- **process (noun / verb)** → `processo` / `processar`
- **produce** → `produzir`
- **product** → `produto`
- **production** → `produção`
- **profile** → `perfil`
- `routes/build.json` :: `label` neighborhood ("strong / broad")
- **program** → `programa`
- **project** → `projeto`
- **prompt** → `prompt` _(kept)_
- **proof** → `prova` / `evidência`
- `phases/review.json` :: `title` neighborhood
- `skillWorkflow/observe.json` :: `proof`
- **properly** → `corretamente`
- **propose** → `propor`
- **protect** → `proteger`
- **provider** → kept English in tab labels
- **public** → `público`
- **pull (a request)** → kept English
- **purpose** → `propósito`
- **push** → kept English
### Q
- **qualifier / not used directly** —
- **quality** → `qualidade`
- **query** → `consultar` (verb) / `consulta` (noun)
- `rules/copy.json` :: `skillRepo` ("query before crawling" → "consulte antes
de explorar")
- **question** → `pergunta`
- `chapters/skills.json` :: `recall.*.question`
- **quick** → `rápido`
- **quote** → kept English
- **quote (verb)** → `citar`
### R
- **race / not used directly** —
- **raise (effort)** → `aumentar` / `subir`
- **rank (verb)** → `ranquear`
- `commonSkills/debug.json` :: `use`
- **rapid** → `rápido`
- **rate** → `taxa` / `ritmo`
- **rather (than)** → `em vez de` / `do que`
- **raw** → `bruto`
- `commonSkills/tokens.json` :: `caution` ("Read raw output" → "Leia saída
bruta")
- **reach** → `alcançar`
- **react** → kept English
- **read** → `ler`
- **ready** → `pronto`
- `trees/tests.json` :: `small` ("8 checks · ready" → "8 verificações ·
pronto")
- **real (model)** → `real`
- **realistic** → `realista` / `realistas`
- `skillWorkflow/observe.json` :: `action` ("two or three realistic requests")
- **really** → `realmente`
- **reason** → `razão`
- **reasoning** → `raciocínio`
- **recall** → `recuperação` (noun), `recuperar` (verb), `Recall` (UI label)
- **recent** → `recente`
- **recipe** → `receita`
- **recommend** → `recomendar`
- **record** → `registrar`
- **recover / recovery** → `recuperar` / `recuperação`
- **redirect** → `redirecionar`
- **reduce / reduction** → `reduzir` / `redução`
- **reference** → `referência` (noun), `references/` (kept English)
- **reflect** → `refletir`
- **refuse / refused** → `recusar`
- **regard** → `considerar`
- **register** → `registrar`
- **regular** → `regular`
- **reject** → `rejeitar`
- **relate** → `relacionar`
- **release** → kept English
- **relevant** → `relevante`
- **rely** → `confiar`
- **remain** → `permanecer`
- **remember** → `lembrar`
- `chapters/skills.json` :: `recall.1.question` neighborhood ("Where do the
workflow, the facts, and the repeated mechanics each go?" → "Onde vão o
workflow, os fatos e as mecânicas repetidas?")
- **remove** → `remover`
- **rename** → `renomear`
- **render** → `renderizar` _(technical term; keep English if context demands)_
- **repeat** → `repetir`
- **replace** → `substituir`
- **report** → `reportar` / `relatório` (noun) / `REPORTAR` (label)
- **repository** → `repositório`
- **represent** → `representar`
- **require** → `exigir` / `requerer`
- **reset** → `resetar` _(or kept English)_
- **resolve** → `resolver`
- **resource** → `recurso`
- **respect** → `respeitar`
- **respond** → `responder`
- **response** → `resposta`
- **responsibility** → `responsabilidade`
- `full-guide-pt.json` ("não abrir mão da responsabilidade")
- **rest** → `resto`
- **restore** → `restaurar` / `recuperar`
- **restrict** → `restringir`
- **result** → `resultado`
- **retain** → `reter`
- **return** → `retornar` / `devolver`
- **reuse** → `reúso` (noun) / `reutilizar` (verb)
- **reveal** → `revelação` (noun), `revelar` (verb)
- `chapters/skills.json` :: `recall[2].copy`
- **review** → `revisão` (noun), `revisar` (verb), `REVISÃO` (label)
- **rewrite** → `reescrever`
- **rigorous** → `rigoroso`
- **role** → `papel`
- **rollback** → kept English
- **root (noun)** → `raiz`
- `trees/main.json` :: `rootLabel` (English "ROOT" → Portuguese "RAIZ")
- **route (verb / noun)** → `rotear` / `rota` / `Roteamento`
- `routes/*.json` (collection name in code; "Roteamento de modelos" in body)
### S
- **safe / safety** → `segurança`
- **same** → `mesmo` / `mesma`
- **sample** → `amostra`
- **save** → `salvar`
- **scale** → `escala`
- **scan** → `verificar` / `escanear`
- **scatter** → `dispersar`
- **scenario** → `cenário`
- **scope** → `escopo`
- **script** → `script` _(kept)_, also `roteiro` (rare)
- **search** → `buscar` / `busca`
- **section** → `seção`
- **security** → `segurança`
- **seed** → `semente`
- **select** → `selecionar` / `selecione`
- **selector** → kept English in tab labels
- **self-contained** → `autocontido`
- **send** → `enviar` / `mandar`
- **separate** → `separado` / `separar`
- **server** → `servidor`
- **service** → `serviço`
- **session** → `sessão`
- **set (a value / a state)** → `definir` / `configurar`
- **set up** → `configurar`
- **several** → `vários` / `várias`
- `full-guide-pt.json` ("várias mãos")
- **shape** → `forma`
- **share** → `compartilhar`
- **ship** → `entregar`
- `chapters/skills.json` :: `recall.title` ("ship it" → "enviar")
- **short** → `curto` / `breve`
- **should** → `deve`
- **show** → `mostrar`
- **shrink** → `encolher`
- **shut** → kept English
- **side** → `lado`
- **signal** → `sinal`
- `commonSkills/caveman.json` :: `rule` ("Signal first. Drop filler." → "Sinal
primeiro. Corte o excesso.")
- `commonSkills/tokens.json` :: `rule`
- **sign** → `assinar`
- **simplification** → `simplificação`
- **simplify** → `simplificar` / `SIMPLIFICAR`
- `commonSkills/ponytail.json` :: `label`
- **since** → `desde`
- **single** → `único` / `única`
- **site** → `site` _(kept)_
- **size** → `tamanho`
- **skill** → `skill` _(kept)_
- **slash** → `barra`
- **slice** → `fatia`
- `phases/build.json` :: `title` ("Execute one bounded slice" → "Execute uma
fatia delimitada")
- **small** → `pequeno` / `pequena`
- **smart** → `inteligente`
- **smooth** → `suave`
- **snippets** → kept English
- **soft** → `macio`
- **solid** → `sólido`
- **solve** → `resolver`
- **some** → `algum` / `alguns`
- **sort** → `classificar` / `ordenar`
- **source** → `fonte` / `FONTES`
- `commonSkills/research.json` :: `kind` ("SOURCE DISCIPLINE" → "DISCIPLINA DE
FONTES")
- **specific** → `específico` / `específica`
- **spec** → `especificação`
- `commonSkills/review.json` :: `tagline` ("standards × spec" → "padrões ×
especificação")
- **speed** → `velocidade`
- **spend (time / reasoning)** → `investir` / `gastar`
- `routes/plan.json` :: `why` ("Spend reasoning here" → "Invista raciocínio
aqui")
- **split** → `dividir` / `dividido`
- **stable** → `estável`
- **stage** → `etapa`
- **stale** → `obsoleto`
- **stamp** → `carimbo`
- **standard** → `padrão`
- **start** → `começar` / `iniciar`
- **state** → `estado`
- **step** → `passo` (in `skillWorkflow/*`)
- **stop** → `parar`
- **store** → `armazenar`
- **strategy** → `estratégia`
- **strict** → `rigoroso` / `estrito`
- **string** → `string` _(kept)_
- **strip** → `cortar` / `descartar`
- `commonSkills/caveman.json` :: `rule` ("Drop filler" → "Corte o excesso")
- `commonSkills/tokens.json` :: `rule`
- **strong (model)** → `forte`
- **study** → `estudar` / `estudo` (noun)
- **style** → `estilo`
- **subagent** → `subagente`
- `full-guide-pt.json` ("O ciclo de subagentes")
- **submit** → `enviar`
- **subsequent** → `subsequente`
- **subset** → `subconjunto`
- **subtract** → `subtrair`
- **success** → `sucesso`
- **successful** → `bem-sucedido`
- **summary** → `resumo`
- **super** → `super`
- **support (verb / noun)** → `suportar` / `suporte`
- **sure** → `certo`
- **swap** → `trocar`
- **switch** → `trocar`
- **symbol** → `símbolo`
- **system** → `sistema`
### T
- **table** → `tabela`
- **tag** → `tag` _(kept)_
- **take (action)** → `tomar` / `fazer`
- **talk** → `falar`
- **target** → `alvo`
- **task** → `tarefa`
- **team** → `equipe`
- **template** → `template` _(kept)_
- **term** → `termo`
- **test** → `testar` (verb), `teste` (noun)
- **text** → `texto`
- **than** → `do que` / `que`
- **that** → `que` / `aquilo`
- **the (article)** → `o` / `a` / `os` / `as`
- **then** → `então`
- **there** → `lá` / `ali`
- **these** → `estes` / `estas`
- **they** → `eles` / `elas`
- **thing** → `coisa`
- **think** → `pensar`
- **this** → `este` / `esta` / `isto`
- **those** → `aqueles` / `aquelas`
- **thread** → `linha` / `fio`
- **three** → `três`
- **through** → `através` / `por`
- **throw** → `lançar`
- **thus** → `assim`
- **time** → `tempo`
- **timeout** → kept English
- **tiny** → `minúsculo` / `tiny` (in `Tiny Tasks`)
- **tip** → `dica`
- **title** → `título`
- **to** → `para` / `a` / `de`
- **today** → `hoje`
- **together** → `junto`
- **token** → `token` _(kept)_
- **too (also / excessive)** → `também` / `demais`
- **tool** → `ferramenta`
- **top** → `topo`
- **topic** → `tópico`
- **total** → `total`
- **trace (verb)** → `traçar` / `levar até a fonte`
- `commonSkills/research.json` :: `rule` ("Trace claims to owners" → "Leve
afirmações até suas fontes")
- **track** → `rastrear`
- **trade** → `trocar`
- **train** → `treinar`
- **transfer** → `transferir`
- **translate** → `traduzir`
- **trigger** → `gatilho`
- `phases/plan.json` neighborhood; `commonSkills/trigger.json` :: `kind`
neighborhood
- **trim** → `aparar` / `reduzir`
- **true** → `verdadeiro`
- **trust** → `confiar`
- **try** → `tentar` / `experimentar`
- **turn (into)** → `virar` / `transformar`
- **two** → `dois` / `duas`
- **type** → `tipo`
- **typography** → `tipografia`
### U
- **unblock** → `desbloquear`
- **uncertainty** → `incerteza`
- **uncover** → `descobrir`
- **undefined** → `indefinido`
- **under** → `sob` / `abaixo`
- **undo** → `desfazer`
- **unique** → `único`
- **unit** → `unidade`
- **unrelated** → `não relacionado`
- **unsafe** → `inseguro`
- **until** → `até`
- **up (to)** → `até`
- **update** → `atualizar` / `Atualização`
- **upgrade** → `atualizar`
- **upon** → `sobre`
- **URL** → kept English (`URL`)
- **use (verb)** → `usar` / `Use`
- **useful** → `útil`
- **user** → `usuário`
- **usual** → `habitual`
### V
- **valid / validate / validation** → `válido` / `validar` / `validação`
- **value** → `valor`
- **verbose** → `verboso`
- `commonSkills/tokens.json` :: `use` ("verbose tests" → "testes verbosos")
- **verify** → `verificar` / `VALIDAR`
- **version** → `versão`
- **versus / vs** → `versus` / `vs` _(kept)_
- **video** → kept English
- **view** → `vista` / `visão`
- **virtual** → `virtual`
- **visible** → `visível`
- **visit** → `visitar`
### W
- **wait** → `esperar`
- **walk** → `caminhar`
- **want** → `querer`
- **warn / warning** → `alerta` / `aviso`
- `commonSkills/caveman.json` :: `caution` ("security warnings" → "alertas de
segurança")
- **watch** → `assistir` / `observar`
- **way** → `caminho` / `maneira`
- **we** → `nós`
- **weak** → `fraco`
- **wear** → kept English
- **web** → `web` _(kept)_
- **what** → `o que`
- **wheel** → `roda`
- **when** → `quando`
- **where** → `onde`
- **whether** → `se`
- **which** → `qual` / `que`
- **while** → `enquanto`
- **white** → `branco`
- **who** → `quem`
- **why** → `por que`
- **wide** → `amplo` / `largo`
- **will** → `vai` / `irá`
- **window** → `janela`
- **with** → `com`
- **within** → `dentro` / `em`
- **without** → `sem`
- **work (verb / noun)** → `trabalhar` / `trabalho`
- **worker** → `worker` _(kept in `routes/plan.json` :: `small` etc.)_ **or**
`agente`
- The corpus is mixed: `full-guide-pt.json` keeps `worker`, but
`rules/copy.json` :: `heroAside` says `3 agentes`. Choose **agent**
`agente` in prose; **worker** stays English in tab labels and code-like
fragments.
- **worktree** → `worktree` _(kept)_
- **would** → `iria`
- **wrap** → `envolver` / `quebrar`
- **write** → `escrever`
- **wrong** → `errado`
### X / Y / Z
- **xml** → kept English
- **yaml** → kept English
- **yet** → `ainda`
- **you** → `você` / `você` _(informal register, consistent with the existing
corpus)_
- **zero** → `zero` _(kept)_
- **zip** → kept English
## Punctuation and orthography
- **Hyphenation.** Long compound phrases often gain a hyphen in the Portuguese
copy where English would have a space: `gate-discipline`, `subagent workflow`
(no hyphen). Match the source field by field.
- **Question marks and exclamation.** Always preceded by a space per Acordo
Ortográfico 1990: `?`, `!`, `;`, `:` — but the corpus already complies; this
is just to keep consistency.
- **Em dash.** The corpus uses `—` (U+2014) with surrounding spaces: "X — Y",
not "X—Y". Match.
- **Mid-sentence `→`** keeps the spaces: `context → fact → action`.
- **Brand/glyph characters** (`<i></i>`, `<b></b>`, `↗`, `→`, `×`, `·`) are
copied verbatim, including any surrounding spaces.
## Number formatting
- Thousands separator: `.` in Portuguese (not `,`).
- 1.000 / 10.000 — but the site rarely shows raw numbers; the spec is
preserved here so a future agent does not silently flip a separator.
- Decimals: `,` in Portuguese (not `.`). Again, the site rarely needs this, but
`8 checks · ready``8 verificações · pronto` keeps the integer and swaps the
noun.
@@ -0,0 +1,162 @@
# Reference: translation tone
The register is **editorial-technical Brazilian Portuguese**: the voice of a
native technical writer writing for an audience of engineers, not for casual
readers. It is not academic, not corporate, not marketing. The site teaches
working professionals how to use AI tools, and the Portuguese reads like that —
direct, opinionated, occasionally witty.
These notes are derived from the existing translations in `src/content/**` and
`.agents/snapshots/full-guide-pt.json`. They are not universal truths; they are
the conventions this site already established. If you find a translation that
does not match these notes, the notes are right and that translation needs
review.
## Voice in one paragraph
> Second-person (`você`), imperative verbs (`Use`, `Verifique`, `Selecione`),
> short sentences, no hedging. Acronyms in caps (`SONNET`, `HAIKU`, `CHECK`),
> prose around them in lowercase sentence case. The writer takes a position:
> "use isto", "não faça aquilo". The reader is a colleague being shown a shape,
> not a customer being reassured.
## Person and number
- **Second person, informal `você`.** The English mixes imperative and second
person; the Portuguese collapses both into `você`. Impersonal "you" (general
advice) becomes second-person imperative or third-person generic (`o agente`,
`um worker`) — match the source intent.
- "Use when …" → `Use quando …` (imperative) **or** `Use em …` (infinitive
noun phrase, used in `commonSkills/*` field labels).
- "You do not need …" → `Você não precisa …`.
- **First person plural** ("we / let's") is rare in the corpus. When the English
uses it, prefer `vamos` for invitations and `nós` only when the English
clearly means "the project team".
## Imperative vs infinitive
The skill catalog (`commonSkills/*.json`) uses infinitive noun phrases in the
`use` field: "Use when …" → `Use quando …` / `Use em …`. This is a compact
register — the noun phrase stands on its own as a label. The prose body (`copy`,
`rule`, `example`, `caution`) uses full sentences, often imperative: "Stop at
the first rung that holds." → `Pare no primeiro degrau que sustenta.`
Match the source field:
| Field | Register | Verb form |
| ---------------- | ------------------------- | ---------------- |
| `use` | compact noun phrase | infinitive |
| `rule` | one imperative sentence | imperative |
| `example` | a worked instance | declarative past |
| `caution` | one or two sentences | imperative |
| `kind` / `label` | title case in caps | noun |
| `tagline` | short noun phrase | noun |
| `copy` | one or two full sentences | varies |
## Verb mood and tense
- **Imperative** for instructions: `Pare`, `Use`, `Selecione`, `Consulte`,
`Mantenha`, `Corte`. Same register as the English.
- **Present indicative** for general truths and current state:
`É orientação descobrível` ("This is discoverable guidance").
- **Present subjunctive** when the English uses "should" / "may":
`Siga as instruções para que o sistema funcione`.
- **Past participle** for completed actions in results/evidence:
`Construído. Testes passaram. Publicado.` (kept as past-tense fragments
matching the staccato cadence of the English.)
## Sentence cadence
- **Short sentences.** Read the existing translations — they break long English
sentences at natural joints, not at the original clause boundaries.
- "Trace claims to owners." (EN, 4 words) → `Leve afirmações até suas fontes.`
(PT, 5 words)
- "Reconnect the diff to intent with fresh context and adversarial attention."
(EN, 11 words, one sentence) →
`Reconecte o diff à intenção com contexto novo e atenção crítica.` (PT, 9
words, one sentence — restructured, not literal)
- **Lists of three.** When the English has a three-beat rhythm, preserve it:
"construção, integração, evidência" / "orquestração, execução, verificação".
- **Avoid nominalizations.** "Give every worker enough context, one
responsibility, and its own worktree." →
`Dê a cada worker contexto suficiente, uma responsabilidade e seu próprio worktree.`
The English is verbs; the Portuguese keeps it verbs.
## Hedging and certainty
- The site does not hedge. "Probably", "usually", "we recommend" are absent from
the existing copy. If the English has them, translate the certainty away in
the Portuguese: "Recommended:" → `:` (drop the qualifier), "Should:" → `:` or
`Esperado:`.
- Numbers and tokens are precise: `8 verificações`, `200 linhas`, `01 / 2026`.
Do not round.
- "Maybe" / "perhaps" → omit in Portuguese. The reader either needs to know or
doesn't, and the corpus always opts for "needs to".
## Capitalization
- **Sentence case for prose.** "Strong model for ambiguity." →
`Modelo forte para ambiguidade.` The Portuguese follows the source's sentence
case, not Portuguese title case.
- **Title case (ALL CAPS) for tab labels and tags.** `PLAN` / `BUILD` /
`REVIEW`, `CONTEXTO` / `REVISÃO`, `INSTINTO DE SIMPLIFICAÇÃO`,
`DISCIPLINA DE CONCLUSÃO`. Match the source field by field; the design system
depends on the visual weight of caps.
- **Lowercase for tagline noun phrases.** `signal without filler`
`sinal sem excesso`. Source is lowercase; target stays lowercase.
- **Acronyms stay all caps.** `SKILL.md` is rendered as `SKILL.md`, not
`Skill.md`. `AGENTS.md` similarly. `pnpm`, `npm`, `git`, `cli` are lowercase
by convention.
## Symbol and punctuation rules
- **Arrows.** `→` for in-flow ("observe → trigger → validate"), `↗` for off-page
links ("format specification ↗"). Keep the spaces.
- **Em dash.** `—` (U+2014, with spaces). The English uses this too; preserve in
the Portuguese.
- **Center dot.** `·` between list items, e.g.
`8 skills · 3 agents · 4 enforcement layers`
`8 skills · 3 agentes · 4 camadas de enforcement`. The space matters for the
design grid.
- **Smart quotes.** Never. The legacy HTML uses straight quotes; the Astro build
keeps them straight; do not introduce curly quotes.
- **`<i></i>` and `<b></b>`** glyphs from the source — copy verbatim. They are
decorative and the stylesheet depends on them. Do not turn them into `<em>` or
`<strong>`.
- **`<br>` and `<br />`** — keep the source's exact form (the chapter hero uses
`<br />` with space; the recall section uses `<br>` without). Visual fidelity
beats XML purity here.
## What NOT to do (recurring mistakes)
- **Don't be polite at the reader's expense.**
- "Please select a submission" → `Selecione um envio` (no "por favor").
- "We hope this helps" → drop it; the site never apologizes.
- **Don't translate product names.**
- `Opus`, `Sonnet`, `Haiku`, `GPT-5.6`, `Sol`, `Terra`, `Luna`, `Pro`,
`Flash`, `Flash-Lite` — keep English. The user knows these are model names.
- **Don't gender the reader.** The Portuguese addresses `você` (singular,
gender-neutral). Avoid `o usuário` when `você` reads better, and never use
feminine-default forms that imply a specific reader gender.
- **Don't add articles where the source omits them.** English often drops the
article in tab labels; the Portuguese matches.
- "From intent to evidence" → `Da intenção à evidência`.
- "Try the rules lab →" → `Experimente no lab Tiny Tasks →`. (Wait, actually
this is a full sentence ending with the arrow; the article is preserved
where the source has it. Match the source.)
- **Don't introduce code-style formatting where the source has prose.**
- `<i></i>` is _not_ `<em>`. `<b>PLAN</b>` is _not_ `<strong>PLAN</strong>`.
These have specific visual weight in the stylesheet.
- **Don't reorder facts.** The English leads with X, the Portuguese leads with
X. Reordering is a content edit, not a translation.
## Reading order: how to absorb this skill
1. Read [`references/glossary.md`](glossary.md) once for the term decisions.
2. Skim 510 random translations from `commonSkills/*.json` to feel the voice.
3. Skim `src/content/rules/copy.json` `pt` block — it is the longest prose
passage and sets the editorial register.
4. Skim `.agents/snapshots/full-guide-pt.json` — it is the shipping Portuguese
on the largest surface and the longest consistent voice sample.
5. Now propose. Write the first chapter; show it to a human; iterate on the tone
before continuing to the next chapter.