# Company-channel period card copy ## Metadata - Date: 2026-07-31 - Scope: `arr_web/static/index.html`, `arr_web/static/styles.css`, `arr_web/static/app.js`, `tests/test_arr_web.py` - Change type: display copy, card hierarchy and result-detail presentation - Business-data mutation: none ## Behavior facts - The three generation cards no longer show the generic `第一期`, `第二期`, `第三期` labels. - The card headline values now read `C/O:01-10`, `C/O:11-20` and a month-aware final range: `C/O:21-30` for 30-day months or `C/O:21-31` for 31-day months. - These are display labels only. The internal period keys remain `01-10`, `11-20` and `21-month-end`; release-date calculation, button enablement, confirmation context, POST payload and generation polling are unchanged. - Period-completeness chips (`周期未结束` / `周期已结束`) and the computed Bangkok completion time remain below each C/O headline. The old duplicate C/O detail line was removed so each card has one clear range label. - A targeted execution check confirms June resolves to `C/O:21-30` and July resolves to `C/O:21-31`. - Result problems are deduplicated by kind/code/period for display; the internal warning and error arrays are not mutated. - The result table now shows `生成时间` from `job.finished_at`, falling back to `job.created_at`; `version_no` remains in the API payload but is no longer exposed as a user-facing revision label. ## Verification - `node --check arr_web/static/app.js`: passed. - HTML parser check: passed. - Focused suite: `28 tests`, `OK` (`tests.test_arr_web`, `tests.test_arr_web_company_reports`). - Full discovery: `348 tests`, `OK (skipped=10)`. - Targeted execution check: repeated same-code/same-period warnings collapse to one display item. - Isolated authenticated fake-server browser QA at 1280x720 and 390x844 confirmed all three labels, no stage-name remnants, the requested C/O values and zero horizontal overflow. Page console warnings/errors: none. No upload, extraction, deletion, activation or report generation was submitted.