Skip to content

CODAP-1112: Sync V3 strings with POEditor using ownership model#2391

Merged
kswenson merged 20 commits intomainfrom
CODAP-1112-sync-v3-strings-poeditor
Feb 18, 2026
Merged

CODAP-1112: Sync V3 strings with POEditor using ownership model#2391
kswenson merged 20 commits intomainfrom
CODAP-1112-sync-v3-strings-poeditor

Conversation

@kswenson
Copy link
Member

@kswenson kswenson commented Feb 14, 2026

Summary

  • Splits the combined en-US.json5 into two files: en-US-dg.json (V2-owned DG.* strings from master) and en-US-v3.json5 (V3-owned strings)
  • Updates the translation loader to merge both files at runtime
  • Rewrites strings-pull-project.sh and strings-push-project.sh to respect string ownership — V3 only pushes/pulls V3-owned keys to/from POEditor
  • Adds retry logic for en-US pulls and JSON5 support to push scripts
  • Removes 7 unused V3 strings and fixes undo/redo string key prefix bugs
  • Adds ar (Arabic), fr (French), nl (Dutch), pl (Polish) to the pull script — now includes all 18 POEditor languages with ≥50% translation coverage
  • Updates codap-v3-build skill with string sync workflow documentation
  • Adds design doc and implementation plan

Jira

CODAP-1112

Related

  • PR #2390 — V2 build skill ownership-aware string handling (on master)
  • PR #2389 — Unused DG.* strings audit doc (CODAP2-286, on master)

Test plan

  • Verify en-US-dg.json + en-US-v3.json5 merge correctly at runtime (no missing keys)
  • Verify strings-push-project.sh only pushes V3-owned keys
  • Verify strings-pull-project.sh correctly splits pulled translations into DG and V3 files
  • Run Jest tests (translate.test.ts, translate.es.test.ts)
  • Verify no UI regressions from string key references

🤖 Generated with Claude Code

@kswenson kswenson added the v3 CODAP v3 label Feb 14, 2026
@codecov
Copy link

codecov bot commented Feb 14, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.56%. Comparing base (ebac60a) to head (6a989cf).
⚠️ Report is 5 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2391   +/-   ##
=======================================
  Coverage   85.56%   85.56%           
=======================================
  Files         753      753           
  Lines       41736    41739    +3     
  Branches    10335    10325   -10     
=======================================
+ Hits        35713    35716    +3     
  Misses       6008     6008           
  Partials       15       15           
Flag Coverage Δ
cypress 69.29% <100.00%> (+<0.01%) ⬆️
jest 57.09% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@cypress
Copy link

cypress bot commented Feb 14, 2026

codap-v3    Run #10258

Run Properties:  status check passed Passed #10258  •  git commit be3d0c020e: Increment the build number
Project codap-v3
Branch Review main
Run status status check passed Passed #10258
Run duration 02m 10s
Commit git commit be3d0c020e: Increment the build number
Committer eireland
View all properties for this run ↗︎

Test results
Tests that failed  Failures 0
Tests that were flaky  Flaky 0
Tests that did not run due to a developer annotating a test with .skip  Pending 0
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 4
View all changes introduced in this branch ↗︎

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a string ownership model for CODAP V2 and V3 translations, splitting the combined English string file into two files to support concurrent V2/V3 development with shared POEditor infrastructure. V2 owns DG.* strings (managed from the master branch), while V3 owns V3.* strings (managed from main).

Changes:

  • Splits en-US.json5 into en-US-dg.json (1,144 DG strings from V2) and en-US-v3.json5 (207 V3-owned strings)
  • Updates translation loader to merge both files at runtime
  • Rewrites POEditor sync scripts with V3-only push filtering, retry logic, and timeout protection
  • Fixes two string key prefix bugs (DG.UndoV3.Undo for map pins and filter formula)
  • Updates V3 build skill with comprehensive translation sync workflow documentation

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
v3/src/utilities/translation/lang/en-US-v3.json5 New file containing V3-owned strings (206 V3.* + 1 DG.* for dynamic use)
v3/src/utilities/translation/lang/en-US-dg.json New file containing DG strings synced from V2 master (1,144 strings)
v3/src/utilities/translation/languages.ts Updated to import and merge both DG and V3 string files
v3/src/utilities/translation/translate.test.ts Updated mocks to reflect split string files
v3/src/utilities/translation/translate.es.test.ts Updated mocks to reflect split string files
v3/src/components/map/components/inspector-panel/map-measure-palette.tsx Fixed undo/redo string keys from DG.Undo.map to V3.Undo.map
v3/src/components/case-tile-common/filter-formula-bar.tsx Fixed undo/redo string keys from DG.Undo.caseTable to V3.Undo.hideShowMenu
v3/scripts/strings-push.sh Added JSON5 support and documentation; set SYNC_TERMS=0 for shared project
v3/scripts/strings-push-project.sh Rewritten to push only V3-owned strings with error handling
v3/scripts/strings-pull.sh Enhanced with better documentation
v3/scripts/strings-pull-project.sh Completely rewritten with timeout, retry logic, and en-US DG/V3 splitting
v3/package.json Changed strings:update to pull-first order (pull then push)
.claude/skills/codap-v3-build/SKILL.md Added comprehensive translation sync workflow to Phase 3
v3/docs/plans/2026-02-13-sync-v3-strings-poeditor-design.md Design document explaining ownership model and architecture
v3/docs/plans/2026-02-13-sync-v3-strings-poeditor.md Detailed implementation plan with 14 tasks
v3/docs/plans/v2-build-skill-string-changes.md Documentation of V2 build skill changes for ownership-aware handling

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

@bfinzer bfinzer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏻LGTM
Take a look at the conflicts and cypress test failures

kswenson and others added 14 commits February 17, 2026 19:06
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract all 1,144 DG.* strings from V2 master lang/strings/en-US.json
into v3/src/utilities/translation/lang/en-US-dg.json. This file represents
the POEditor-owned half of the translation split -- it gets overwritten by
POEditor pulls and should not be manually edited by V3 developers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The old en-US.json5 file contained both DG.* and V3.* strings mixed
together. It has been replaced by en-US-dg.json (DG strings from
POEditor/V2) and en-US-v3.json5 (V3-only strings maintained locally).
The translation loader was already updated to merge these two files,
so the old combined file is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…DG/V3 split

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… JSON5 support

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…g handling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
kswenson and others added 5 commits February 17, 2026 19:13
Remove 7 unused V3 strings (dead code from early prototypes and refactored
features). Fix two bugs where V3-only features (map pins, filter formula)
referenced nonexistent DG.* undo/redo keys instead of their V3.* equivalents.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The script pushes all strings from en-US-v3.json5, which includes one
DG.* key that is V3-owned. Update the comment to accurately describe this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ar (Arabic), fr (French), nl (Dutch), pl (Polish) to the V3
pull script to match all languages with meaningful translations in
the shared POEditor project.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Match the CFM language menu to the updated POEditor pull script
by adding Arabic, French, Dutch, and Polish.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@kswenson kswenson force-pushed the CODAP-1112-sync-v3-strings-poeditor branch from af6b80b to 1ebc47a Compare February 18, 2026 03:15
…OEditor

The en-US-dg.json file pulled from POEditor has 38 DG.* strings that
differ from what V3 had on main. These are intentional V3 divergences
(title case, ellipsis placement, removed keyboard shortcuts, wording
changes, and V3-only strings not yet in POEditor). Override them to
maintain V3 behavior while adopting the POEditor-based string split.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@kswenson kswenson merged commit 491f148 into main Feb 18, 2026
27 checks passed
@kswenson kswenson deleted the CODAP-1112-sync-v3-strings-poeditor branch February 18, 2026 05:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants