Sleep-timer duration strings (durationHoursMinutesSeconds, durationMinutesSeconds, durationMinutesOnly, durationSecondsOnly) contained literal "?" characters instead of the native hour/minute/second abbreviation in 6 locales. Replaced with correct native short-form units per locale, verified byte-exact against a pinned spec table and against the already-correct neighboring hoursLabel/minutesLabel/secondsLabel values in each file.
47 lines
3.3 KiB
Markdown
47 lines
3.3 KiB
Markdown
# 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.
|