{"record":{"id":"c00ef47c4d519c2b","repo":"clash-verge-rev/clash-verge-rev","slug":"timed-out-waiting-for-graceful-dev-shutdown","errorCode":null,"errorMessage":"timed out waiting for graceful dev shutdown","messagePattern":"timed out waiting for graceful dev shutdown","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/dev-control.mjs","lineNumber":231,"sourceCode":"  waitForPortClosed: waitForClosed,\n  waitForChildExit,\n  terminateGroup,\n  finalizeGroup = terminateGroup,\n  exit,\n  report = (message) => console.error(message),\n  timeoutMs = DEFAULT_TIMEOUT_MS,\n  forceTimeoutMs = 2_000,\n  now = Date.now,\n}) {\n  let signalCount = 0\n  let forced = false\n  let forcedPromise\n  let groupFinalizationPromise\n\n  const remainingBudget = (deadline) => {\n    const remaining = deadline - now()\n    if (remaining <= 0) {\n      throw new Error('timed out waiting for graceful dev shutdown')\n    }\n    return remaining\n  }\n\n  const finalizeOnce = (operation, budget) => {\n    groupFinalizationPromise ??= Promise.resolve().then(() => operation(budget))\n    return groupFinalizationPromise\n  }\n\n  const gracefulShutdown = async () => {\n    const deadline = now() + timeoutMs\n    try {\n      const record = await requestQuit(remainingBudget(deadline))\n      if (forced) return false\n      await waitForClosed(record.port, remainingBudget(deadline))\n      if (forced) return false\n      await waitForChildExit(remainingBudget(deadline))\n      if (forced) return false","sourceCodeStart":213,"sourceCodeEnd":249,"githubUrl":"https://github.com/clash-verge-rev/clash-verge-rev/blob/5cad0f2799e74b1105e133bcfc2a45f5c1370ef1/scripts/dev-control.mjs#L213-L249","documentation":"Error \"timed out waiting for graceful dev shutdown\" thrown in clash-verge-rev/clash-verge-rev.","triggerScenarios":"Thrown at scripts/dev-control.mjs:231 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"5cad0f2799e74b1105e133bcfc2a45f5c1370ef1","analyzedAt":"2026-08-12T03:25:57.699Z","schemaVersion":2},"datasetVersion":"2026-08-12T08:17:17.861Z"}