BUG:
proxy.js worker sets status='error' on failure at end — overrides existing live/ingesting status
BUG:
GET /assets with both status and include_archived=true — archived filter overrides status filter
BUG:
upload.js AMPP sync is fire-and-forget — errors swallowed silently with no retry
BUG:
GET /assets/:id/live-path uses asset display_name to find recorder — will match wrong recorder
BUG:
job_type and job_status enums don't match — jobs.js DB table uses job_type ENUM with missing values
BUG: Upload
POST /part uses upload.single('file') but nginx strips Content-Type for multipart — multer may misparse
BUG: BullMQ orphan jobs remain when asset row is deleted — no GC for dangling jobs
BUG:
/health endpoint intercepted by nginx — returns text/plain "healthy\n", not application/json
BUG:
PUT /sequences/:id/clips uses client.query('BEGIN') without error rollback on the inner INSERT loop
BUG:
POST /assets/batch-trim creates jobs table row with wrong job_type — no matching pg_enum value
BUG:
POST /assets no input validation for duration — NaN stored when absent
BUG:
GET /upload route missing — upload.js has no list endpoint, frontend may 404
BUG: Recorder scheduler
enqueueNextOccurrence does not check end_at < start_at for cloned rows
BUG:
POST /assets/:id/mark-empty requires status=live — but capture shutdown may pass wrong assetId
BUG:
GET /schedules?status=invalid returns all schedules instead of 400
BUG:
POST /assets body param sourceType, needsProxy documented but unused
BUG:
POST /assets with status=live asset already existing: captures registered as processing overwrite the live asset
BUG:
deleteObject in asset hard-delete may throw — route has no catch per-item
BUG: S3 proxy client export breaks when s3Client is rebuilt