# Daily commit waiting for monthly worker

## User question

The operator reported that a Daily Report upload appeared complete but the monthly report did not update.

## Read-only checks

- Port 8766 returned `ready`; the active process list showed the ARR Web service but no independent
  `monthly_reports.worker` / `arr-monthly-worker` process.
- The newest `opera_daily` processing run is run 39. It finished at 2026-08-03 10:49:01 +08 with `accepted` status and
  no failure code.
- Finance daily version 14 is `active` for business date 2026-08-01 and contains 111 retained rows. Its retained
  `ARRIVAL` scope is 2026-08-01, so the automatic worker would derive an August 2026 monthly request.
- Outbox event 20 (`processing-run:39:accepted`, `arr.daily_version_committed`) is still `pending`, has zero publish
  attempts and no error code, and has been available since 2026-08-03 10:49:01 +08.
- `reporting.monthly_runs` contains only July versions. July V04 is active with `as_of_date=2026-07-27`; no August
  version is present.
- A second read-only check found a backlog of five daily-commit events, IDs 16–20, all `pending` with zero attempts
  and no error. Events 16–19 derive the July request through 2026-07-27; event 20 derives the August request through
  2026-08-01. Recovery should let the worker consume them in order and retain its idempotent publication behavior.
- The controlled database file, Python runtime, Node binary and artifact-tool module pass preflight checks. The focused
  monthly suite passes 27 tests with two optional skips. No worker was started and no monthly publication or database
  write was performed.
- The monthly page polls every four seconds only while its tab is visible. That can delay page display, but it cannot
  explain the missing database row because event 20 has not been consumed.

## Recovery

- The user authorized recovery. A detached `arr2-monthly-worker` Screen session was started with the controlled
  `booking_test` configuration and the verified Node/artifact-tool paths.
- The worker consumed outbox events 15–20 in order. Each is now `published` with one attempt and no error code.
- July V05 is `active` at `as_of_date=2026-07-27` with 987 rows; older July V04 is `superseded`. August V01 is
  `active` at `as_of_date=2026-08-01` with 111 rows.
- The August registered workbook/result pair exists under the controlled project output, the XLSX passes ZIP
  integrity, the result JSON reports `success`, and Web `/healthz` remains `ready`.

## Conclusion

The Daily Report was correct; the missing monthly update was caused by the absent worker process. The report is now
updated without re-uploading the source. The remaining operational gap is reboot-persistent supervision of the
detached worker, which is intentionally separate from this recovery and from the later logging work.
