# Draft: l10n(pipeline): refresh English source into the pt-BR line [DOC-6059]

## 1. What this is

`l10n/pt-br/bootstrap` was cut in July. English has moved **182 commits** since, so the
drift check has been comparing approved Portuguese against stale English, and every
staleness number downstream of it was unreliable. This merges
`origin/main-enterprise-product-docs` into the pt-BR line so drift is measured against
real English.

- Branch: `l10n/pt-br/english-refresh`, based on `l10n/pt-br/bootstrap` at `2e0f6d467`.
Target is `l10n/pt-br/bootstrap`. Neither merges to the default branch.
- Jira: epic DOC-6059.
- **No English is modified by this branch.** It only catches the pt-BR line up to what the
docs team already published.
- **No Portuguese is modified either.** Resyncing the stale sections is a separate MR (§13).


## 2. Scope of this MR

Option 1 of the two recorded in the handoff §3.1a. Large and mostly irrelevant on purpose:
3,459 files change, of which **37 are in scope**; the rest is other teams' work and
`yarn.lock`. The rejected Option 2 was cherry-picking only the 37, which keeps the MR small
but leaves `bootstrap` permanently diverged from real English and makes every future sync
inherit that fiction.

Not in this MR: any translation, any manifest regeneration, any termbase or TM change, any
config authored by us.

## 3. Files changed (CLAUDE.md §3: source files / sections changed)

| Set | Count | Notes |
|  --- | --- | --- |
| Total files touched by the merge | 3,459 | Other teams' products, `static/`, `yarn.lock` |
| In scope (`products/payments-direct-2/@v2026.03/`) | 37 | The only ones that can affect us |
| Under `.l10n-sync/`, `@l10n/`, or `CLAUDE.md` | **0** | Verified; our pipeline and translations are untouched |


Of the 37 in-scope files, only 5 are currently tracked in the manifest. The rest are English
changes to pages not yet translated, which is not drift, just newer source for later work.

## 4. English source reference (CLAUDE.md §3: the English diff or link)

Merged `origin/main-enterprise-product-docs` at `d66e4d562` into `2e0f6d467`.
Verified conflict-free with `git merge-tree --write-tree` **before** merging, not after.

## 5. Mirrored-OpenAPI render check (Phase 2, gating)

n/a for this MR, but see §15.1: the mirrored spec is one of the sections that went stale.

## 6. Structural preservation (CLAUDE.md §5)

n/a. No file under `@l10n/pt-BR/` is touched.

## 7. Terminology and termbase

No termbase or TM changes. `tm.jsonl` unchanged at 396 records; termbase unchanged at 154
entries.

## 8. Reviewer attention items (CLAUDE.md §3)

1. **The manifest is deliberately NOT regenerated.** Regenerating would recompute section
hashes against the new English and erase the staleness signal this refresh exists to
produce. That is the whole point of the MR, and it is the one thing that would silently
undo it. Per `CLAUDE.md` §8.2, a stale flag is a signal to verify, not to re-translate.
2. **`redocly.yaml` and `sidebars.yaml` came in from the default branch and auto-merged.**
Our preview-only `l10n` block, which carries `pt-BR`, survived the merge intact.
Confirmed that the default branch has **no `l10n` block at all**, so nothing about the
production locale posture changed and `CLAUDE.md` §7.2 still holds: this block must not
reach the default branch. Worth a second pair of eyes on that specific file.
3. **Drift is 13 sections, not the 12 previously recorded.** See §13 and §15.1.


## 9. English-screenshot gap log

n/a for this MR. Note that `user-interface/beneficiaries.md` is among the 37 changed files,
which is relevant to the unanswered screenshot question with Raji.

## 10. Source defects found (CLAUDE.md §9)

None reported. This MR does not review the incoming English; it only stops measuring
against the old copy.

## 11. Config changes

None authored here. `redocly.yaml` and `sidebars.yaml` changed as part of the incoming
merge; see §8.2. Sidebar `labelTranslationKey` entries are **still absent** (0 found), so
the `CLAUDE.md` §6 docs-team dependency has not moved. The landing components are likewise
still hardcoded English JSX with 0 translation keys.

## 12. Translation memory

`tm.jsonl` unchanged, 396 records. `harvest-tm.mjs --dry-run` reports 0 new records.

## 13. Pipeline / manifest

- `selftest.mjs`: **all checks passed.**
- `generate-manifest.mjs --check`: **13 stale sections, 0 removed.**


| File | Stale sections |
|  --- | --- |
| `introduction/concepts/payment-identities.md` | 10 |
| `api-docs/developer-guides/create-a-payment.md` | 1 |
| `api-docs/payments-direct-api/payments-direct-2-api.yml` | 1 |
| `api-docs/integration-resources/latam/br/brl.md` | 1 |


Zero removed, which matches the prediction and means no approved Portuguese is orphaned.

## 14. Review gate

Do not self-approve, mark ready, merge, or resolve discussions. This is a source refresh
rather than Portuguese, so it does not need native review to be judged correct.

Note on this project's tooling: the GitLab review bot comments once per push and validates
internal consistency, not premises. Do not count a green bot pass as a review.

## 15. Open items and human calls

1. **The OpenAPI spec went stale, and its status is contradictory.** The handoff §1 says
the spec is out of scope for the September deadline, but it is pilot-translated, tracked
in the manifest, and its English just changed. Decide whether to resync it or drop it
from the manifest. Leaving it as a permanently stale row makes the drift check noisier
every release. Related: it is hashed as a single `_file` section, so **any** change
across its 6,449 lines marks the whole spec stale. That signal is too coarse to act on
and will misreport at every release-time spec refresh.
2. **The previously recorded count of 12 stale sections was low by one**, because it
omitted the spec. Corrected here to 13.
3. Resync MR for the 13 sections is the next step, and one of them
(`.../validating-identities-for-specific-payout-rails/supported-values`) remains blocked
on Luis.