fix: make daily task log header-only
This commit is contained in:
@@ -4,7 +4,10 @@ Use this index for searchable, traceable evidence records.
|
||||
|
||||
| Date | Topic | Status | Source | Detail |
|
||||
|---|---|---|---|---|
|
||||
| 2026-08-11 | Daily row / task-log entry boundary | Implemented locally; production deployment pending | [Evidence topic](topics/2026-08-11-daily-row-task-log-entry-boundary.md) | Daily rows no longer have log-opening click/keyboard handlers, button semantics or interactive styling. Manual-review and download controls remain explicit, and the header `任务日志` link is the sole dialog opener. JavaScript syntax, 81 Web tests and isolated browser interaction QA pass with no console errors; no production or business state changed. |
|
||||
| 2026-08-11 | Convert `8.6 修正.XML` workbook to uploadable XML | Converted and independently accepted | [Evidence topic](topics/2026-08-11-0806-workbook-to-res-detail-xml.md) | The supplied `.XML` is actually an XLSX with 181 rows and flattened `RES_DETAIL` fields. A new UTF-8 `RES_DETAIL` XML was reconstructed without changing the workbook; strict XML/UTF-8 checks and processor 4.0.0 pass with 115 retained rows, zero price-unmatched rows and no business/database write. |
|
||||
| 2026-08-11 | Company-channel Booking Excel parse failure | Parser 2.1.0 implemented locally; deployment pending | [Evidence topic](topics/2026-08-11-company-channel-booking-header-parse-failure.md) | The user confirmed both supplied formats must be accepted. Parser 2.1.0 preserves exact whole-cell matching while accepting the three approved bilingual aliases; synthetic/coordinator tests, four supplied workbook replays and wrong-report negatives pass. Separate-file append remains outside the singleton full-source model. |
|
||||
| 2026-08-11 | `0806.XML` invalid UTF-8 | Diagnosed read-only; source re-export required | [Evidence topic](topics/2026-08-11-0806-xml-invalid-utf8.md) | Processor 4.0.0 fails before row parsing with `XML_PARSE_ERROR` at line 1872, column 0. A `TRACE_TEXT` value contains one CESU-8 surrogate pair for `U+1F389` despite the UTF-8 declaration. Because this is not pure `PRICE_UNMATCHED`, failure rather than manual review is correct. The public service remains healthy and no business state changed. |
|
||||
| 2026-08-06 | Daily review navigation, progress and three-language UI | Implemented and runtime-active | [Evidence topic](topics/2026-08-06-daily-review-ui-navigation-i18n.md) | The whole needs-review status now opens/focuses the operation panel without opening logs; the unwanted retry sentence is removed; finalization sets `日报生成中` before its request; review UI/API errors are localized in Chinese, English and Thai. Live read-only browser QA and 393 tests pass; no price/finalize/cancel/upload mutation was invoked. |
|
||||
| 2026-08-06 | Integer review prices and finalization repair | Deployed repair; run-67 checkpoint is historical | [Evidence topic](topics/2026-08-06-integer-review-finalize-repair.md) | Review amounts now display/accept integers and normalize to canonical `.00`. Migration 018 fixes the omitted manual-manifest artifact kind and the Finance INSERT now has 20 binds; rollback probes, live readiness and the then-current 387-test suite passed. Run 67 was still frozen at `200/0` when that repair ended; later browser-visible lifecycle state is recorded in the UI follow-up topic. |
|
||||
| 2026-08-06 | Live Daily price-review rollout and `0805.XML` acceptance | Historical initial-review snapshot; superseded by repair topic | [Evidence topic](topics/2026-08-06-live-daily-price-review-rollout.md) | Reconciled live 016 semantics without rerunning it, corrected and applied 017 after an exact up/down rollback probe, closed runs 61–63, fixed a delivery-placeholder runtime bug, and proved run 65 reached the two-key live panel with no Finance/report/outbox effect. Later runs and current retry instructions are in the integer/finalization repair topic. |
|
||||
@@ -51,7 +54,7 @@ Use this index for searchable, traceable evidence records.
|
||||
| 2026-07-30 | Daily page visual polish | Active | [Evidence topic](topics/2026-07-30-daily-page-visual-polish.md) | The daily surface now preserves workspace-title hierarchy, exposes task log as a real button and centers a simplified upload station with a compact action. Thirty-three focused tests and four responsive live widths passed without overflow or browser issues. |
|
||||
| 2026-07-30 | Web login runtime mismatch | Resolved; authenticated runtime active | [Evidence topic](topics/2026-07-30-web-login-runtime-mismatch.md) | Keychain-backed login is active under detached Screen on `*:8766`. A 2026-07-31 Keychain-only rotation and controlled restart reject the prior pair, accept the new pair and pass session/readiness/logout plus loopback/LAN checks without business writes. DHCP has the current LAN entry at `.48`; the password is still not distinct from the username, and reboot-persistent supervision remains open. |
|
||||
| 2026-07-30 | Daily upload filename provenance | Implemented/migrated; post-restart write acceptance pending | [Evidence topic](topics/2026-07-30-daily-upload-filename-provenance.md) | Migration 013 separates `processing_runs.uploaded_filename` from canonical artifact `source.xml`; history/trace use only the upload provenance and old rows render unknown. The authenticated runtime is active; one controlled no-PII upload remains to verify the live write path. |
|
||||
| 2026-07-30 | Task-log relocation and daily-only scope | Historical before-state; superseded by the 2026-07-31 upload interaction update | [Evidence topic](topics/2026-07-30-task-log-relocation-and-scope.md) | The desktop header opens the black task console as a native modal, and history selection still reveals the matching job. The earlier upload-triggered opening is superseded; query inspection still proves both history and trace roots are limited to `pipeline_type = 'opera_daily'`. |
|
||||
| 2026-07-30 | Task-log relocation and daily-only scope | Historical before-state; interaction superseded through 2026-08-11 | [Evidence topic](topics/2026-07-30-task-log-relocation-and-scope.md) | The modal relocation and daily-only query scope remain factual. Upload-triggered opening was removed on 2026-07-31, and Daily-row selection was removed on 2026-08-11; the header `任务日志` link is now the sole dialog opener. |
|
||||
| 2026-07-30 | Company-report path and July month-end readiness | Historical pre-change readiness snapshot; current generation rule superseded | [Evidence topic](topics/2026-07-30-company-report-path-and-month-end-readiness.md) | Missing/unmatched Group Codes leave Booking Room blank and current July projection previews valid 5/5. The topic records the prior July completion boundary and the remaining acceptance work; current-month incomplete periods are now also generatable, with rerun after completion when needed. |
|
||||
| 2026-07-30 | Channel BI post-update data contamination | Active; repair not yet authorized | [Evidence topic](topics/2026-07-30-channel-bi-post-update-data-contamination.md) | Four hash-matched real files total 416 rooms; live API/monthly V04 show 417 because active Finance version 2 is a one-room local fixture. An open BI view can also stay at pre-07-23 value 308 because analytics does not refresh after upload. |
|
||||
| 2026-07-30 | Monthly publication live acceptance | Implemented; current data caveat active | [Evidence topic](topics/2026-07-30-monthly-publication-live-acceptance.md) | Publication mechanics remain verified. Later runs reached V04 active with 417 rows and five published events; 416 are real and one is the known fixture. Browser/access logs previously proved automatic list discovery without refresh. |
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## Metadata
|
||||
|
||||
- Date: 2026-07-30
|
||||
- Status: Historical before-state; superseded by the 2026-07-31 upload interaction update
|
||||
- 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
|
||||
@@ -15,7 +15,8 @@
|
||||
- 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 still opens the selected job's trace.
|
||||
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.
|
||||
|
||||
|
||||
@@ -4,6 +4,10 @@ Date: 2026-08-06
|
||||
Status: implemented and runtime-active
|
||||
Scope: authenticated desktop Daily Report UI only
|
||||
|
||||
Interaction note (2026-08-11): the row-owned task-log behavior described as the surrounding before-state below is
|
||||
superseded in local source by the Daily row / task-log entry-boundary correction. After that change is deployed, only
|
||||
the top-right `任务日志` link opens the log dialog.
|
||||
|
||||
## Reported Problems
|
||||
|
||||
- Clicking `待人工处理` opened the task log instead of the manual-price operation panel.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# `8.6 修正.XML` workbook-to-XML conversion
|
||||
|
||||
## Metadata
|
||||
|
||||
- Date: 2026-08-11
|
||||
- Status: Converted and independently accepted by the active processor
|
||||
- Scope: user-supplied `8.6 修正.XML` workbook and generated upload artifact
|
||||
- Confidence: High for the generated artifact; no original workbook bytes were changed
|
||||
|
||||
## Input classification
|
||||
|
||||
- The supplied file is an XLSX ZIP package despite its `.XML` filename (`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`).
|
||||
- It contains three sheets, with 181 data rows on `Sheet1`; every row has the same `20260806` / `06-08-26` business-date pair.
|
||||
- The first sheet exposes the flattened Opera `RES_DETAIL` fields needed by the ARR parser, plus separate flattened comment and trace columns.
|
||||
|
||||
## Conversion and validation
|
||||
|
||||
- Generated a new UTF-8 `RES_DETAIL` XML with the fixed path
|
||||
`LIST_G_GROUP_BY1/G_GROUP_BY1/LIST_G_RESERVATION/G_RESERVATION`.
|
||||
- Mapped the workbook's required reservation fields without changing business values; flattened comment and trace values
|
||||
were placed in the parser's existing nested `RES_COMMENT` and `TRACE_TEXT` paths. The workbook remained read-only.
|
||||
- Output artifact: `8.6 修正-可上传.XML`, SHA-256
|
||||
`27b41f4338967ba2b5ae03161fa7eb7b63929a9708c0106e01a740e6c2cc1c91`.
|
||||
- `xmllint`, strict UTF-8 decoding and ARR processor 4.0.0 all pass. Processor result is `success` for business date
|
||||
`2026-08-06`: 181 source rows, 37 rate-code exclusions, 29 duplicates, 115 retained rows, zero price-unmatched
|
||||
rows and zero review items. No daily/Finance/database write was performed.
|
||||
|
||||
## Boundary
|
||||
|
||||
This artifact is a deterministic reconstruction from the supplied workbook, not a byte-for-byte restoration of the
|
||||
malformed original Opera export. Upload the generated XML as a new task; keep the source workbook and the original
|
||||
malformed XML as historical inputs.
|
||||
@@ -0,0 +1,41 @@
|
||||
# `0806.XML` invalid UTF-8 diagnosis
|
||||
|
||||
## Metadata
|
||||
|
||||
- Date: 2026-08-11
|
||||
- Status: Read-only input diagnosis; source re-export required
|
||||
- Scope: exact desktop `0806.XML`, processor 4.0.0 isolated replay, public deployment health probe
|
||||
- Confidence: High for the inspected file; the authenticated remote artifact hash was not read
|
||||
|
||||
## Observed behavior
|
||||
|
||||
- The public ARR endpoint at `8.138.234.141:8765` remained healthy: anonymous `/healthz` returned HTTP 200 while
|
||||
authenticated detail endpoints remained protected.
|
||||
- The inspected `0806.XML` is 694,286 bytes with SHA-256
|
||||
`b41c103bfad7f9f0abb25af159a0c5920f0f9b89e156d31919521d057b62639f`.
|
||||
- An isolated active-processor replay exited 3 with `status=failed`, `business_date=null`, zero parsed source rows and
|
||||
exactly one `XML_PARSE_ERROR`: `not well-formed (invalid token): line 1872, column 0`.
|
||||
- The structured result is processor 4.0.0 / Schema 4.0 with `activation_eligible=false`; every outcome count and
|
||||
review count is zero. No price matching was reached.
|
||||
|
||||
## Root cause
|
||||
|
||||
- The XML declaration says UTF-8, but line 1872 inside a `TRACE_TEXT` value begins with bytes
|
||||
`ED A0 BC ED BE 89`.
|
||||
- Those six bytes are the CESU-8 representation of UTF-16 surrogate pair `U+D83C U+DF89`, whose intended Unicode
|
||||
scalar is `U+1F389`. UTF-8 must encode that scalar as one four-byte sequence; XML 1.0 also forbids surrogate code
|
||||
points as PCDATA.
|
||||
- The file contains exactly one such surrogate pair. Its closing XML structure is present, so this is an encoding
|
||||
defect rather than a truncated export.
|
||||
- Manual price review is intentionally unavailable: only a non-empty error set consisting entirely of
|
||||
`PRICE_UNMATCHED` can enter `review_required`; `XML_PARSE_ERROR` is a formal input failure before pricing.
|
||||
|
||||
## Safe recovery boundary
|
||||
|
||||
Re-export the 2026-08-06 Opera XML as standards-compliant UTF-8, preferably after the upstream trace text no longer
|
||||
contains the mis-encoded character, then upload the new export as a fresh task. Do not edit the registered source
|
||||
artifact or convert the failed task into a review case. A fresh replay is still required to discover any later price
|
||||
or business-rule issues after parsing succeeds.
|
||||
|
||||
No original XML byte, upload, review item, database fact, Finance version, object-store object, event or runtime process
|
||||
was changed during this diagnosis.
|
||||
@@ -0,0 +1,47 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user