<!-- source: openspec/changes/establish-translation-quality-track/proposal.md -->

# establish-translation-quality-track

> **Linear epic:** TBD — opens at PR creation. Follow-up to §D of the [2026-05-25 OpenSpec corpus delta-audit](../../_methodology/audits/2026-05-25-openspec-corpus-delta-audit.md) and the §D-pattern from the [2026-05-22 corpus audit](../../_methodology/audits/2026-05-22-openspec-corpus-specialist-audit.md).

## Status

Draft.

## Why

The corpus audit's §D pattern — "AI-drafted artefacts shipped without human review" — has not moved in two audit cycles. The delta-audit at 25.05 re-verified it as **unchanged**: RU/RO i18n catalogues are full of suspect strings, the canonical Russian manifesto remains a placeholder, and no translation-quality remediation epic has been opened.

This change opens that epic. Scope is **process + triage + reviewer onboarding**, not the actual translation rewrites — those need humans, not engineering work. The deliverable here is the structure under which a native reviewer can land their pass without negotiating scope every time.

## Evidence from the catalogues

A 2-minute grep against `packages/i18n/messages/{ru,ro}/*.json` surfaces enough to characterise the work:

**Romanian (`echipe curate` false friend, English bleed):**
- `packages/i18n/messages/ro/web.json:11,18` — *"echipe curate"* used as "curated teams"; native RO `curat` means *clean*, not *curated*
- `packages/i18n/messages/ro/common.json:136` — entire English sentence inside a RO file: *"Full platform built end-to-end. A curated team hand-picked for your brief, every change designed before it ships, every PR yours to merge."*
- 16 lines in `ro/common.json` containing English-shaped four-word phrases (rough `grep` for ASCII sequences) — needs a native sweep to separate proper nouns / loanwords from accidents

**Russian (Latin/Cyrillic code-switching at scale):**
- `packages/i18n/messages/ru/web.json` — **131 lines** with Latin↔Cyrillic switches. Examples: *"Для founder'ов"*, *"founder-экосистему"*, *"Mirror + Canvas + outputs"*, *"engagement'а"*, *"contractor'ом"*, *"Discovery — четырёхнедельный engagement"*.
- Same pattern in `ru/common.json` (6 lines), `ru/intake.json` (7 lines), `ru/primer.json` (5 lines)
- Some of these are intentional (product names: `Mirror`, `Canvas`, `Discovery`, `Forge`, `Muse`); many are not (`founder'ов`, `engagement'а`, etc., which have native Russian equivalents)
- `openspec/_methodology/manifesto.ru.md:9-12` — the canonical Russian manifesto is still a structural placeholder; RAP-179 is "operator-blocked"

Aggregate: **104KB RU catalogue, 80KB RO catalogue, 74KB EN catalogue** — Russian is the largest body of unreviewed text in the platform.

## What this change proposes

Three deliverables, none of which is a translation:

1. **Review protocol** — a written rule: no RU or RO copy lands without native review. Today's protocol is *implicit* (translation is whatever an LLM produces); make it *explicit* (a reviewer name + sign-off must appear on the change).
2. **Suspect-string inventory** — a research catalogue (in `research/`) listing the named suspect-string classes (false friends, English bleed, code-switching, untranslated proper nouns vs. accidental Latin) with one example each cited at `file:line`. This becomes the reviewer's starting punch list — not exhaustive, but enough to ground a one-pass sweep.
3. **Per-locale reviewer onboarding** — a short doc per locale (RU, RO) telling a future native reviewer what we want and what they get. Modelled on how the studio onboards specialists (see `_methodology/specialist-network.md`).

The actual translation rewrites are out of scope — they belong in a separate change *per locale* opened by whichever reviewer is contracted to do the pass.

## Decisions

`D-TQT-1` — **Native reviewer review is a hard gate.** No future RU or RO copy ships without a native reviewer sign-off entry in the change folder. AI-drafted copy is acceptable as a starting point; AI-drafted copy as the final artifact is not. Memory anchor: the RAP-906 / Hebrew-locale RAP-893 pattern (AI chrome shipped, pulled the same day).

`D-TQT-2` — **Native reviewer ≠ machine translation re-run.** A reviewer is a person who reads RU/RO natively. Asking a different LLM to "review" AI-drafted RU does not count. The reviewer needs a Linear account, gets the Studio's standard external-collaborator role (per `redesign-canvas-permission-model`), and signs off in the change folder.

`D-TQT-3` — **Proper nouns stay in source case.** Product names (`Mirror`, `Canvas`, `Discovery`, `Forge`, `Muse`, `OpenSpec`) are not translated and not transliterated. The reviewer's pass distinguishes these intentional Latin tokens from accidental code-switching.

## Open questions

`Q-TQT-1` — Where does the native-reviewer sign-off entry live? Options: (a) `research/<reviewer-name>-signoff.md` in each translation change folder, (b) frontmatter field `native_review: <reviewer-id>` on the changed catalogue files. Defer to the first reviewer's preference.

`Q-TQT-2` — Should the manifesto.ru.md placeholder (`RAP-179`, operator-blocked) be promoted out of placeholder-status by this change? **No.** The placeholder is operator-blocked specifically because the canonical voice is Pavel's. This change tightens the surrounding *review process* without claiming authorship of the canonical text.

`Q-TQT-3` — Do we run an automated code-switch lint that fails CI on Latin chars in RU JSON strings (modulo an allowlist of proper nouns)? Defer to follow-up; this change is process + triage, not enforcement.

## Out of scope

- Actual RU rewrites (a separate change per locale, opened by the reviewer)
- Actual RO rewrites (same)
- The Hebrew locale — RAP-893 pulled Hebrew chrome same-day 2026-05-16; re-introducing Hebrew is a separate decision gated on a native Hebrew reviewer being in the network
- The canonical Russian manifesto — `RAP-179` is operator-blocked; this change does not unblock or substitute for it
- Romanian-locale legal copy — gated on counsel review per `publish-legal-bundle` (RAP-695)
