Get this on every PR automatically. Webhook fires, AI reviews, you approve.
Install on vercel/eve →
// reviewed by pulllight

PullLight found 3 issues

vercel/eve #382 — fix(eve): Slack follow-ups for legacy scheduled threads by @AndrewBarba Jun 28, 2026
2 high 1 medium
🔍
// convert to your repo
PullLight caught 3 2 high, 1 medium on this PR.
Install on vercel/eve to get this on every PR automatically — 60 seconds.
Findings
3 issues
high race-condition
`namespaceHealthCache` is a module-level `Map` that stores `Promise<boolean>` values and is never evicted. In a long-running server process this means: (1) a failed probe result is cached forever — if the target deployment later upgrades and starts consuming the new namespace, it will never be re-probed; (2) more critically, if `probeWorkflowNamespace` rejects (despite the inner try/catch it could still reject in theory), the rejected Promise stays in the cache and every subsequent caller for that key will get the same rejection. Consider using a TTL-based cache or at minimum removing the entry on rejection.
// packages/eve/src/internal/workflow/runtime.ts:35
high null-deref
`world.runs.get(hook.runId, { resolveData: "none" })` — if the run does not exist (e.g. it was deleted or the runId is stale), `run` will be `null`/`undefined` and the immediately following `run.deploymentId` access will throw. That exception is caught by the outer try/catch in `resumeHook` and silently swallowed, but the original hook is still returned, so the caller won't notice. Add a null-guard: `if (run == null) return;`
// packages/eve/src/internal/workflow/runtime.ts:75
⚡ Suggested fix
  const run = await world.runs.get(hook.runId, { resolveData: "none" });
  if (run == null) return;
  if (run.deploymentId === currentDeploymentId) return;
medium logic
`workflowQueueName` uses `LEGACY_EVE_WORKFLOW_QUEUE_NAMESPACE` ("eve") hardcoded as the namespace when enqueuing the legacy wake-up, but the queue name format `__eve_wkf_workflow_${workflowName}` is constructed from the constant. If `run.workflowName` is `undefined` (the field is typed as optional on `WorkflowRunWithoutData`), the resulting queue name becomes `__eve_wkf_workflow_undefined`, which is silently wrong. Add a guard: `if (!run.workflowName) return;` before calling `world.queue`.
// packages/eve/src/internal/workflow/runtime.ts:107
model: claude-sonnet-4-5   input: 4861 tokens   output: 812 tokens