# Task-Log Relocation and Daily-Only Scope

## Metadata

- Date: 2026-07-30
- Status: Historical before-state; opening interactions superseded through 2026-08-11
- Scope: Desktop task-log information architecture, interaction and backend query boundary
- Confidence: Fact
- Source: `arr_web/static/`, `arr_web/repository.py`, focused tests and live local browser verification
- Last verified: 2026-07-30
- Stale trigger: The header utility, trace API/query, processing pipeline type, or task-console selection/polling lifecycle changes

## User-Facing Outcome

- The desktop header position formerly occupied by `手机看板` now contains a `任务日志` button.
- The sole existing black task console moved out of the 日报处理 panel into a native modal dialog; no duplicate console or alternate trace implementation was introduced.
- Before the 2026-07-31 upload interaction update, starting an upload opened the dialog. Mouse or keyboard activation
  of a daily-history row also opened the selected job's trace until the 2026-08-11 entry-boundary correction. Current
  behavior allows only the header `任务日志` link to open the dialog.
- Closing the dialog returns focus to the opener. Trace polling runs only while the dialog is open and the selected job remains active.
- The `/h5` route and assets remain intact, but the desktop header no longer links to them.

## Scope Proof

- `JOBS_SQL`, `JOBS_COUNT_SQL` and `JOB_TRACE_RUN_SQL` each explicitly require
  `run.pipeline_type = 'opera_daily'`.
- `GET /api/jobs/{job_id}/trace` resolves exactly one validated job ID.
- `get_job_trace` reads that run's processing attempts, artifact deliveries or legacy direct submissions, linked
  Finance daily versions and processing-run outbox events, then sends those allowlisted facts to `build_job_trace`.
- The console therefore represents one daily XML-processing job across upload, processor, validation, database and
  linked downstream-notification stages. It is not a global application/server log and does not enumerate other daily
  jobs, reporting monthly-run histories or company-report jobs.

## Verification

- `node --check arr_web/static/app.js`: passed.
- Focused unit set: 12 passed across task-log UI contracts, repository SQL/privacy contracts and trace projection.
- At 1440×900, the live modal measured 1040×692, remained centered, had no page horizontal overflow and rendered a
  current 13-event terminal. Closing returned focus to `#task-log-trigger`.
- Activating a different daily-history row selected the matching job and loaded `SUCCEEDED`, `13 events` and an `END`
  terminal line.
- At 375×812, the modal measured 355×792 with 10-pixel margins. The header trigger remained displayed; document and
  dialog horizontal-overflow checks were both false, with long raw lines confined to the terminal scroller.
- Browser warning/error count was zero.

## Known Verification Boundary

The broader `tests.test_arr_web` class currently issues anonymous requests while separate in-progress login work has
already changed the application to return redirects/401 responses. That class reported 13 authentication-boundary
failures/errors before reaching the relocation assertions. Authentication files were left untouched; task-specific
static contracts were isolated in `tests/test_arr_web_task_log_ui.py`.
