Skip to content

docs(i18n): refresh the mirrors and keys the base left behind; warn on stale mirrors - #14166

Merged
diegosouzapw merged 5 commits into
release/v3.8.51from
docs/i18n-mirror-refresh
Sep 19, 2026
Merged

diegosouzapw merged 5 commits into
release/v3.8.51from
docs/i18n-mirror-refresh

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Sep 19, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Steady-state maintenance after the three final i18n adjustments (#13996 gate + skills, #14078 review of 64 locales, #14106 every doc in 65 locales). Between the cut of #14106 and its merge, release/v3.8.51 kept moving: docs were edited without their mirrors and dashboard keys were added without their catalogs. This PR brings both back and fixes a blind spot the interruption exposed in the drift gate.

Mirrors

Section-level retranslation of the docs the base edited on 2026-09-18 (README.md, SECURITY.md, API_REFERENCE, ENVIRONMENT, FEATURE_FLAGS, PROVIDER_REFERENCE, REASONING_REPLAY, SOCKET_DEV_FINDINGS, EMBEDDED-SERVICES, the new admission-lanes.md, …) — 20 locales complete (≈ 350 mirrors) before the LAN instance's Codex accounts hit their quota threshold (429 — All codex accounts reached configured quota threshold, reset in ~146 h). Every other route on that instance was tried and does not converge for 40 KB documents (auto/gemini → dva/* 500, Kilocode 401, Z.ai/OpenCode/Cloudflare-playground down, auto/claude-opus at 17–40 s per 4 KB with socket drops), so 689 mirrors in 45 locales stay stale until the quota returns (~2026-09-24) — listed by the gate, see below.

Dashboard keys

1b2349de (Claude OAuth lower-priority lane) and 7f1b4a5e (sidebar pinned items) added 7 keys to en.json only; i18n:check-keys was red on the tip for 65 locales. sync-ui-keys --translate-markers over the 65 catalogs: 444 leaves translated (the auto/claude-opus combo handles short UI strings fine), zh provider term normalised, 0 __MISSING__.

Drift gate (scripts/i18n/check-translation-drift.mjs)

The gate compared only the top-level source_hash of .i18n-state.json. A refresh run interrupted halfway bumps that hash for the locales it finished while the others keep the old one in locales[code].source_hash: the source no longer reads as changed, the stale mirrors' own hashes still match, and the gate reported PASS for 703 stale mirrors. findStaleTargets() (exported, tests/unit/i18n-translation-drift-stale-targets.test.ts) now lists every locale record behind its source as a warning — not a failure, because the only way to produce it is a backend outage nobody can fix in-branch, and turning every PR's CI red for six days helps no one. Documented in docs/guides/I18N.md ("Stale mirrors after an interrupted refresh"); the list is the work order for npm run i18n:run -- --locale=<code> --files=<sources>.

Validation

Check Result
npm run i18n:check PASS (sources=152, targets=9,880 match) with WARN stale targets (689)
npm run i18n:check-keys OK — 65 locales carry all 13,168 keys, none extra
npm run i18n:check-ratio OK — 65 locales within baseline (+0.5)
i18n:check-glossary zh-CN / zh-TW / ko PASS
i18n-placeholder-parity, feature-flag-description-icu-parse-12505, dashboard-localization-contract, server-owned-tool-loop-flag, i18n-home-recent-requests-topology-legend, i18n-cli-namespaces, i18n-key-completeness, i18n-translation-drift-stale-targets all green
Mirror audit over the 9,880 targets 0 missing, 0 leaked frontmatter; the 42 table-row mismatches are all stale EMBEDDED-SERVICES.md mirrors (the source table grew)

No production code touched.

⚠️ base-red inherited: #13866. All 9 reds of the CI run reproduce on the pure base tip cd4c6f69 in a detached worktree outside this branch, in files this PR does not touch (the PR diff is 357 mirrors under docs/i18n/**, the 65 catalogs, .i18n-state.json, scripts/i18n/check-translation-drift.mjs + its test and docs/guides/I18N.md): Docs Gates (env/doc contract: BRIDGE_PORT, CERT_DIR, NEXT_PUBLIC_PORT, OPENWA_SERVICE_PORT, ROUTER_URL in code but not in .env.example on the tip); Merge integrity (check:agent-skills-sync wants to generate omni-version-manager — fails the same way on #14155, #14156, #14159, #14161, #14164); No new ESLint warnings (cliRuntime.ts, arena-elo-sync-redesign.test.ts, compressionAnalyticsWriterFlatRate.test.ts unused vars); check-api-typecheck (rerankProviderNodes.ts TS2677 and one more); the fast gates (proxySaveRefresh.test.tsx TS2698, antigravity.ts TS2677, Sidebar.tsx TS2339, 12 covering tests missing from stryker.conf.json); and 21 unit test files failing on the tip with the same test names (telegram-keycache-bounded-13165 fails to import isModelBlockedByPatterns from @/lib/db/apiKeys on both): agy-antigravity-shared-catalog-12724, build/dockerfile-better-sqlite3-native, case-collision-6584, chat-route-coverage, check-env-doc-sync, cli-runtime-extended, command-code-mimo-v2-5-safety, compression/caveman-v379, executor-default-base, hard-session-lease-bypass-inventory, issue-7793-env-doc-sync-repro, lib/rate-limit-maxwaitms-disable-execution, media-page-client-browser-bundle, pack-artifact-entrypoint-closures, pack-artifact-server-ws-closure, provider-assets-generic-fallback, qodercli-windows-resolve-6263, route-body-validation-t06, t28-model-catalog-updates, telegram-keycache-bounded-13165, upstream-headers-proxy-auth.

…lder source

check-translation-drift.mjs compared only the top-level source_hash of
.i18n-state.json. A partial refresh run (17 of 65 locales retranslated
before an upstream quota 429) bumps that hash while the interrupted locales
keep the old one in locales[code].source_hash — the source no longer reads
as changed, the stale mirrors' target hashes still match, and the gate said
PASS for 703 stale mirrors. findStaleTargets() now reports every locale
record behind its source.
…e ones

Section-level retranslation of the docs edited on release/v3.8.51 after the
full-coverage cut (README, API_REFERENCE, ENVIRONMENT, FEATURE_FLAGS,
PROVIDER_REFERENCE, REASONING_REPLAY, SOCKET_DEV_FINDINGS, admission-lanes,
...): 20 locales complete on the Codex backend before its accounts hit their
quota threshold (429, reset in ~146 h); the alternative routes on the LAN
instance (auto/gemini -> dva 500, kilocode 401, zai/opencode/cloudflare
down, auto/claude-opus at ~30 s per chunk with socket drops) did not
converge, so the remaining 689 mirrors stay stale until the quota returns.

check-translation-drift.mjs now lists those stale mirrors (locale record
behind the top-level source_hash) as a non-blocking warning instead of
silently passing; documented in docs/guides/I18N.md.
…logs

1b2349d (Claude OAuth lower-priority lane) and 7f1b4a5 (sidebar pinned
items) added 7 keys to en.json and to no other catalog, so 65 locales
missed them and i18n:check-keys was red on the tip. sync-ui-keys
--translate-markers over the 65 catalogs (444 leaves) on the auto/claude-opus
combo of the LAN instance; zh provider term normalised; gates green.
@diegosouzapw
diegosouzapw merged commit b61ff77 into release/v3.8.51 Sep 19, 2026
12 of 21 checks passed
@diegosouzapw
diegosouzapw deleted the docs/i18n-mirror-refresh branch September 19, 2026 05:32
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…n stale mirrors (cheaper-inference#14166)

* fix(i18n): make the docs drift gate flag mirrors translated from an older source

check-translation-drift.mjs compared only the top-level source_hash of
.i18n-state.json. A partial refresh run (17 of 65 locales retranslated
before an upstream quota 429) bumps that hash while the interrupted locales
keep the old one in locales[code].source_hash — the source no longer reads
as changed, the stale mirrors' target hashes still match, and the gate said
PASS for 703 stale mirrors. findStaleTargets() now reports every locale
record behind its source.

* docs(i18n): refresh the mirrors the base left behind and warn on stale ones

Section-level retranslation of the docs edited on release/v3.8.51 after the
full-coverage cut (README, API_REFERENCE, ENVIRONMENT, FEATURE_FLAGS,
PROVIDER_REFERENCE, REASONING_REPLAY, SOCKET_DEV_FINDINGS, admission-lanes,
...): 20 locales complete on the Codex backend before its accounts hit their
quota threshold (429, reset in ~146 h); the alternative routes on the LAN
instance (auto/gemini -> dva 500, kilocode 401, zai/opencode/cloudflare
down, auto/claude-opus at ~30 s per chunk with socket drops) did not
converge, so the remaining 689 mirrors stay stale until the quota returns.

check-translation-drift.mjs now lists those stale mirrors (locale record
behind the top-level source_hash) as a non-blocking warning instead of
silently passing; documented in docs/guides/I18N.md.

* fix(i18n): translate the 7 dashboard keys the base added without catalogs

2fd608d (Claude OAuth lower-priority lane) and 6c13392 (sidebar pinned
items) added 7 keys to en.json and to no other catalog, so 65 locales
missed them and i18n:check-keys was red on the tip. sync-ui-keys
--translate-markers over the 65 catalogs (444 leaves) on the auto/claude-opus
combo of the LAN instance; zh provider term normalised; gates green.

* docs(i18n): adopt the API_REFERENCE and MEMORY mirrors the base refreshed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant