Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
This PR is too large for Bugbot to review. It changes 56,880 lines and 4,130,318 characters. Split the change into smaller pull requests to get a review. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
localize:context documents every enUS string for translators: what it means, where it shows, what each placeholder stands for and a length hint, from its usage sites in src. Claude (claude -p on the subscription, or the Anthropic API when ANTHROPIC_API_KEY is set) writes the entries. Jev screens every key for reuse with different meanings and Claude confirms the flagged ones. Entries carry a hash of the English value and usage files, so a rerun only processes new or changed keys.
localize:translate fills src/locales/strings-ai/<locale>.json from enUS and the context store, one Claude batch of 40 keys at a time. The batch is sent as a cached system prompt so each locale after the first reads it from cache. Every value must keep its placeholders and line breaks or it is retried once with the problem, then left empty. Jev scores meaning and language for each value; the gate reports by default, since every rejection in the pilot was a good translation. A state file keyed by locale and source hash skips unchanged keys on the next run.
localize:compare --locale it puts each AI value next to the existing human one. Pairs that match after normalizing case, quotes and trailing punctuation are bucketed without a judge. Jev pre-filters pairs it scores 0.9 or higher as equivalent and flags human translations whose meaning scores under 0.5. Opus judges the rest blind (A/B order set by a key hash) as existing better, AI better, equivalent or both wrong, with a one-line reason. The report also lists placeholder mismatches in either file and the tokens spent, Jev apart from Claude.
Orchestrated runs need one way to fill the AI context and translations after an en_US.ts change. Add npm run localize:ai, which chains the language, context and translate scripts, and a project skill that tells agents to run it and commit the generated files with the change. AGENTS.md points to the skill.
j0ntz
force-pushed
the
jon/ai-translations
branch
from
October 17, 2026 02:41
a6c4ce8 to
49ed5c4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Technical Design Document
ai-translations.md
Description
Asana task
Three scripts replace Crowdin's human translation step with model translations. The app is unchanged:
src/locales/strings.tsstill loads the human files insrc/locales/strings/, and switching it to the AI files waits on the human review of the compare reports.localize:contextwritessrc/locales/context/enUS.context.json: for each of the 2,119 enUS keys, what it means, where it shows, what each placeholder stands for, a length hint and its usage files. Claude writes the entries and Jev screens for keys reused with different meanings.localize:translatefillssrc/locales/strings-ai/<locale>.jsonfor all 12 locales, 40 keys per Claude batch, with the batch sent as a cached prompt prefix. A value that loses a placeholder or line break is retried once. Jev scores meaning and language for every value and reports, without rejecting.localize:compareputs each AI value next to the human one and opus judges every differing pair blind. A Jev pre-filter that skips the judge for pairs scored 0.9 or higher is opt-in (--prefilter): on the full run the judge called only 336 of those 732 pairs equivalent, and 20 of them existing better.npm run localize:aichains enUS.json, context and translate for new or changed strings. The project skill.claude/skills/localize-strings/SKILL.md, linked fromAGENTS.md, tells agents to run it after anyen_US.tschange and commit the generated files with the change.All Claude calls go through
claude -pon the subscription. Jev token counts are reported apart from Claude's.Context store:
src): 299.fragment_request_subtitle(receive action vs. received status) andfio_reject_request_title(reject confirmation title vs. send-request action label).Translation:
currency_label_SYPin it ("Sterlina siriana" for "Lira siriana"), left as is and reported.Compare (judge opus):
Every compare placeholder problem is in the existing human file. Of the weak human values, the judge called 315 AI better, 29 equivalent and 11 existing better. Judging every pair instead of pre-filtering at 0.9 cost 18 more Claude calls and 67,911 more output tokens.
Tokens. Claude runs on the subscription through
claude -p. Jev is a separate service, and its counts are kept apart.Claude input counts only uncached prompt tokens; the rest of each prompt is in the cache columns. The context input of 106 is the 53-call full run. The one reuse-review call did not log its uncached input.
The full reports are on the Asana compare subtask.
CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
none
Requirements
If you have made any visual changes to the GUI. Make sure you have: