{"record":{"id":"b6c8f57840113112","repo":"Hmbown/CodeWhale","slug":"label-checksum-manifest-is-missing-missing-join","errorCode":null,"errorMessage":"${label} checksum manifest is missing ${missing.join(\", \")}","messagePattern":"(.+?) checksum manifest is missing (.+?)","errorType":"exception","errorClass":"NonRetryableError","httpStatus":null,"severity":"error","filePath":"npm/codewhale/scripts/install.js","lineNumber":1224,"sourceCode":"    `version=${version}`,\n    \"\",\n  ].join(\"\\n\");\n}\n\nasync function writeSourceReceipt(targetPath, source, version) {\n  await writeFile(`${targetPath}.source`, formatSourceReceipt(source, version), \"utf8\");\n}\n\nfunction assertManifestHasAssets(checksums, requiredAssets, label) {\n  const missing = [];\n  for (let i = 0; i < requiredAssets.length; i += 1) {\n    const asset = requiredAssets[i];\n    if (!checksums.has(asset)) {\n      missing.push(asset);\n    }\n  }\n  if (missing.length > 0) {\n    throw new NonRetryableError(\n      `${label} checksum manifest is missing ${missing.join(\", \")}`,\n    );\n  }\n}\n\nasync function fetchChecksumManifest(url, options) {\n  const fetchText = options.fetchText || downloadText;\n  const text = await fetchText(url, {\n    context: options.context,\n    signal: options.signal,\n    totalTimeoutMs:\n      options.totalTimeoutMs === undefined || options.totalTimeoutMs === null\n        ? MANIFEST_TIMEOUT_MS\n        : options.totalTimeoutMs,\n    stallMs:\n      options.stallMs === undefined || options.stallMs === null\n        ? MANIFEST_STALL_MS\n        : options.stallMs,","sourceCodeStart":1206,"sourceCodeEnd":1242,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/433685b2024e7bc4c99e1e2e326bcad39b4d9d65/npm/codewhale/scripts/install.js#L1206-L1242","documentation":"Before downloading, the installer validates that the label's (e.g. the chosen release source's) checksum manifest contains entries for every required asset, collecting all missing names and throwing one aggregated NonRetryableError listing them. This fails fast instead of discovering missing digests mid-verification.","triggerScenarios":"A selected source's fetched manifest lacks one or more assets in the `requiredAssets` list — typically a partial or stale SHA256SUMS on a custom mirror, or a new asset added by the installer that an older mirror's manifest predates.","commonSituations":"Third-party CODEWHALE_RELEASE_BASE_URL mirrors that only republish a subset of assets; installer upgraded to require a new platform artifact the mirror has never hosted; locked/pinned manifest older than the current release's asset set.","solutions":["Use the official GitHub Release source (unset CODEWHALE_RELEASE_BASE_URL / CODEWHALE_USE_CNB_MIRROR) whose manifest is complete.","If you run the mirror, regenerate SHA256SUMS to include every required asset listed in the error.","Only require assets for the current platform by running the installer on a supported target, or upgrade the installer/mirror to matching versions.","Pick a different complete mirror via CODEWHALE_RELEASE_BASE_URL."],"exampleFix":"// before (partial mirror manifest)\ncodewhale-linux-x64.tar.gz  <hash>\n// after (manifest covers all required assets)\ncodewhale-linux-x64.tar.gz  <hash>\ncodewhale-linux-arm64.tar.gz  <hash>\ncodewhale-darwin-x64.tar.gz  <hash>\ncodewhale-darwin-arm64.tar.gz  <hash>\ncodewhale-win32-x64.zip  <hash>","handlingStrategy":"validation","validationCode":"const missing = requiredAssets.filter(a => !checksums.has(a));\nif (missing.length) throw new Error(`Manifest incomplete, missing: ${missing.join(', ')}`);","typeGuard":null,"tryCatchPattern":"try {\n  await install();\n} catch (err) {\n  if (err.message.includes('checksum manifest is missing')) {\n    // switch to the official source or complete the mirror's manifest\n  } else throw err;\n}","preventionTips":["Only use mirrors that publish complete SHA256SUMS files.","Keep installer and mirror versions in sync so required asset lists match.","Fail fast in CI: validate manifest completeness before the install step."],"tags":["npm","installer","checksum","manifest","validation"],"backgroundTag":"checksum-mismatch","analyzedSha":"433685b2024e7bc4c99e1e2e326bcad39b4d9d65","analyzedAt":"2026-09-15T12:24:24.634Z","contentChangedAt":"2026-09-15T12:24:24.634Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}