Zac Gaetano zgaetano · He/Him
  • Joined on 2026-03-31
zgaetano commented on issue WildDragonLLC/dragonflight#127 2026-05-26 19:34:06 -04:00
node-agent on zampp2: redundant + dead env vars in .env.worker

Fix Plan — #127 Redundant + dead env vars in zampp2 .env.worker

Root cause: zampp2 .env.worker has:

  • NODE_IP=172.18.91.217 (stale bridge IP) + NODE_IP=172.18.91.200 (dup, second…
zgaetano commented on issue WildDragonLLC/dragonflight#109 2026-05-26 19:34:06 -04:00
node-agent BMD_COUNT override hardcodes /dev/blackmagic/dv${i} but real devices are /dev/blackmagic/io${i}

Fix Plan — #109 BMD_COUNT override hardcodes wrong device paths

Root cause: node-agent/index.js:288-298 — zampp2 has BMD_COUNT=4, override path stores fake paths `/dev/blackmagic/dv…

zgaetano commented on issue WildDragonLLC/dragonflight#108 2026-05-26 19:33:19 -04:00
zampp2 GPU capabilities stuck on raw /dev detection — GPU_COUNT env override blocks nvidia-smi enrichment

Fix Plan — #108 GPU_COUNT env override blocks nvidia-smi enrichment

Root cause: node-agent/index.js:269-284 — zampp2 .env.worker sets GPU_COUNT=1. Override path pushes raw…

zgaetano commented on issue WildDragonLLC/dragonflight#103 2026-05-26 19:33:19 -04:00
Scheduler tick has race condition — multi-node deploy will double-fire recorder starts

Fix Plan — #103 Scheduler race condition (multi-node double-fire)

Root cause: scheduler.js:31-130 polls every 15s. Two mam-api instances both SELECT same pending row, both call…

zgaetano commented on issue WildDragonLLC/dragonflight#91 2026-05-26 19:33:19 -04:00
BUG: recorders.js dockerApi has no socket timeout — hung Docker socket blocks recorder start/stop indefinitely

Fix Plan — #91 dockerApi has no socket timeout

Root cause: recorders.js:22-38dockerApi() uses http.request() with no timeout. Hung Docker daemon → all recorder start/stop…

zgaetano commented on issue WildDragonLLC/dragonflight#90 2026-05-26 19:33:19 -04:00
BUG: Batch-trim DB jobs row is orphaned — no status lifecycle, job_type enum is stale

Fix Plan — #90 Batch-trim DB jobs row orphaned

Root cause: assets.js:batch-trim INSERTs a row into jobs DB table with type "trim" status "queued", but jobs.js GET route reads…

zgaetano commented on issue WildDragonLLC/dragonflight#121 2026-05-26 19:32:02 -04:00
Backend: GET /recorders fires unbounded concurrent Docker API + PG calls (N+1)

Fix Plan — #121 GET /recorders N+1 Docker/PG calls

Root cause: recorders.js:198-202Promise.all over every recording-status recorder makes N concurrent Docker API + N…

zgaetano commented on issue WildDragonLLC/dragonflight#120 2026-05-26 19:32:02 -04:00
Backend: multer.memoryStorage holds 500 MB parts in RAM — concurrent uploads OOM the API

Fix Plan — #120 multer.memoryStorage OOM on concurrent uploads

Root cause: upload.js and assets.js use multer.memoryStorage() with 500MB cap. Each concurrent upload chunk lives in…

zgaetano commented on issue WildDragonLLC/dragonflight#117 2026-05-26 19:32:01 -04:00
Frontend: Schedule rows crash on null recorder_id (orphaned schedule)

Fix Plan — #117 Schedule rows crash on null recorder_id

Root cause: screens-ingest.jsx:1026,1040,1569 call s.recorder_id.slice(0,8) with no null guard. Deleted recorder + orphaned…

zgaetano commented on issue WildDragonLLC/dragonflight#116 2026-05-26 19:32:01 -04:00
Frontend: EditorKeyboard crash on document.activeElement = null

Fix Plan — #116 EditorKeyboard crash on document.activeElement = null

Root cause: screens-editor.jsx:711 reads document.activeElement.tagName without null guard. `document.activeEleme…

zgaetano commented on issue WildDragonLLC/dragonflight#101 2026-05-26 19:31:13 -04:00
Error handler leaks raw Postgres error messages (schema/column/UUID syntax) to clients

Fix Plan — #101 Error handler leaks raw Postgres messages

Root cause: src/middleware/errors.js returns err.message verbatim. PG errors expose schema names, column names, SQL state…

zgaetano commented on issue WildDragonLLC/dragonflight#100 2026-05-26 19:31:13 -04:00
No graceful shutdown handler — SIGTERM kills mam-api mid-tick, leaks Redis + Docker sockets

Fix Plan — #100 No graceful shutdown handler

Root cause: mam-api has no SIGTERM/SIGINT handler. Docker stop kills mid-tick: corrupted scheduler state, leaked BullMQ Redis…

zgaetano commented on issue WildDragonLLC/dragonflight#102 2026-05-26 19:31:13 -04:00
UUID path params not validated — every /:id route returns 500 with PG error on bad input

Fix Plan — #102 UUID path params not validated → 500 on bad input

Root cause: No /:id, /:assetId, /:jobId, /:projectId route validates UUID format before PG query. PG throws…

zgaetano commented on issue WildDragonLLC/dragonflight#107 2026-05-26 19:31:13 -04:00
Migrations silently swallow failures — partial schema upgrades leave server running on broken DB

Fix Plan — #107 Migrations silently swallow failures

Root cause: src/index.js:105-111 wraps each migration in try/catch, console.error, continues loop. Failed migration → partial…

zgaetano commented on issue WildDragonLLC/dragonflight#118 2026-05-26 19:30:08 -04:00
Backend: SDK upload extracts archives with no path-traversal protection (admin-only RCE risk)

Fix Plan — #118 Path traversal in SDK archive extraction

Root cause: src/routes/sdk.js:91-128 runs spawn("tar",…) / spawn("unzip",…) on user-uploaded archives without traversal…

zgaetano commented on issue WildDragonLLC/dragonflight#106 2026-05-26 19:30:07 -04:00
Node hijack: POST /cluster/heartbeat allows any authed user to overwrite primary node's api_url

Fix Plan — #106 Node hijack via POST /cluster/heartbeat

Root cause: cluster.js:102-147 is behind requireAuth (any authed user, including editor). Accepts arbitrary hostname +…

zgaetano commented on issue WildDragonLLC/dragonflight#105 2026-05-26 19:30:07 -04:00
Secret leak: recorder start error response includes full Docker create payload (S3 keys, stream keys)

Fix Plan — #105 Secret leak in recorder start error response

Root cause: recorders.js:451 returns details: createRes.data (Docker API error echoes full request body including…

zgaetano commented on issue WildDragonLLC/dragonflight#104 2026-05-26 19:30:07 -04:00
SSRF: POST /recorders/probe accepts arbitrary URLs and probes raw TCP/UDP on internal network

Fix Plan — #104 SSRF via POST /recorders/probe

Root cause: recorders.js:698-744 forwards user-supplied URL to capture sidecar, falls back to raw net.connect/dgram against any…

zgaetano commented on issue WildDragonLLC/dragonflight#104 2026-05-26 19:28:59 -04:00
SSRF: POST /recorders/probe accepts arbitrary URLs and probes raw TCP/UDP on internal network

🔧 Fix plan incoming — token verified, posting all plans now...

zgaetano opened issue WildDragonLLC/dragonflight#129 2026-05-26 19:09:03 -04:00
test