# Monthly worker logging and observability gap ## Scope Review of the logging and monitoring surfaces after user-authorized recovery of the independent monthly worker. ## Confirmed gaps - The worker emits sparse JSON outcomes only when it is not idle; it does not emit startup, heartbeat, claim, duration or private exception-detail records. Detached Screen is the current process owner and is not durable application logging. - Web request logs go through the standard handler's stderr logger with path-only request data. The checked-in local runtime has no service-specific rotating log file. - Anonymous `/healthz` checks Web database/upload readiness only. Authenticated `monthly_ready` describes Web's manual monthly coordinator, not the separate worker process. - PostgreSQL outbox status and the daily task trace are durable and privacy-minimized, but they cannot prove the worker is alive. The trace also uses generic downstream wording for the monthly event. ## Recommendation Add structured worker/Web logs with bounded retention, a durable worker heartbeat/status surface, monthly-specific task trace states, and supervisor/alert checks for stale heartbeat, old pending events, expired leases and dead events. Keep database lifecycle state authoritative and keep raw business/source payloads, secrets and full hashes out of logs. No code, migration, supervisor or runtime change was made during this review.