# Daily Upload Progress and Task-Log Behavior

## Metadata

- Date: 2026-07-31
- Status: Implemented
- Scope: Desktop daily ARR.XML upload interaction and inline progress feedback
- Confidence: Fact
- Source: `arr_web/static/index.html`, `arr_web/static/app.js`, `arr_web/static/styles.css`, focused tests
- Last verified: 2026-07-31

## User-Facing Outcome

- Clicking `开始处理` keeps the operator on the daily page; it no longer opens the task-log dialog automatically.
- The header `任务日志` button and a selected daily-history row still open the same trace dialog on demand.
- The upload card exposes a compact accessible progressbar with approximate stages for upload, fixed processing,
  independent validation and database commit.
- The estimate advances while the synchronous upload request is in flight, caps before terminal completion, then
  resolves to 100% on success or an inline red error state on failure.
- The file chooser and dropzone are temporarily disabled while the request is in flight so the visible progress stays
  attached to the submitted file.

## Verification

- `node --check arr_web/static/app.js`: passed.
- `python3 -m unittest -v tests.test_arr_web_task_log_ui`: 5 passed.
- `python3 -m unittest -v tests.test_arr_web_job_trace tests.test_arr_web_repository_schema`: 8 passed.
- `python3 -m unittest -v tests.test_arr_web.PortalApplicationTests.test_fixed_static_routes_and_required_content tests.test_arr_web.PortalApplicationTests.test_all_public_assets_exclude_removed_copy`: 2 passed.
- No API route, upload contract, processing coordinator or task-trace query changed.

## Design Boundary

This is a preserve-mode operational UI refinement. It keeps the existing dependency-free HTML/CSS, light neutral theme,
single blue accent and rounded upload-card language. Progress values are intentionally approximate because `POST
/api/jobs` returns after the ARR-owned processing flow reaches a terminal receipt; no fake server progress contract was
introduced.
