{"record":{"id":"7ff94231e212eeb1","repo":"remix-run/remix","slug":"route-map-loader-returned-an-unknown-node-kind-for","errorCode":null,"errorMessage":"Route-map loader returned an unknown node kind for \"${name}\".","messagePattern":"Route-map loader returned an unknown node kind for \"(.+?)\"\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/lib/route-map.ts","lineNumber":251,"sourceCode":"  return value.map((entry) => assertRawRouteTreeNode(entry))\n}\n\nfunction assertRawRouteTreeNode(value: unknown): RawRouteTreeNode {\n  if (typeof value !== 'object' || value == null) {\n    throw new Error('Route-map loader returned an invalid route node.')\n  }\n\n  let key = Reflect.get(value, 'key')\n  let name = Reflect.get(value, 'name')\n  let kind = Reflect.get(value, 'kind')\n  let children = Reflect.get(value, 'children')\n\n  if (typeof key !== 'string' || typeof name !== 'string') {\n    throw new Error('Route-map loader returned a route node without a valid name.')\n  }\n\n  if (kind !== 'group' && kind !== 'route') {\n    throw new Error(`Route-map loader returned an unknown node kind for \"${name}\".`)\n  }\n\n  if (!Array.isArray(children)) {\n    throw new Error(`Route-map loader returned invalid children for \"${name}\".`)\n  }\n\n  if (kind === 'group') {\n    return {\n      children: children.map((child) => assertRawRouteTreeNode(child)),\n      key,\n      kind,\n      name,\n    }\n  }\n\n  let method = Reflect.get(value, 'method')\n  let pattern = Reflect.get(value, 'pattern')\n","sourceCodeStart":233,"sourceCodeEnd":269,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/cli/src/lib/route-map.ts#L233-L269","documentation":"Each route node has a discriminator `kind` that must be 'group' or 'route'. An unknown kind means the payload schema doesn't match what the validating code expects.","triggerScenarios":"A node whose `kind` is anything other than 'group'/'route' (e.g. 'layout', 'index', or undefined) reaching assertRawRouteTreeNode.","commonSituations":"Worker binary from a newer/older remix emitting new node kinds; mocked trees with made-up kind values.","solutions":["Ensure all remix packages are the same version and reinstall","Update mocks to use only 'group' or 'route' kinds","Check release notes if a newer worker added kinds your validator doesn't know — upgrade the consuming package too"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"const kinds = new Set(['group', 'route'])\ntree.every(n => kinds.has((n as any).kind))","typeGuard":"function isKnownKind(n: unknown): n is { kind: 'group' | 'route' } {\n  let k = (n as any)?.kind\n  return k === 'group' || k === 'route'\n}","tryCatchPattern":null,"preventionTips":["Upgrade all remix packages together","Only use documented node kinds in mocks","Watch release notes for tree schema changes"],"tags":["routes","worker","internal","validation"],"backgroundTag":"invalid-worker-response","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}