Skip to content

feat(skills): add syncing-dhis2-translations Claude Code skill#140

Draft
netroms wants to merge 1 commit into
masterfrom
feat/skill-syncing-dhis2-translations
Draft

feat(skills): add syncing-dhis2-translations Claude Code skill#140
netroms wants to merge 1 commit into
masterfrom
feat/skill-syncing-dhis2-translations

Conversation

@netroms

@netroms netroms commented May 26, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a Claude Code skill that captures the workflow for fixing fake "English-as-translation" entries in i18n_global_*.properties — the recurring bug where the English source text was saved as a "translation" in Russian, Spanish, etc., causing those users to see English in the UI.

The skill grew out of the DHIS2-19912 cleanup. The same playbook applies to future regressions.

What's in the skill

  • SKILL.md — pipeline overview (Phil's 4-step process), the "fake translation" detection pattern, full cleanup workflow, tx CLI setup, the bot-PR signing situation and workaround, common mistakes table, stakeholders, links to deep-dive docs
  • audit-fake-translations.py — list keys where the target value byte-equals the English source (per language), with --keys or --regex filtering
  • delete-fake-translations.py — safely remove fakes (never deletes real translations because it compares value-for-value to source); has --dry-run

Why a top-level skills/ directory

Claude Code skills are a specific format (YAML-frontmatter SKILL.md plus supporting scripts) distinct from regular markdown guides. A dedicated directory:

  • keeps the format separable from /guides/
  • gives a clear home for future team skills (Flyway conflict resolution, OSIV migration prep, etc.)
  • lets devs symlink one specific skill into ~/.claude/skills/ without bringing along the whole /guides/ tree

skills/README.md documents installation (symlink vs. copy) and contribution conventions (naming, descriptions).

How to use after merge

# Adjust path to your wow-backend clone
ln -s ~/src/dhis2/wow-backend/skills/syncing-dhis2-translations \
      ~/.claude/skills/syncing-dhis2-translations

Next Claude Code session will pick it up automatically. Ask Claude something like "investigate fake Russian translations in dhis2-core" and it'll invoke the skill.

Tested

The skill was iteratively RED/GREEN-tested with subagent baseline scenarios:

  • RED (without skill): agent suggested tx push -s, --dry-run push, "mark unreviewed in Transifex UI", guessed Slack channel for translator notification, missed the bot-signing gotcha
  • GREEN (with skill): all the above fixed; agent followed the canonical delete-and-tx push -t -f workflow, knew to use the Transifex Announcements feature, and flagged the bot resync PR may need amending

Test plan

  • Reviewer reads skills/syncing-dhis2-translations/SKILL.md and confirms it matches their mental model of the workflow
  • Reviewer tries the symlink installation and confirms Claude Code lists the skill
  • (Optional) Verify by running audit-fake-translations.py on a current branch

AI Assisted

Captures the workflow for fixing fake "English-as-translation" entries in
i18n_global_*.properties: audit, safe deletion (preserves real
translations), tx push to Transifex, handling stuck dhis2-bot sync PRs,
and cross-branch backports. Includes audit + deletion Python scripts.

The skill is intended for Claude Code users on the team. Installation
instructions are in skills/README.md. Originated from the DHIS2-19912
cleanup; the same playbook applies to future translation regressions.

AI Assisted

Signed-off-by: Morten Svanaes <netroms@gmail.com>
@sonarqubecloud

sonarqubecloud Bot commented May 26, 2026

Copy link
Copy Markdown

Quality Gate Passed Quality Gate passed

Issues
0 New issues
11 Accepted issues

Measures
2 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarQube Cloud

@netroms netroms marked this pull request as draft May 26, 2026 09:22
@netroms netroms marked this pull request as ready for review June 1, 2026 10:16
@netroms netroms marked this pull request as draft June 1, 2026 10:17
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