# Daily Review UI Navigation, Progress And I18n

Date: 2026-08-06  
Status: implemented and runtime-active  
Scope: authenticated desktop Daily Report UI only

Interaction note (2026-08-11): the row-owned task-log behavior described as the surrounding before-state below is
superseded in local source by the Daily row / task-log entry-boundary correction. After that change is deployed, only
the top-right `任务日志` link opens the log dialog.

## Reported Problems

- Clicking `待人工处理` opened the task log instead of the manual-price operation panel.
- A retryable frozen case displayed an unwanted frozen-manifest explanation.
- Final confirmation did not change the upload-card status from `等待人工定价` to `日报生成中` while the synchronous
  request was running.
- The added manual-price module was not localized with the existing Chinese/English/Thai selector.

## Root Cause And Change

- The history row owned the log-opening click/keyboard behavior, while only the small `复核 x / y` child button owned
  `data-open-price-review`. The status chip therefore fell through to the row action. Status plus progress are now one
  semantic review button; nested controls are excluded from the row keyboard handler. A successful read focuses and
  scrolls the dedicated `daily-price-review-panel`.
- `generation_failed` now hides the instruction node. The removed sentence is absent from HTML, JavaScript and the
  language catalog.
- `finalizeDailyPriceReview()` sets the upload progress component to the localized running label before awaiting the
  finalize API. Success resolves to complete, an active server-side generation remains generating, and a returned
  editable/retryable review resolves back to waiting for manual pricing.
- Static and dynamic review copy, responsive `data-label` values, row states, pagination, validation/toasts, cancel
  dialog and review API errors now have explicit Chinese, English and Thai catalog entries. Review prices use the
  current locale's integer formatter.

## Verification

- `node --check arr_web/static/i18n.js` and `node --check arr_web/static/app.js` passed.
- Focused Web/static regression passed 31/31 tests.
- Full discovery passed 393 tests in 247.709 seconds, with three intentional skips for private Booking fixtures.
- Authenticated browser verification on the live 8766 page proved:
  - the needs-review status is exposed as one button with an explicit open-review accessible name;
  - clicking it made `daily-price-review-panel` the active element, scrolled to the panel and left the task-log dialog
    closed;
  - the retryable instruction node was hidden and the removed sentence was not rendered;
  - Chinese, English and Thai rendered localized title, progress, table labels, instructions, row state, save/finalize
    controls and status-action names;
  - both English and Thai cancellation dialogs rendered localized title, description, audit note and buttons, then
    closed through the non-mutating return action.

## Safety Boundary

Browser verification issued only review-detail reads, client-side locale changes and open/close dialog actions. It did
not edit or save a price, submit finalize/retry/cancel, upload XML, create a Finance version or trigger monthly work.
The finalization-progress transition is covered by the source-order regression because clicking it would be a real
business mutation. The Web process was not restarted: authenticated page reload proved the running server reads and
serves the current static files.
