Skip to content

Add merge-crowdin-translations skill - #8508

Closed
andrew-polk wants to merge 3 commits into
masterfrom
crowdin-sync
Closed

andrew-polk wants to merge 3 commits into
masterfrom
crowdin-sync

Conversation

@andrew-polk

@andrew-polk andrew-polk commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Bringing Crowdin's translations into Bloom followed a long hand procedure in DistFiles/localization/README.md that had gone stale (an interactive rebase, a commit count "minus 4", two different URLs for the sync page, an old Linux/mono block). It left out steps we actually do every time: cherry-picking the translations onto release branches and null-merging those branches back up. It also never warned that a cherry-pick deletes a release branch's existing translations of strings master has dropped, which we found would have removed 2,231 translations from 6.4 and 6.5 in this batch (all of strings removed on purpose, as it turned out).

What the PR does

  • Adds the merge-crowdin-translations skill, which an agent runs end to end except pausing and resuming Crowdin's sync. It squashes l10n_master into one Crowdin Bot commit on master, cherry-picks it to the release branches the developer picks each time (default: one version back), and null-merges each release branch up the stack. No pull requests: the developer approves each push, and every question goes through one decider form.
  • Adds audit_translations.py, which reports per branch what a batch would actually change: translations that land on strings that branch uses, translations of different English wording, and always every translation a pick would delete, flagging ids the branch's code still names.
  • Covers wrong translations, whether found by CheckOrFixXliff or by a tester: consult the developer, fix on Crowdin as SILCrowdinBot (marking placeholder-only fixes approved there), and never change a translation in the repo that isn't changed on Crowdin.
  • The README keeps the background on how Crowdin behaves; its procedure is replaced by a pointer to the skill, and it now says that a cherry-pick also removes a release branch's translations of ids master dropped.

Risk Evaluation

No significant risks. No product code changes; this is documentation plus a script only the skill runs.

Ecosystem Impact

None on Bloom's output or other repos. The skill does write to Crowdin and pushes directly to master and release branches, but only with the developer's approval of each push on a decider form.

Automated Tests

None added. audit_translations.py was run against master, Version6.5 and Version6.4 for the 2026-10-28 batch and its counts checked by hand.

Test of the change: none — awaiting the developer's decision

E2E Coverage

Not relevant: no Bloom code changes.

Live checks:

  • A fresh agent with no other context ran the skill for the real 2026-10-28 batch: squashed 1,638 Crowdin commits to master (bd29e02), cherry-picked to Version6.5 and Version6.4, closed New Crowdin updates #8241, and made translation fixes on Crowdin as the bot (57f11e62bc). The gaps it hit are fixed in this version.

Notion Test Suite

None.

Preflight report: https://bloombooks.github.io/dev-process-artifacts/deciders/bloomdesktop-crowdin-sync.html

Devin review


This change is Reviewable

Moves the Crowdin merge procedure out of the localization README into a skill an agent can run. Translations are committed directly on master and cherry-picked directly onto the release branches the developer picks each time, with every question asked through the decider skill. An audit script reports what each branch gains and always lists translations a pick would delete. Wrong translations are fixed on Crowdin as the bot, never only in the repo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The null-merge guard now counts merge commits too, and the audit notices a translation whose state or surrounding spaces change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in Greptile

[Medium impact] The workflow affects translation updates on master and developer-selected release branches.

Fix the null-merge check and bind release pushes to approved audits before merging.

Findings

  1. P1 Merge fixes get skipped ▶
  2. P1 Approved audits become stale ▶
  3. P2 Old audit warnings remain ▶

Summary

Adds a skill for bringing Crowdin translations into master and selected release branches.

  • Crowdin batches now reach master and chosen release branches through one guided flow.
  • The branch audit shows which translations land, mismatch, or disappear.
  • Translation fixes now go through Crowdin before they reach the repository.

Acknowledged intent: andrew-polk explicitly describes developer-approved fixes to non-English translations on Crowdin and in the repository as intended behavior.

Reviews (1) · Last reviewed commit: "Add merge-crowdin-translations skill" · Reviewed by Greptile

Re-audit a release branch that moved after the developer approved its audit, and clear old report files on each audit run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@andrew-polk

Copy link
Copy Markdown
Contributor Author

[Claude Opus 5.5] Consulted Devin on 2026-10-28 17:00 UTC up to commit 7156bce. First pass raised 3 bugs (threads above); all fixed, and Devin's re-review marks all 3 resolved. 1 informational note, no action needed.

@andrew-polk

Copy link
Copy Markdown
Contributor Author

[Claude Opus 5.5] Squashed and pushed directly to master as 6af308a, at the developer's request, after re-running the audit on current master and on the pre-round commits.

@andrew-polk
andrew-polk deleted the crowdin-sync branch October 28, 2026 19:26
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