{"record":{"id":"9759721dc103a524","repo":"remix-run/remix","slug":"message-message","errorCode":null,"errorMessage":"${message.message}","messagePattern":"\\$\\{message\\.message\\}","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"packages/node-hmr/src/lib/runner.ts","lineNumber":416,"sourceCode":"        },\n      )\n      return\n    }\n\n    if (message.type === 'node-hmr:child:server-ready') {\n      if (childRestartGeneration !== pendingRestartGeneration) return\n      serverReadyCount += 1\n      waitingForEntryServerReady = false\n      setReadyGeneration(childRestartGeneration)\n      resolveReadyWaiters()\n      flushPendingServerUpdateEvent()\n      flushAcceptedHotUpdateBrowserEvent()\n      return\n    }\n\n    if (message.type === 'node-hmr:child:restart-requested') {\n      if (message.message !== undefined) {\n        console.warn(message.message)\n      }\n\n      pendingServerUpdateEvent = true\n      clearPendingHotUpdates()\n      logRestart(message.message ?? 'import.meta.hot.invalidate()')\n      scheduleRestart()\n      return\n    }\n\n    if (message.type === 'node-hmr:child:module-imported') {\n      moduleStore.addDependency(message.importerUrl, message.depUrl)\n      return\n    }\n\n    if (message.type === 'node-hmr:child:accepted-deps-resolved') {\n      moduleStore.setAcceptedDependencies(message.url, message.acceptedDeps)\n      return\n    }","sourceCodeStart":398,"sourceCodeEnd":434,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/node-hmr/src/lib/runner.ts#L398-L434","documentation":"This is a console warning emitted by the Remix node HMR runner when a child process requests a restart and includes a custom message (e.g. from import.meta.hot.invalidate('reason')). It is not a thrown error; the message is logged and a server restart is scheduled, clearing any pending hot updates.","triggerScenarios":"Calling import.meta.hot.invalidate('some reason') in a module during an active HMR session, or any child process message of type 'node-hmr:child:restart-requested' that carries a non-undefined `message` field.","commonSituations":"Developers adding invalidation reasons to hot-update hooks in Remix node apps and seeing their own message echoed as a warning; also when HMR state is stale and a full restart is triggered mid-update.","solutions":["Treat the log as informational: it echoes the invalidation reason you passed to import.meta.hot.invalidate()","If the message is unexpected, search your code for import.meta.hot.invalidate calls that fire repeatedly","Avoid calling invalidate() on every module evaluation; guard it behind a condition"],"exampleFix":"// before\nimport.meta.hot.invalidate('always')\n// after\nif (needsFullReload) {\n  import.meta.hot.invalidate('config changed')\n}","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only call import.meta.hot.invalidate with a reason when a full reload is truly needed","Guard invalidate calls behind state checks to avoid repeated restarts"],"tags":["hmr","node","restart","warning"],"backgroundTag":"hot-module-reload-invalidate","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}