# Stale Items

## Active Conflicts / Gaps

| Date | Document / Module | Issue | Next Action |
|---|---|---|---|
| 2026-08-11 | Daily row / task-log production deployment | Local source and tests now make the header `任务日志` link the sole dialog opener, but the user-reported production site `8.138.234.141:8765` still serves the old row-opening behavior. This task did not push, restart or deploy the production service | Release the scoped frontend/tests through the controlled production workflow, then perform authenticated read-only QA: ordinary row leaves the dialog closed, review control focuses the operation panel, header control opens the dialog, and download remains independent |
| 2026-08-11 | `booking_ingestion.excel` header compatibility deployment | Parser 2.1.0 now supports the approved legacy Thai and bilingual Lian Tai/QBD full headers through exact normalized aliases; synthetic/coordinator tests, four exact workbook replays and wrong-report rejections pass. The UI remains one-file and activation replaces the singleton full source rather than appending separate files | Deploy/restart Web, verify authenticated readiness, then run the four supplied files through a read-only parser replay before any separately authorized upload/review/activation. Treat multi-file append as a separate product decision; QBD's pending room-type items still require the existing manual review workflow |
| 2026-08-06 | Daily `PRICE_UNMATCHED` final Finance acceptance / business date 2026-08-05 | Integer UI/API and both finalization defects are repaired and deployed: migration 018 admits the immutable manifest artifact, the Finance INSERT bind count is exact, and a real PostgreSQL rollback slice passes. Latest run 67 is still revision-2 `generation_failed` with frozen GRP1/LBLT `200/0`; it has no Finance version or run outbox. Run 66 separately retains `2300/0`, run 65 remains unset, and rejected version 28 remains immutable | Refresh/login, open latest run 67, verify `200/0` are the intended approved values, then explicitly retry generation once. Do not retry run 66 by mistake. After success, prove 153 retained rows with 2 `manual_review` rows, one active Finance version, matching frozen-manifest SHA and exactly one new final daily-commit/monthly event; do not modify version 28 |
| 2026-07-31 | Booking raw Excel parser/review business acceptance | Parser 2.1, migrations 014/015, atomic draft repository, routes, editor, HTTP transport and current runtime are ready. Supplied-workbook replay, expanded tests, live 5/5 processing and a real-PostgreSQL create/edit/activate/rollback slice pass. No authorized real workbook has replaced the current source | Run one operator-authorized complete-workbook upload/review/activation, then one released five-company job and verify all downloads |
| 2026-07-31 | Booking review audit depth | Migration 015 stores current confirmed/pending/deleted state but no reviewer, reason, explicit review event, old/new values or immutable revision history. Repository logic serializes and gates activation, but declarative DB guards are limited and same-artifact re-extraction deletes earlier unactivated edits | Confirm whether single-operator latest-state editing is sufficient. If review must be auditable, add actor/reason/event or revision tables, optimistic concurrency and DB transition guards before migration acceptance |
| 2026-07-31 | Booking Excel current-source runtime acceptance | Current port 8766 loads the review composition with all readiness flags true; migrations 014/015 are recorded and `booking.current_source_batch` still selects Markdown batch 1. A 14:14 +08 read-only recheck found no reviewing draft; the prior draft is no longer an active task-creation blocker and did not switch the current source. The Markdown five-workbook baseline has been frozen with exact hashes | Run one Markdown-backed five-company Web job after the July period completes if a final-period snapshot is desired, then verify downloads. Keep any later complete-workbook activation operator-authorized, then compare its five overlapping Group Codes with the frozen baseline |
| 2026-07-31 | Booking Group Code uniqueness invariant | Current views globally merge the same Group Code across worksheets. The fixture has 23 codes shared by `DY-AI-Easy-KB` and `LIANTAI-FIT`; none is used by current Finance, so current output is unaffected but real-source semantics are not confirmed | Confirm whether those rows are intentionally additive. If Group Code can vary by channel or stay segment, add explicit business dimensions to the Excel contract, schema and report join before real imports |
| 2026-07-30 | Port-8766 business acceptance / supervision | Authenticated Web on `*:8766` loads Booking review and all readiness flags are true. The dedicated monthly worker was recovered in a detached Screen session and drained the pending daily-commit backlog; the Screen session, like the Web session, is not reboot-persistent | Choose and install a managed reboot-persistent supervisor that can access the Desktop-hosted project, then verify worker restart/heartbeat behavior before the next controlled real review/company-report acceptance |
| 2026-08-03 | Monthly worker logging / observability | Worker outcomes are sparse Screen stdout; Web request lines go to stderr; `/healthz` and authenticated `monthly_ready` do not represent independent worker liveness. Outbox/task-trace facts are durable but have no worker heartbeat or monthly-specific end-to-end state | Add privacy-minimized structured logs with rotation, durable worker heartbeat/status, monthly-specific trace wording and stale-queue/dead-event checks; validate retention and restart detection before treating worker monitoring as complete |
| 2026-08-03 | Daily trace versus company-report failure visibility | The Daily `arr trace` proves Finance commit/outbox publication but cannot identify an independent company-report job or its publish-stage error; it also exposes unknown execution metadata and a full source hash | Add separate company-report trace linkage, monthly report identity fields, runtime/build identity and default hash masking; verify the operator can diagnose a publish failure without reading private job files |
| 2026-08-03 | Company-report source trace/runtime freshness | Resolved 2026-08-03: PID 11176 was replaced by PID 54127; job `05cc547d…` captured active batch-7 source metadata, succeeded 5/5 and passed five download/hash checks. Historical `source: null` records remain intentionally unchanged | Keep historical null-source jobs as-is; do not backfill by guessing. Reboot-persistent Web/worker supervision remains a separate deployment task |
| 2026-07-31 | Web credential strength | The requested Keychain-only rotation and controlled restart passed, but the newly selected password still satisfies only the minimum-length rule and remains identical to the username | When the operator chooses a distinct high-entropy password, update only the existing Keychain item and repeat the controlled Web restart/login/logout check |
| 2026-07-30 | `booking_test` current Finance projection | The earlier 417-row snapshot included accepted run `mvp-v1-fixture-20260727` from `synthetic.xml`/`local_fixture`. A 2026-07-31 14:17 read-only company-report recheck found 986 current supported-company facts, so the old 416/417 remediation target is no longer a complete description of current Finance state | Re-audit current daily-version pins and source provenance before any fixture retirement; require explicit authorization for version changes, then verify the clean target and watermark |
| 2026-07-30 | Channel BI refresh lifecycle | Resolved 2026-08-03. Desktop and public H5 now check selected-month metadata every five seconds while visible and reload full analytics only after `updated_at` changes; hidden views pause and transient failures preserve the last good snapshot | Refresh the browser once to load the new static assets, then observe the next authorized publication as a live acceptance check |
| 2026-07-30 | Channel BI KPI label | The card labeled `公司数` renders worksheet-level `channel_count`; LianTai GROUP/FIT are two channels, so six does not mean six companies | Decide whether to relabel it `渠道/子表数` or implement an explicit five-company aggregation |
| 2026-08-04 | Production monthly-worker packaging | Resolved in code: monthly/company builders are Python/openpyxl-only, new report artifacts use private OSS, and `.web-jobs` remains local. Live `booking_test` function/comment evidence confirms migration-016 semantics are active; its earlier application timestamp is not recorded, and 016 was deliberately not rerun during the 017 rollout. Docker/CentOS acceptance remains operator-side | Rebuild the clean image, start Web plus the independent worker with existing OSS secrets, then verify OSS-backed downloads after removing the report cache |

## Superseded For ARR2.0

- ADR-002 controlled Agent orchestration and ADR-003 public source URL are ARR1 history; ADR-004 is authoritative.
- Agent/MCP Prompt experiments, trace reconciliation and grant-expiry issues do not apply to the ARR2.0 active path.
- Historical handoffs that describe Web + MCP deployment or Agent credentials are not deployment instructions; use the
  root and `deploy/` READMEs.

## Missing Context

- No unresolved monthly business-rule context. ADR-001 defines the dedicated worker and max-included-`ARRIVAL` policy.
