Files
wyndham-ARR/.project-docs/50-evidence/topics/2026-08-11-daily-row-task-log-entry-boundary.md
2026-08-11 17:23:33 +08:00

2.7 KiB

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.