Catalog data only refreshed on first boot, admin button click, or
checkout retry — nothing kept it fresh on a schedule despite the
cache-refresh endpoint being built for cron use. A Next instrumentation
hook was tried first but broke the build (middleware.ts forces
instrumentation.ts into the same edge bundle, which can't resolve
fs/path/crypto). Using a lightweight cron sidecar in the compose stack
instead, so it ships with the deployment regardless of host.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>