# Daily Row / Task-Log Entry Boundary

Date: 2026-08-11
Status: implemented locally; production deployment pending
Scope: authenticated desktop Daily Report interaction only

## Reported Problem

On the production Daily page, clicking a concrete history row opened the technical task-log dialog. The intended
information architecture is stricter: logs are an on-demand utility available only from the top-right `任务日志` link;
ordinary users should not reach them while inspecting business rows.

## Root Cause

The row behavior was explicit rather than accidental bubbling. `renderJobs()` emitted every row with `role=button`,
`tabindex=0`, a selected state and a log-specific accessible label. Delegated click and Enter/Space handlers then called
`selectJob(..., { showLog: true })`; CSS reinforced the action with a pointer cursor, focus ring and selected-row tint.

## Change

- Render Daily history as ordinary table rows with no row action attributes.
- Remove the row click and Enter/Space log activation paths and the `showLog` option from internal trace selection.
- Remove the row pointer/focus/selected styling so appearance and accessibility semantics match the inert behavior.
- Preserve the explicit `待人工处理` button, report download link and top-right `任务日志` dialog trigger.

No API, trace query, processor, Finance, database, upload or monthly-publication behavior changed.

## Verification

- `node --check arr_web/static/app.js`: passed.
- All `test_arr_web*.py` tests: 81 passed in 1.105 seconds.
- The focused static contract proves `openTaskLog();` has exactly one caller, tied to `#task-log-trigger`, and rejects
  any row key handler, log-selection call, interactive semantics or `.job-row` styling.
- An isolated local page served the real edited HTML/CSS/JavaScript with two mock Daily records. Browser checks proved:
  - clicking ordinary `0805.XML` kept `#task-log-dialog.open === false` and left the hash at `#daily`;
  - clicking `待人工处理` focused the visible review panel with one issue and kept the log closed;
  - clicking the top-right `任务日志` link opened the dialog;
  - the ordinary row had no role/tabindex, computed cursor was `auto`, and the console had zero errors.

The local browser used only mock GET responses. It did not upload, save a price, finalize/cancel a review, download an
artifact, write Finance/database state or contact a production mutation endpoint.

## Deployment Boundary

An unauthenticated production static-asset read correctly redirected to login, and no credentials or deployment path
were inferred. The edited source has not been committed, pushed, restarted or deployed to `8.138.234.141:8765`; the
production symptom therefore remains until the controlled release step is authorized and completed.
