{"record":{"id":"65dff7fb3bd25a61","repo":"stablyai/orca","slug":"renderer-manifest-is-missing-entry-key","errorCode":null,"errorMessage":"Renderer manifest is missing entry: ${key}","messagePattern":"Renderer manifest is missing entry: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"config/scripts/project-renderer-web-client.mjs","lineNumber":40,"sourceCode":"function assertEntryIsolation() {\n  const entryKeys = new Set(\n    Object.entries(manifest)\n      .filter(([, entry]) => entry?.isEntry === true)\n      .map(([key]) => key)\n  )\n\n  for (const sourceEntry of entryKeys) {\n    const visited = new Set()\n    const pending = [sourceEntry]\n    while (pending.length > 0) {\n      const key = pending.pop()\n      if (visited.has(key)) {\n        continue\n      }\n      visited.add(key)\n      const entry = manifest[key]\n      if (!entry || typeof entry !== 'object') {\n        throw new Error(`Renderer manifest is missing entry: ${key}`)\n      }\n      for (const dependency of [...(entry.imports ?? []), ...(entry.dynamicImports ?? [])]) {\n        if (entryKeys.has(dependency) && dependency !== sourceEntry) {\n          throw new Error(`Renderer entry ${sourceEntry} executes entry ${dependency}`)\n        }\n        pending.push(dependency)\n      }\n    }\n  }\n}\n\nfunction addOutputPath(outputPath) {\n  if (\n    typeof outputPath !== 'string' ||\n    outputPath.length === 0 ||\n    outputPath.startsWith('/') ||\n    /^[A-Za-z]:/.test(outputPath) ||\n    outputPath.includes('\\\\') ||","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/scripts/project-renderer-web-client.mjs#L22-L58","documentation":"assertEntryIsolation walks each Vite entry's import/dynamicImport graph and requires every referenced manifest key to exist and be an object. A missing entry means the manifest is internally inconsistent — an import points at a chunk key the build did not emit. This is separate from 159 because it fires during the isolation check, before any file staging.","triggerScenarios":"manifest[sourceEntry].imports or .dynamicImports contains a key K, but manifest[K] is undefined or not an object. Happens with a partially-written manifest, a stale manifest from an aborted build, or a Vite version that emits import strings the walker does not expect.","commonSituations":"out/renderer/.vite/manifest.json left over from a previous build with different entry names; a build that crashed mid-write; manual edits to the manifest; or a Vite/Rollup upgrade that changed chunk naming so old import references dangle.","solutions":["Rebuild the renderer cleanly: remove out/renderer and rerun the Vite build before projecting","Open out/renderer/.vite/manifest.json and confirm the dangling key K exists as a top-level entry","Pin the Vite/Rollup version if an upgrade changed chunk naming","If projecting against a hand-curated manifest, validate it with a schema check before this script"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"function manifestHasAllKeys(manifest, keys) {\n  for (const k of keys) {\n    if (!manifest[k] || typeof manifest[k] !== 'object') {\n      throw new Error(`manifest missing entry: ${k}`)\n    }\n  }\n}","typeGuard":"function isManifestEntry(v) {\n  return v && typeof v === 'object' && (typeof v.file === 'string' || Array.isArray(v.imports))\n}","tryCatchPattern":null,"preventionTips":["Clean out/renderer before rebuilding so no stale manifest lingers","Pin Vite/Rollup versions to avoid chunk-naming changes that dangle imports","Run the projection immediately after a successful build"],"tags":["build","vite","manifest","validation"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}