v0.12.2
Changes
Preserve translation identity across provider responses
Prevent reordered or incomplete provider responses from assigning translations to neighboring source entries.
Translation identity:
- Assign stable opaque IDs to gettext entries and key-value source keys.
- Require providers to return identified JSON objects instead of positional string arrays.
- Map reordered responses back to their exact source IDs.
- Reject missing, duplicate, unknown, null, and empty response items.
- Retry rejected responses with the validation error included in the correction prompt.
Validation:
- Validate gettext Python brace, printf-style, and Qt placeholders before applying translations.
- Validate printf and brace/interpolation placeholders in the shared key-value pipeline.
- Apply translations and update lock checksums only after identity and placeholder validation succeeds.
- Remove the Markdown raw-response fallback that bypassed source identity.
Parallel translation:
- Use plural-aware translation handling in the full-parallel gettext path.
- Preserve exact source-to-translation association across concurrent languages and chunks.
Coverage:
- Add regression tests for reordered responses and missing, duplicate, or unknown IDs.
- Add placeholder-loss tests for gettext and key-value formats.
- Add sequential and parallel end-to-end identity mapping tests.