- Add CreateScheduleEntryModal with pill-based type selector and split date/time inputs
- Rewrite AddTimeModal to self-fetch activities with loading/empty states
- Empty state offers 'Create Schedule Entry' shortcut when no open activities
- Add SvelteKit proxy routes for /activities and /time endpoints
- Split datetime-local inputs into separate date+time fields across modals
- Fix CW date format: strip milliseconds from ISO strings (keep Z)
- Add ScheduleEntry to workflow history type whitelist
- Show open schedule entries panel in WorkflowPanel
- Auto-refresh ActivityTab after workflow actions
- Reduce activity dot size and fix connector width overflow
- Hide creation date row for Schedule Entry activities in timeline
incremental-sync.ts and api/cw/sync.ts imported getBoss() from workert.ts.
When workert.ts (the entry point) dynamically imported incremental-sync.ts,
it triggered a circular module re-evaluation that hung indefinitely.
Extract the PgBoss singleton and getBoss() factory to a new boss-instance.ts
module that neither has top-level async side-effects nor imports from
workert.ts. All consumers (workert.ts, index.ts, incremental-sync.ts,
cw/sync.ts) now import from boss-instance.ts instead.
- Add statement_timeout=30000ms to PgBoss connection URL to prevent
SQL queries from hanging indefinitely
- Add connectionTimeoutMillis=15s to PgBoss config for connection timeout
- Wrap boss.start() in 30s Promise.race timeout with process.exit(1)
on failure to ensure container restarts instead of hanging silently
- Add debug logging around PgBoss startup to diagnose connection issues
The socket retrieved from ensureManagerSocketReady() was never passed to
enqueueDalpuriFullSync(), so inside createWorkerJob the socket.emit('requestId')
call crashed with 'TypeError: undefined is not an object (evaluating A.emit)'.
This caused every full sync job to fail immediately, leaving the DB empty.
The 5s incremental sync interval then flooded the queue with 4700+ jobs that
all failed too since there was no data.
Also manually cleared the backlog of 4720 failed/pending incremental jobs and
2 failed full sync jobs from the production queue.