# Tasks: Repair corrupted sleep-timer duration abbreviations in 6 ARB locales ## Review Workload Forecast | Field | Value | |-------|-------| | Estimated changed lines | 24-48 (24 lines modified, 24 add + 24 del per `git diff --stat`) | | 400-line budget risk | Low | | Chained PRs recommended | No | | Suggested split | Single PR | | Delivery strategy | single-pr | | Chain strategy | pending | Decision needed before apply: No Chained PRs recommended: No Chain strategy: pending 400-line budget risk: Low ### Suggested Work Units | Unit | Goal | Likely PR | Focused test command | Runtime harness | Rollback boundary | |------|------|-----------|----------------------|-----------------|-------------------| | 1 | Fix all 24 pinned strings across 6 ARB files + static validation | PR 1 (single) | `python scripts/validate_arb_fix.py` (JSON/UTF-8/diff-scope/placeholder/`?`-scan checks) | N/A — static content-only change, no runtime code path affected | `git revert` on the single commit restores all 6 files atomically | ## Phase 1: Content Repair (per-locale edits) - [x] 1.1 Edit `lib/l10n/app_ar.arb` lines 19/27/34/40: replace `durationHoursMinutesSeconds`/`durationMinutesSeconds`/`durationMinutesOnly`/`durationSecondsOnly` values with pinned `ar` cells (spec Requirement: Native short-form duration abbreviations) - [x] 1.2 Edit `lib/l10n/app_bn.arb` lines 19/27/34/40: replace same 4 keys with pinned `bn` cells - [x] 1.3 Edit `lib/l10n/app_hi.arb` lines 19/27/34/40: replace same 4 keys with pinned `hi` cells - [x] 1.4 Edit `lib/l10n/app_ja.arb` lines 19/27/34/40: replace same 4 keys with pinned `ja` cells (no-space compact notation) - [x] 1.5 Edit `lib/l10n/app_ru.arb` lines 19/27/34/40: replace same 4 keys with pinned `ru` cells (leading-space short abbreviations) - [x] 1.6 Edit `lib/l10n/app_zh.arb` lines 19/27/34/40: replace same 4 keys with pinned `zh` cells (no-space compact notation) Tasks 1.1-1.6 are file-independent and may run in parallel; each is a self-contained exact-string replacement per the design's pinned table, touching no other key. ## Phase 2: Static Validation (sequential, depends on Phase 1) - [x] 2.1 Parse all 6 `app_{ar,bn,hi,ja,ru,zh}.arb` files as JSON (`json.load`); assert success (spec: File integrity preserved) - [x] 2.2 Decode each file's bytes as strict UTF-8; assert no `�` replacement characters present - [x] 2.3 Run `git diff --stat` and per-line diff; assert exactly 24 changed lines total across the 6 files, additions == deletions, and no key outside the 4 duration keys per file differs (spec: Unrelated keys are untouched) - [x] 2.4 Scan the 24 target string values for literal `?`; assert zero occurrences (spec: No residual corruption markers) - [x] 2.5 Regex-extract `{...}` placeholder tokens from each of the 24 fixed values; assert each matches expected `{hours}`/`{minutes}`/`{seconds}` set/order and that `@durationXxx.placeholders` metadata blocks are byte-unchanged (spec: ICU placeholder integrity) - [x] 2.6 Assert each of the 24 fixed values is byte-identical to its pinned spec-table cell (spec: Each of the 6 locales matches its pinned string exactly) - [x] 2.7 Run `git diff --check` to confirm no whitespace/EOL damage Do NOT run `flutter build`, `flutter gen-l10n`, `dart analyze`, or `flutter analyze` — these hang in this environment.