12 KiB
Coding Agent Alignment Brief: GitHub-Side Crowdin Workflow for MaiBot
Purpose
Use this document as the authoritative implementation and maintenance guide for the repository's GitHub-side Crowdin workflow.
Its purpose is to keep Coding Agent aligned with the agreed operating model and prevent drift from the intended localization strategy.
This document is normative for:
- GitHub Actions changes related to Crowdin sync and localization PR flow
- branch and PR behavior for localization updates
- repository-side validation behavior for localization assets
- boundaries between baseline workflow logic and repository-specific policy
This document is not a generic Crowdin tutorial. It describes the expected behavior for this repository specifically.
Core Operating Model
The repository uses a PR-based localization return flow.
Source branches covered by localization sync
mainr-dev
Localization return branches
l10n_mainl10n_r-dev
Return path
- Crowdin translations must not be pushed directly into
mainorr-dev. - Translations must return through
l10n_${branch}branches. - Localization changes must reach
mainorr-devthrough pull requests.
Source-language assets
The source language is zh-CN.
Only source-language assets should trigger source uploads to Crowdin.
Current source-language assets:
locales/zh-CN/*.jsonprompts/zh-CN/**/*.promptdashboard/src/i18n/locales/zh.jsoncrowdin.yml
Prompt template extension
The repository currently treats .prompt as the only i18n-relevant prompt template extension.
Do not broaden prompt-related workflow triggers unless repository reality changes.
Mandatory Interpretation Rules
Coding Agent must follow these interpretation rules exactly.
Rule 1: Do not reinterpret l10n_ branches
l10n_main and l10n_r-dev are service/localization return branches.
They are not feature branches and they are not alternate long-lived development branches.
Rule 2: Do not bypass the PR model
Do not change the workflow so that translated assets are committed directly to main or r-dev.
The agreed model is:
- source branch sync
- Crowdin-side translation availability
- localization return branch update
- PR into the matching base branch
- maintainer review and merge
Rule 3: Do not claim approval in Crowdin means immediate GitHub update
A translation being reviewed or approved in Crowdin does not mean GitHub is updated instantly. GitHub reflects Crowdin-side updates only when the sync workflow runs.
That can happen via:
- push-triggered sync
- scheduled sync
- manual dispatch
Any documentation, comments, or workflow descriptions produced by Coding Agent must preserve this distinction.
Rule 4: Treat GitHub-side content policy as repository-specific, not as a universal Crowdin rule
If the repository enforces extra validation rules on committed target locale content, those rules must be described as repository-specific policy. They must not be described as an inherent or standard requirement of Crowdin's branch model.
Rule 5: Preserve source-upload loop prevention
Do not modify the workflow in a way that allows translated target files to trigger a new source upload cycle to Crowdin. Only source-language assets should trigger source uploads.
Required GitHub Workflow Behavior
1. crowdin-sync.yml
This workflow must remain responsible for:
- uploading source-language assets to Crowdin
- downloading available translations from Crowdin
- creating or updating localization return branches
- creating or updating localization PRs into the matching source branch
Required triggers
The workflow may be triggered by:
- manual dispatch
- schedule
- push to
mainorr-devwhen source-language assets change
Required branch mapping
The workflow must preserve this mapping:
main -> l10n_main -> PR into mainr-dev -> l10n_r-dev -> PR into r-dev
Required boundary
The workflow must preserve the PR-based return flow.
It must not be converted into direct translation pushes into main or r-dev.
Required wording discipline
When describing this workflow, Coding Agent must say that it downloads currently available Crowdin translations when the workflow runs. Coding Agent must not imply that source-language pushes and translation return are a single synchronous transaction.
2. precheck.yml
This workflow must:
- run on pull requests
- check merge/conflict state against the real PR base branch
Required base-branch logic
For every PR, conflict simulation must use the actual PR target branch. Examples:
- feature branch into
main-> compare againstmain - feature branch into
r-dev-> compare againstr-dev l10n_mainPR -> compare againstmainl10n_r-devPR -> compare againstr-dev
Forbidden behavior
Coding Agent must not reintroduce any logic that hardcodes main as the comparison base for all PRs.
Label behavior
If the repository already uses a conflict label, that behavior should remain intact unless there is a clearly documented reason to change it.
3. ruff-pr.yml
This workflow must remain focused on Python code quality.
Required path discipline
Translation-only localization PRs must not trigger Ruff by default. Ruff should run only when files relevant to Python code quality or Ruff configuration are changed.
Practical intent
The goal is to reduce CI noise on localization PRs without weakening Python quality checks.
Forbidden behavior
Do not expand Ruff triggers so broadly that translation-only localization PRs start running Ruff again by default.
4. i18n-validate.yml
This workflow must remain the repository-side structural validation layer for localization changes.
Required validation role
It should validate localization assets and i18n-relevant code changes. That includes both:
- backend locale JSON under
locales/ - dashboard locale JSON under
dashboard/src/i18n/locales/
Prompt trigger scope
It must cover the actual prompt template extension used in the repository.
At present, that means .prompt.
Do not broaden the watched prompt-file patterns unless repository reality changes.
Missing prompt behavior
If localized prompt files are intentionally allowed to fall back to zh-CN at runtime, workflow and documentation should represent that accurately.
Do not silently convert warning-only behavior into hard-failure behavior unless explicitly instructed.
Repository-Specific Policy Layer
The repository may enforce extra policy rules on committed target locale files. Examples may include:
- forbidding unchanged source-language carry-over in target locale files
- forbidding Chinese characters in
en-USlocale files - placeholder consistency checks
- plural structure checks
These rules are allowed. However, Coding Agent must always describe them as:
- repository-specific validation policy
- layered on top of the baseline Crowdin PR workflow
They must not be described as:
- a standard Crowdin requirement
- an inherent property of
l10n_branches - something every Crowdin GitHub integration does by default
Documentation Guardrails for Coding Agent
Whenever Coding Agent writes or updates repository documentation about localization workflow, it must obey the following rules.
Always state these facts clearly
zh-CNis the source languagemainandr-devare the source branches covered by Crowdin sync- translations return via
l10n_${branch}branches - localization changes reach
mainorr-devthrough PRs - GitHub receives translation updates when the sync workflow runs, not necessarily immediately when approval happens in Crowdin
Never blur these concepts
Do not conflate:
- Crowdin approval state
- GitHub sync timing
- PR creation/update timing
- PR merge timing
These are related but distinct steps.
Always distinguish baseline workflow from extra repository policy
If describing validation rules beyond branch flow and sync behavior, explicitly mark them as repository-specific policy.
Keep statements operational and repository-specific
Do not write generic platform marketing language. Do not convert this repository's workflow report into a generic localization tutorial.
Change Control Rules
Coding Agent may adjust workflows only within the following boundaries.
Allowed changes
Coding Agent may:
- fix PR base-branch detection bugs
- reduce CI noise for translation-only PRs
- tighten path filters to better match repository reality
- improve workflow descriptions so they do not misrepresent sync timing
- improve documentation clarity around repository-specific validation policy
Allowed changes with explicit justification
Coding Agent may change repository-side i18n validation rules only if:
- the change is clearly labeled as repository-specific policy
- the justification is documented
- the change does not misrepresent itself as standard Crowdin behavior
Forbidden changes
Coding Agent must not:
- replace the
l10n_${branch}PR model with direct pushes into source branches - make translated target files trigger source uploads back to Crowdin
- hardcode
mainas the merge-check target for all PRs - broaden prompt-file watchers without confirming actual repository usage
- present repository-specific locale policy as if it were part of Crowdin's default model
- imply that approved translations automatically and immediately appear in GitHub without a sync run
Expected End-to-End Flow
Flow A: Source-language update
- A source-language asset change is pushed to
mainorr-dev. - The Crowdin sync workflow runs.
- The workflow uploads source-language assets to Crowdin.
- The workflow may also download any translations currently available in Crowdin.
- The workflow creates or updates the matching localization return branch.
- A PR is created or updated from
l10n_${branch}into the matching base branch.
Flow B: Localization PR validation
- A PR from
l10n_${branch}into its matching base branch exists. precheck.ymlvalidates merge/conflict state against the real PR base branch.i18n-validate.ymlvalidates localization structure and repository-specific i18n policy.ruff-pr.ymldoes not run unless the PR touches Python/Ruff-relevant files.- Maintainers review and merge the PR.
Flow C: Scheduled synchronization
- The scheduled Crowdin sync workflow runs.
- It processes the supported source branches.
- If Crowdin currently has downloadable translation updates, GitHub updates or creates the corresponding
l10n_branch PRs.
Coding Agent Self-Check Before Making Any Workflow or Docs Change
Before changing localization-related workflows or documentation, Coding Agent must confirm all of the following:
- Am I preserving the
l10n_${branch}PR-based return model? - Am I avoiding any claim that Crowdin approval instantly updates GitHub?
- Am I keeping source-upload triggers limited to source-language assets?
- Am I using the real PR base branch for conflict checks?
- Am I keeping Ruff out of translation-only PRs by default?
- Am I limiting prompt-file trigger patterns to what the repository actually uses?
- If I describe extra locale-content rules, did I label them as repository-specific policy rather than standard Crowdin behavior?
If any answer is no, the change is not aligned and must be revised.
Bottom Line
The correct GitHub-side localization model for this repository is:
zh-CNis the source languagemainandr-devare the source branches- Crowdin returns translations through
l10n_${branch}branches - localization changes reach source branches through PRs
- sync timing depends on GitHub-side workflow execution
- repository-specific locale validation policy may exist, but it must be described as extra policy, not as the default Crowdin model
Coding Agent must preserve this model and must not drift into a direct-push workflow, a misleading sync description, or an over-generalized explanation of repository-specific validation rules.