mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-06-27 04:51:46 +00:00
Release v0.4.0: /consistency-check, skill fixes, genre-agnostic agents
New skill: /consistency-check — cross-GDD entity registry scanner New registries: design/registry/entities.yaml, docs/registry/architecture.yaml Skill fixes: no-arg guards, verdict keywords, AskUserQuestion gates on all team-* skills Agent fixes: genre-agnostic language in game-designer, systems-designer, economy-designer, live-ops-designer Docs: skill/template counts corrected, stale references cleaned up Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,62 +6,98 @@ user-invocable: true
|
||||
agent: localization-lead
|
||||
allowed-tools: Read, Glob, Grep, Write, Bash
|
||||
---
|
||||
When this skill is invoked:
|
||||
|
||||
1. **Parse the subcommand** from the argument:
|
||||
- `scan` — Scan for localization issues (hardcoded strings, missing keys)
|
||||
- `extract` — Extract new strings and generate/update string tables
|
||||
- `validate` — Validate existing translations for completeness and format
|
||||
- `status` — Report overall localization status
|
||||
## Phase 1: Parse Subcommand
|
||||
|
||||
2. **For `scan`**:
|
||||
- Search `src/` for hardcoded user-facing strings:
|
||||
- String literals in UI code that are not wrapped in a localization function
|
||||
- Concatenated strings that should be parameterized
|
||||
- Strings with positional placeholders (`%s`, `%d`) instead of named ones (`{playerName}`)
|
||||
- Search for localization anti-patterns:
|
||||
- Date/time formatting not using locale-aware functions
|
||||
- Number formatting without locale awareness
|
||||
- Text embedded in images or textures (flag asset files)
|
||||
- Strings that assume left-to-right text direction
|
||||
- Report all findings with file paths and line numbers
|
||||
Determine the mode from the argument:
|
||||
|
||||
3. **For `extract`**:
|
||||
- Scan all source files for localized string references
|
||||
- Compare against the existing string table (if any) in `assets/data/`
|
||||
- Generate new entries for strings that don't have keys yet
|
||||
- Suggest key names following the convention: `[category].[subcategory].[description]`
|
||||
- Output a diff of new strings to add to the string table
|
||||
- `scan` — Scan for localization issues (hardcoded strings, missing keys)
|
||||
- `extract` — Extract new strings and generate/update string tables
|
||||
- `validate` — Validate existing translations for completeness and format
|
||||
- `status` — Report overall localization status
|
||||
|
||||
4. **For `validate`**:
|
||||
- Read all string table files in `assets/data/`
|
||||
- Check each entry for:
|
||||
- Missing translations (key exists but no translation for a locale)
|
||||
- Placeholder mismatches (source has `{name}` but translation is missing it)
|
||||
- String length violations (exceeds character limits for UI elements)
|
||||
- Orphaned keys (translation exists but nothing references the key in code)
|
||||
- Report validation results grouped by locale and severity
|
||||
If no subcommand is provided, output usage and stop. Verdict: **FAIL** — missing required subcommand.
|
||||
|
||||
5. **For `status`**:
|
||||
- Count total localizable strings
|
||||
- Per locale: count translated, untranslated, and stale (source changed since translation)
|
||||
- Generate a coverage matrix:
|
||||
---
|
||||
|
||||
```markdown
|
||||
## Localization Status
|
||||
Generated: [Date]
|
||||
## Phase 2A: Scan Mode
|
||||
|
||||
| Locale | Total | Translated | Missing | Stale | Coverage |
|
||||
|--------|-------|-----------|---------|-------|----------|
|
||||
| en (source) | [N] | [N] | 0 | 0 | 100% |
|
||||
| [locale] | [N] | [N] | [N] | [N] | [X]% |
|
||||
Search `src/` for hardcoded user-facing strings:
|
||||
|
||||
### Issues
|
||||
- [N] hardcoded strings found in source code
|
||||
- [N] strings exceeding character limits
|
||||
- [N] placeholder mismatches
|
||||
- [N] orphaned keys (can be cleaned up)
|
||||
```
|
||||
- String literals in UI code not wrapped in a localization function
|
||||
- Concatenated strings that should be parameterized
|
||||
- Strings with positional placeholders (`%s`, `%d`) instead of named ones (`{playerName}`)
|
||||
|
||||
Search for localization anti-patterns:
|
||||
|
||||
- Date/time formatting not using locale-aware functions
|
||||
- Number formatting without locale awareness
|
||||
- Text embedded in images or textures (flag asset files)
|
||||
- Strings that assume left-to-right text direction
|
||||
|
||||
Report all findings with file paths and line numbers. This mode is read-only — no files are written.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2B: Extract Mode
|
||||
|
||||
- Scan all source files for localized string references
|
||||
- Compare against the existing string table (if any) in `assets/data/`
|
||||
- Generate new entries for strings that don't have keys yet
|
||||
- Suggest key names following the convention: `[category].[subcategory].[description]`
|
||||
- Output a diff of new strings to add to the string table
|
||||
|
||||
Present the diff to the user. Ask: "May I write these new entries to `assets/data/strings/strings-[locale].json`?"
|
||||
|
||||
If yes, write only the diff (new entries), not a full replacement. Verdict: **COMPLETE** — strings extracted and written.
|
||||
|
||||
If no, stop here. Verdict: **BLOCKED** — user declined write.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2C: Validate Mode
|
||||
|
||||
- Read all string table files in `assets/data/`
|
||||
- Check each entry for:
|
||||
- Missing translations (key exists but no translation for a locale)
|
||||
- Placeholder mismatches (source has `{name}` but translation is missing it)
|
||||
- String length violations (exceeds character limits for UI elements)
|
||||
- Orphaned keys (translation exists but nothing references the key in code)
|
||||
- Report validation results grouped by locale and severity. This mode is read-only — no files are written.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2D: Status Mode
|
||||
|
||||
- Count total localizable strings
|
||||
- Per locale: count translated, untranslated, and stale (source changed since translation)
|
||||
- Generate a coverage matrix:
|
||||
|
||||
```markdown
|
||||
## Localization Status
|
||||
Generated: [Date]
|
||||
|
||||
| Locale | Total | Translated | Missing | Stale | Coverage |
|
||||
|--------|-------|-----------|---------|-------|----------|
|
||||
| en (source) | [N] | [N] | 0 | 0 | 100% |
|
||||
| [locale] | [N] | [N] | [N] | [N] | [X]% |
|
||||
|
||||
### Issues
|
||||
- [N] hardcoded strings found in source code
|
||||
- [N] strings exceeding character limits
|
||||
- [N] placeholder mismatches
|
||||
- [N] orphaned keys (can be cleaned up)
|
||||
```
|
||||
|
||||
This mode is read-only — no files are written.
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Next Steps
|
||||
|
||||
- If scan found hardcoded strings: run `/localize extract` to begin extracting them.
|
||||
- If validate found missing translations: share the report with the translation team.
|
||||
- If approaching launch: run `/asset-audit` to verify all localized assets are present.
|
||||
|
||||
### Rules
|
||||
- English (en) is always the source locale
|
||||
|
||||
Reference in New Issue
Block a user