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:
Donchitos
2026-03-27 20:06:33 +11:00
parent 04ed5d5c36
commit 6c041ac1be
108 changed files with 2745 additions and 1005 deletions

View File

@@ -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