{"record":{"id":"fc4c48e60db63f37","repo":"denoland/deno","slug":"export-mismatch-expected-got","errorCode":null,"errorMessage":"Export {} mismatch: expected {}, got {}","messagePattern":"Export (.+?) mismatch: expected (.+?), got (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/publish/mod.rs","lineNumber":1507,"sourceCode":"          path,\n          entry.checksum,\n          file.hash\n        );\n      }\n    } else {\n      bail!(\"File {} not found in the tarball\", path);\n    }\n  }\n\n  for (specifier, expected) in &manifest.exports {\n    let actual = package.exports.get(specifier).ok_or_else(|| {\n      deno_core::anyhow::anyhow!(\n        \"Export {} not found in the package\",\n        specifier\n      )\n    })?;\n    if actual != expected {\n      bail!(\n        \"Export {} mismatch: expected {}, got {}\",\n        specifier,\n        expected,\n        actual\n      );\n    }\n  }\n\n  Ok(())\n}\n\nstatic SUPPORTED_LICENSE_FILE_NAMES: [&str; 12] = [\n  \"LICENSE\",\n  \"LICENSE.md\",\n  \"LICENSE.txt\",\n  \"LICENCE\",\n  \"LICENCE.md\",\n  \"LICENCE.txt\",","sourceCodeStart":1489,"sourceCodeEnd":1525,"githubUrl":"https://github.com/denoland/deno/blob/f7822238cab635a3a19f99f493f675fa81a7f9d8/cli/tools/publish/mod.rs#L1489-L1525","documentation":"The registry version manifest records the package's export map, and verification compares every entry against the exports Deno sent. A differing subpath or target means JSR recorded different exports than the local package — a consistency/integrity failure in the provenance step (a missing export locally is the sibling 'Export {} not found in the package' error).","triggerScenarios":"`manifest.exports[specifier] != package.exports[specifier]` during `verify_version_manifest` — the export map changed between upload and manifest generation, or the registry recorded stale/different values.","commonSituations":"Rare; seen during JSR incidents in provenance-enabled (GitHub Actions + OIDC) releases.","solutions":["Re-run the publish job; already-uploaded versions skip and provenance re-verifies against a fresh manifest.","Reproducible mismatches → report at https://github.com/denoland/deno/issues with the package and version.","Urgent releases may pass `--no-provenance` to skip verification."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"#!/usr/bin/env bash\nout=\"$(deno publish 2>&1)\" || {\n  if printf '%s' \"$out\" | grep -q 'Export .* mismatch'; then\n    echo \"registry exports map disagrees with the uploaded package — retry once, then report upstream\" >&2\n    exit 73\n  fi\n  printf '%s\\n' \"$out\" >&2; exit 1\n}","preventionTips":["Freeze the `exports` map before releasing (no last-minute edits between upload and verification).","Retry once for transient ingest drift; persistent mismatches are upstream reports with package+version.","Keep `--dry-run` in pre-release checks so export-map problems surface before the real upload."],"tags":["publish","jsr","exports","manifest","provenance"],"backgroundTag":"exports-map-mismatch","analyzedSha":"f7822238cab635a3a19f99f493f675fa81a7f9d8","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T09:17:48.483Z"}