--- phase: 14-translation-polish-testing plan: 01 type: execute wave: 1 depends_on: [] files_modified: - vue-queststream-app/package.json - vue-queststream-app/vitest.config.ts - vue-queststream-app/scripts/i18n-coverage.ts - vue-queststream-app/tests/i18n/polish-pluralization.test.ts - .planning/phases/14-translation-polish-testing/14-TRANSLATION-REVIEW.md autonomous: true must_haves: truths: - "Coverage script identifies strings where PL value equals EN value (untranslated)" - "Vitest runs Polish pluralization tests with all critical test values (0, 1, 2, 5, 11, 21, 22, 100)" - "All plural keys have correct form count in both EN and PL files (4 forms for Polish)" - "Translation review file contains side-by-side EN|PL comparison for all strings" artifacts: - path: "vue-queststream-app/scripts/i18n-coverage.ts" provides: "Coverage report script that compares en.json vs pl.json" min_lines: 50 - path: "vue-queststream-app/vitest.config.ts" provides: "Vitest configuration for unit tests" contains: "defineConfig" - path: "vue-queststream-app/tests/i18n/polish-pluralization.test.ts" provides: "Unit tests for Polish 4-form pluralization" contains: "describe" - path: ".planning/phases/14-translation-polish-testing/14-TRANSLATION-REVIEW.md" provides: "Side-by-side translation review document" min_lines: 100 key_links: - from: "vue-queststream-app/scripts/i18n-coverage.ts" to: "vue-queststream-app/i18n/locales/en.json" via: "JSON import" pattern: "locales/en.json" - from: "vue-queststream-app/tests/i18n/polish-pluralization.test.ts" to: "vue-queststream-app/i18n/i18n.config.ts" via: "Same pluralization logic" pattern: "plPluralRule" --- Create translation coverage tooling and generate comprehensive review file for Polish translations. Purpose: Establish automated verification of translation coverage and prepare side-by-side review document for user to audit Polish translations before final polish phase. Output: - i18n-coverage.ts script that reports untranslated strings and plural form mismatches - Vitest configured and running pluralization unit tests - Side-by-side markdown review file of all 1858 translation keys @/home/golem/.claude/get-shit-done/workflows/execute-plan.md @/home/golem/.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/14-translation-polish-testing/14-CONTEXT.md @.planning/phases/14-translation-polish-testing/14-RESEARCH.md @vue-queststream-app/i18n/i18n.config.ts @vue-queststream-app/package.json Task 1: Install Vitest and create coverage script vue-queststream-app/package.json vue-queststream-app/vitest.config.ts vue-queststream-app/scripts/i18n-coverage.ts 1. Install Vitest as dev dependency: ```bash cd vue-queststream-app && pnpm add -D vitest ``` 2. Create vitest.config.ts with minimal configuration: ```typescript import { defineConfig } from 'vitest/config' export default defineConfig({ test: { include: ['tests/**/*.{test,spec}.ts'], environment: 'node', }, }) ``` 3. Add test script to package.json scripts: ```json "test": "vitest run", "test:watch": "vitest" ``` 4. Create scripts/i18n-coverage.ts following RESEARCH.md pattern: - Load en.json and pl.json using fs.readFileSync - Define EXCLUSIONS array for intentionally-same strings (QuestStream, XP, PIN, OK, etc.) - Find keys where EN value === PL value (excluding plurals and exclusions) - Find plural keys with form count mismatch (EN has 2 forms, PL needs 4) - Output report with totals and lists - Exit code 1 if critical issues found (missing in PL, plural mismatch) - Run with: npx tsx scripts/i18n-coverage.ts Run `cd vue-queststream-app && npx tsx scripts/i18n-coverage.ts` - should output coverage report without error Run `cd vue-queststream-app && pnpm test` - should find 0 tests initially (vitest configured correctly) Coverage script runs and reports any untranslated strings Vitest is installed and configured package.json has test scripts Task 2: Create Polish pluralization unit tests vue-queststream-app/tests/i18n/polish-pluralization.test.ts 1. Create tests/i18n/ directory 2. Create polish-pluralization.test.ts with comprehensive tests: - Extract the plPluralRule function from i18n.config.ts (copy the logic) - Test all critical values from RESEARCH.md: - Zero form (0) - One form (1, 21, 31, 101) - Few form (2, 3, 4, 22, 23, 24, 102, 103, 104) - Many form (0, 5, 10, 11, 12, 13, 14, 15, 19, 20, 25, 100, 105, 111, 112) - Use describe/it pattern from vitest - Include test for 3-form strings (where choicesLength < 4) 3. Test structure: ```typescript import { describe, it, expect } from 'vitest' // Copy exact pluralization function from i18n.config.ts function plPluralRule(choice: number, choicesLength: number): number { // ... exact implementation } describe('Polish pluralization rules', () => { describe('4-form strings (zero|one|few|many)', () => { const testCases = [ { n: 0, expected: 0, description: 'zero' }, { n: 1, expected: 1, description: 'one' }, // ... all test cases ] testCases.forEach(({ n, expected, description }) => { it(`returns index ${expected} for n=${n} (${description})`, () => { expect(plPluralRule(n, 4)).toBe(expected) }) }) }) describe('3-form fallback strings', () => { it('uses index 2 for "many" when only 3 forms available', () => { expect(plPluralRule(5, 3)).toBe(2) }) }) }) ``` Run `cd vue-queststream-app && pnpm test` - all pluralization tests should pass Check tests/i18n/polish-pluralization.test.ts exists with 20+ test cases Polish pluralization tests pass Tests cover all critical values (0, 1, 2, 3, 4, 5, 11, 12, 21, 22, 100, 101, 102, 105) Both 4-form and 3-form scenarios tested Task 3: Generate translation review file .planning/phases/14-translation-polish-testing/14-TRANSLATION-REVIEW.md 1. Create a script or use Node directly to generate review markdown: - Read both en.json and pl.json - For each key, output: | English | Polish | Context | - Group by domain (auth, parent, child, quest, settings, etc.) based on key patterns - For plural strings, expand to show all forms separately - Flag potentially untranslated strings with "CHECK" marker 2. Generate 14-TRANSLATION-REVIEW.md with structure: ```markdown # Translation Review: QuestStream EN → PL Generated: [date] Total keys: 1858 Potentially untranslated: [count] ## Instructions for Review - Edit Polish values inline where corrections needed - Add context hints where ambiguous - Mark approved translations with ✓ ## Auth & Navigation | English | Polish | Status | |---------|--------|--------| | Login | Zaloguj się | ✓ | | ... | ... | ... | ## Parent Dashboard ... ## Child Dashboard ... ## Pluralization (requires 4 forms) | Key | EN | PL (one|few|many|other) | Status | ... ``` 3. Include coverage report summary at the top showing any issues found Check .planning/phases/14-translation-polish-testing/14-TRANSLATION-REVIEW.md exists File should contain all 1858 translation keys in tabular format Plural strings should show expanded forms Review file generated with all translations in side-by-side format Plural strings expanded to show all forms Potentially untranslated strings flagged File ready for user review 1. Run coverage script: `cd vue-queststream-app && npx tsx scripts/i18n-coverage.ts` - Should output total keys, potentially untranslated count - Should identify any plural form mismatches 2. Run unit tests: `cd vue-queststream-app && pnpm test` - All 20+ pluralization tests should pass 3. Check review file: `.planning/phases/14-translation-polish-testing/14-TRANSLATION-REVIEW.md` - Should contain 1858 translation entries - Should be organized by domain - Plural strings should show all forms - Coverage script identifies untranslated strings (if any) - Vitest configured and running with 20+ passing tests - Polish pluralization rules tested comprehensively (0, 1, 2, 5, 11, 21, 22, 100, 101, 105) - Translation review markdown generated for user audit - No plural form count mismatches between en.json and pl.json After completion, create `.planning/phases/14-translation-polish-testing/14-01-SUMMARY.md`