{
  "schemaVersion": 1,
  "rawCaptureSha256": "08a75f4246af5f0507bc6ddf1a1b801b1df2451882b218d412f0c7b4dd570290",
  "publicRecordSha256": "e39f295baef5b73c6f4ebe04c0045ceb70bb0bf376c8dfd20cfc0a9e15663f5e",
  "runId": "pnpm-global-bin-api-migration-r1-packet",
  "identicalCompletedDuplicates": 0,
  "normalization": {
    "rule": "Longest explicit absolute prefixes first, applied to all JSON keys and string values after original payload binding. Uncovered private machine paths fail closed.",
    "prefixes": [
      {
        "prefixSha256": "4f844d884f01d408bc984ee89ea86df74df80851729615c329fe2b9a0ba1ec81",
        "replacement": "$PROVIDER_STATE"
      },
      {
        "prefixSha256": "70763995471238e65196810d56e0ab15e3151392f5108b4f66d9c4f46e87183b",
        "replacement": "$WORKSPACE"
      },
      {
        "prefixSha256": "514d562510e28d6e6253e4bbeafa3f412d21fa2d0b985c8c8b00f0a4e994b3f4",
        "replacement": "$STUDY"
      },
      {
        "prefixSha256": "768a63684ee857a90d0c5e1aac2d644942946e9d0e89296a385f90a539686b00",
        "replacement": "$REPOSITORY"
      },
      {
        "prefixSha256": "25595d2cdeb1f5f36533058dd527c5d63be24ac139bd3226307a6d8eb4fb391f",
        "replacement": "$TEMP_ROOT"
      },
      {
        "prefixSha256": "ebfbce7eba786938bcd88fce3ee47df82501feb7171536e7afe200d36647bbb7",
        "replacement": "$TEMP_ROOT"
      },
      {
        "prefixSha256": "bb83c0ccb509c1931abaeb39d1a86a485d224480125b8ad357e10e9457d10aaf",
        "replacement": "$TEMP_ROOT"
      },
      {
        "prefixSha256": "76d509b275fdc76041a48f4ed3789b73a1588b1b6c472dff3507750705b8256f",
        "replacement": "$TEMP_ROOT"
      },
      {
        "prefixSha256": "e4693ec98d2762b9a5b34fc9dd8c540384a2a5fb719f88d14d760230b3990fc9",
        "replacement": "$USER_HOME"
      }
    ]
  },
  "actions": [
    {
      "idSha256": "6a9722cdf589a2a068832c955a8253b9df87983501c03dd92e95debae1f409da",
      "type": "command_execution",
      "status": "failed",
      "originalLine": 6,
      "outputSha256": "509e42691499e47a188934af59007553deb4fc896d4fd6336b2e4c4079a7035c",
      "outputBytes": 1234,
      "exitCode": 1,
      "stdout": "\n> test:typelatch-benchmark\n> TZ=UTC TSX_DISABLE_CACHE=1 node --import '$REPOSITORY/node_modules/tsx/dist/loader.mjs' '$REPOSITORY/artifacts/research/large-monorepo/api-migration/public-check.mjs'\n\n{\"passed\":false,\"cases\":3,\"failed\":1,\"results\":[{\"id\":\"writable-global-directory\",\"passed\":false,\"expectedError\":null,\"actual\":{\"ok\":false,\"name\":\"TypeError\",\"code\":null,\"message\":\"(0 , import_can_write_to_dir.sync) is not a function\"},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-nfkClJ\"},{\"id\":\"write-check-disabled\",\"passed\":true,\"expectedError\":null,\"actual\":{\"ok\":true},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-KHwBJZ\"},{\"id\":\"missing-path-setting\",\"passed\":true,\"expectedError\":\"ERR_PNPM_NO_PATH_ENV\",\"actual\":{\"ok\":false,\"name\":\"Error\",\"code\":\"ERR_PNPM_NO_PATH_ENV\",\"message\":\"Couldn't find a global directory for executables because the \\\"PATH\\\" environment variable is not set.\"},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-2COKCa\"}]}\n"
    },
    {
      "idSha256": "4a317b6972e2f1834050485420bd71fe6fc2d87cd25d572cb4b8b327b37bc030",
      "type": "mcp_tool_call",
      "status": "completed",
      "originalLine": 8,
      "server": "typelatch_packet",
      "tool": "workspace_evidence",
      "resultSha256": "82b393156ef29f31cf68e3ffb1335272850bba887495a28b1838b2764c46b2b4",
      "resultBytes": 15642,
      "errorSha256": null,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "EXPERIMENTAL SOURCE EVIDENCE v2. Verbatim modules or enclosing declarations when budget permits; lexical candidates; not resolved definitions. Absence is unproven. Multiple candidates remain alternatives. APIs, compilation and tests are not run by this wrapper.\n\nSTATUS partial inventory=observed ambiguity=unresolved\n\nCOVERAGE {\"complete\":false,\"files\":2715,\"excluded\":231,\"projects\":394,\"configs\":503,\"issues\":4,\"dependencyErrors\":0,\"missingIndexes\":0,\"exhaustive\":false,\"candidateLimitReached\":true}\n\nSEARCH CHECKS retrieved=pass (Lexical candidates only; coverage and ranking limits remain explicit); resolved=not-run (Use workspace_context for compiler resolution); typechecked=not-run (Use workspace_validate for compilation); tested=not-run (No assertion command executed); stable=unknown (Search records files as read; it does not establish an atomic workspace snapshot); artifactMatch=unknown (Installed dependency contents were not compared with registry artifacts) omittedChecks=0\n\nISSUES File exceeds 1 MB: reviewing/list/test/__fixtures__/many-deps/pnpm-lock.yaml; File chunk limit reached: $STUDY/runs/pnpm-global-bin-a [omittedBytes=73 sha256=113add4df9e0d5b6a508c48932edd2d1cbde03a23cfb8ff7863f8ffc988974cf]; File chunk limit reached: $STUDY/runs/pnpm-global-bin-a [omittedBytes=62 sha256=cfc44025f7f7e6276a457f177663b423c139c6005e3c90c23558ce9725887acd] omittedIssues=1\n\nPROVENANCE searchSnapshot=61a7907de24ae4a229aec8969f3d6e95553e3f831e773d5ceafb9b2af046f5cf fullResponseSha256=8950169def0a2f472c76a13bd502ab5699cfde23f8792d607f7ee51eab5653ab sourceImportResolution=not-run\n\nOMISSIONS {\"inputSourceFiles\":7,\"uniqueCandidates\":7,\"returnedCandidates\":4,\"budgetCandidates\":3,\"duplicateSourceRecords\":0,\"invalidSourceRecords\":0,\"upstreamSourceFilesOmitted\":3,\"unavailableImports\":0,\"ambiguousImports\":0,\"syntaxErrorFiles\":0,\"sourceVerification\":\"full hashes checked at expansion and again before return; not an atomic snapshot\",\"metadata\":\"project/config lists and duplicate envelopes omitted; complete response retained only in coordinator diagnostics\"}\n\nCANDIDATE 1 {\"path\":\"config/config/src/checkGlobalBinDir.ts\",\"lines\":[1,41],\"columns\":[1,3],\"offsets\":[0,1665],\"lexicalScore\":104,\"fileSha256\":\"8dbcb5b2792dabb53ee76fc4952f2bad682b039188641975e1ce62b424a3d660\",\"excerptSha256\":\"8dbcb5b2792dabb53ee76fc4952f2bad682b039188641975e1ce62b424a3d660\",\"complete\":true,\"declarationComplete\":false,\"selection\":\"complete-module\",\"omittedBytes\":0}\nimport { promises as fs } from 'fs'\nimport path from 'path'\nimport util from 'util'\nimport { PnpmError } from '@pnpm/error'\nimport { sync as canWriteToDir } from 'can-write-to-dir'\nimport PATH from 'path-name'\n\nexport async function checkGlobalBinDir (\n  globalBinDir: string,\n  { env, shouldAllowWrite }: { env: Record<string, string | undefined>, shouldAllowWrite?: boolean }\n): Promise<void> {\n  if (!env[PATH]) {\n    throw new PnpmError('NO_PATH_ENV',\n      `Couldn't find a global directory for executables because the \"${PATH}\" environment variable is not set.`)\n  }\n  if (!await globalBinDirIsInPath(globalBinDir, env)) {\n    throw new PnpmError('GLOBAL_BIN_DIR_NOT_IN_PATH', `The configured global bin directory \"${globalBinDir}\" is not in PATH`)\n  }\n  if (shouldAllowWrite && !canWriteToDirAndExists(globalBinDir)) {\n    throw new PnpmError('PNPM_DIR_NOT_WRITABLE', `The CLI has no write access to the pnpm home directory at ${globalBinDir}`)\n  }\n}\n\nasync function globalBinDirIsInPath (globalBinDir: string, env: Record<string, string | undefined>): Promise<boolean> {\n  const dirs = env[PATH]?.split(path.delimiter) ?? []\n  if (dirs.some((dir) => areDirsEqual(globalBinDir, dir))) return true\n  const realGlobalBinDir = await fs.realpath(globalBinDir)\n  return dirs.some((dir) => areDirsEqual(realGlobalBinDir, dir))\n}\n\nconst areDirsEqual = (dir1: string, dir2: string): boolean =>\n  path.relative(dir1, dir2) === ''\n\nfunction canWriteToDirAndExists (dir: string): boolean {\n  try {\n    return canWriteToDir(dir)\n  } catch (err: unknown) {\n    if (util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') return false\n    throw err\n  }\n}\n\n\nCANDIDATE 2 {\"path\":\"deps/graph-builder/src/lockfileToDepGraph.ts\",\"lines\":[234,252],\"columns\":[1,51],\"offsets\":[8365,9091],\"lexicalScore\":68,\"fileSha256\":\"620ed6ba6c5ceaa4d41c79f6ba65aac4ca1accf3144f31ca39474c6d11e16384\",\"excerptSha256\":\"d14b0e0b107e090dddf8cb17e225cbd5e9e9c8adb61b4fae7902c5ae015d59ce\",\"complete\":false,\"declarationComplete\":false,\"selection\":\"partial-line-window\",\"omittedBytes\":11899}\n        injectionTargetsByDepPath.set(depPath, [dir])\n      }\n\n      let dirExists: boolean | undefined\n      if (\n        depIsPresent &&\n        depIntegrityIsUnchanged &&\n        isEmpty(currentPackages[depPath].optionalDependencies ?? {}) &&\n        isEmpty(pkgSnapshot.optionalDependencies ?? {}) &&\n        !opts.includeUnchangedDeps\n      ) {\n        dirExists = await pathExists(dir)\n        if (dirExists) return\n        brokenModulesLogger.debug({ missing: dir })\n      }\n\n      let fetchResponse!: Partial<FetchResponse>\n      if (depIsPresent && depIntegrityIsUnchanged && equals(currentPackages[depPath].optionalDependencies, pkgSnapshot.optionalDependencies)) {\n        if (dirExists ?? await pathExists(dir)) {\n\n\nCANDIDATE 3 {\"path\":\"__utils__/test-fixtures/src/index.ts\",\"lines\":[77,89],\"columns\":[1,3],\"offsets\":[2807,3353],\"lexicalScore\":62,\"fileSha256\":\"f1f7bc87db4e43bde0835b3a0760d30903f9319ac926c77dbbfbe3dd086e0456\",\"excerptSha256\":\"e82c11fbabcd3278b9b7b8b3146de9c2bd1884c84cce80c93d5001b4eee30765\",\"complete\":false,\"declarationComplete\":true,\"selection\":\"enclosing-declaration\",\"omittedBytes\":2807}\nfunction findFixture (dir: string, name: string): string {\n  const { root } = path.parse(dir)\n  while (true) {\n    let checkDir = path.join(dir, 'fixtures', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    checkDir = path.join(dir, '__fixtures__', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    checkDir = path.join(dir, 'node_modules/@pnpm/tgz-fixtures/tgz', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    if (dir === root) throw new Error(`Local package \"${name}\" not found`)\n    dir = path.dirname(dir)\n  }\n}\n\n\nCANDIDATE 4 {\"path\":\"env/plugin-commands-env/src/envRemove.ts\",\"lines\":[35,53],\"columns\":[1,27],\"offsets\":[1260,1945],\"lexicalScore\":62,\"fileSha256\":\"6a4a65b30fd7aed38fd8e299d5d31ee37111ac0e731c996f3a248453c5e0d0e6\",\"excerptSha256\":\"6a31758b0382203a0fb1209bb6020b1d672129127c3dff3288c927ed8cf9fddc\",\"complete\":false,\"declarationComplete\":false,\"selection\":\"partial-line-window\",\"omittedBytes\":1626}\n    return new PnpmError('COULD_NOT_RESOLVE_NODEJS', `Couldn't find Node.js version matching ${version}`)\n  }\n\n  const versionDir = path.resolve(nodeDir, nodeVersion)\n\n  if (!existsSync(versionDir)) {\n    return new PnpmError('ENV_NO_NODE_DIRECTORY', `Couldn't find Node.js directory in ${versionDir}`)\n  }\n\n  const { nodePath, nodeLink } = await getNodeExecPathAndTargetDir(opts.pnpmHomeDir)\n\n  if (nodeLink?.includes(versionDir)) {\n    globalInfo(`Node.js ${nodeVersion as string} was detected as the default one, removing ...`)\n\n    const npmPath = path.resolve(opts.pnpmHomeDir, 'npm')\n    const npxPath = path.resolve(opts.pnpmHomeDir, 'npx')\n\n    try {\n      await Promise.all([\n"
          }
        ],
        "structured_content": {
          "text": "EXPERIMENTAL SOURCE EVIDENCE v2. Verbatim modules or enclosing declarations when budget permits; lexical candidates; not resolved definitions. Absence is unproven. Multiple candidates remain alternatives. APIs, compilation and tests are not run by this wrapper.\n\nSTATUS partial inventory=observed ambiguity=unresolved\n\nCOVERAGE {\"complete\":false,\"files\":2715,\"excluded\":231,\"projects\":394,\"configs\":503,\"issues\":4,\"dependencyErrors\":0,\"missingIndexes\":0,\"exhaustive\":false,\"candidateLimitReached\":true}\n\nSEARCH CHECKS retrieved=pass (Lexical candidates only; coverage and ranking limits remain explicit); resolved=not-run (Use workspace_context for compiler resolution); typechecked=not-run (Use workspace_validate for compilation); tested=not-run (No assertion command executed); stable=unknown (Search records files as read; it does not establish an atomic workspace snapshot); artifactMatch=unknown (Installed dependency contents were not compared with registry artifacts) omittedChecks=0\n\nISSUES File exceeds 1 MB: reviewing/list/test/__fixtures__/many-deps/pnpm-lock.yaml; File chunk limit reached: $STUDY/runs/pnpm-global-bin-a [omittedBytes=73 sha256=113add4df9e0d5b6a508c48932edd2d1cbde03a23cfb8ff7863f8ffc988974cf]; File chunk limit reached: $STUDY/runs/pnpm-global-bin-a [omittedBytes=62 sha256=cfc44025f7f7e6276a457f177663b423c139c6005e3c90c23558ce9725887acd] omittedIssues=1\n\nPROVENANCE searchSnapshot=61a7907de24ae4a229aec8969f3d6e95553e3f831e773d5ceafb9b2af046f5cf fullResponseSha256=8950169def0a2f472c76a13bd502ab5699cfde23f8792d607f7ee51eab5653ab sourceImportResolution=not-run\n\nOMISSIONS {\"inputSourceFiles\":7,\"uniqueCandidates\":7,\"returnedCandidates\":4,\"budgetCandidates\":3,\"duplicateSourceRecords\":0,\"invalidSourceRecords\":0,\"upstreamSourceFilesOmitted\":3,\"unavailableImports\":0,\"ambiguousImports\":0,\"syntaxErrorFiles\":0,\"sourceVerification\":\"full hashes checked at expansion and again before return; not an atomic snapshot\",\"metadata\":\"project/config lists and duplicate envelopes omitted; complete response retained only in coordinator diagnostics\"}\n\nCANDIDATE 1 {\"path\":\"config/config/src/checkGlobalBinDir.ts\",\"lines\":[1,41],\"columns\":[1,3],\"offsets\":[0,1665],\"lexicalScore\":104,\"fileSha256\":\"8dbcb5b2792dabb53ee76fc4952f2bad682b039188641975e1ce62b424a3d660\",\"excerptSha256\":\"8dbcb5b2792dabb53ee76fc4952f2bad682b039188641975e1ce62b424a3d660\",\"complete\":true,\"declarationComplete\":false,\"selection\":\"complete-module\",\"omittedBytes\":0}\nimport { promises as fs } from 'fs'\nimport path from 'path'\nimport util from 'util'\nimport { PnpmError } from '@pnpm/error'\nimport { sync as canWriteToDir } from 'can-write-to-dir'\nimport PATH from 'path-name'\n\nexport async function checkGlobalBinDir (\n  globalBinDir: string,\n  { env, shouldAllowWrite }: { env: Record<string, string | undefined>, shouldAllowWrite?: boolean }\n): Promise<void> {\n  if (!env[PATH]) {\n    throw new PnpmError('NO_PATH_ENV',\n      `Couldn't find a global directory for executables because the \"${PATH}\" environment variable is not set.`)\n  }\n  if (!await globalBinDirIsInPath(globalBinDir, env)) {\n    throw new PnpmError('GLOBAL_BIN_DIR_NOT_IN_PATH', `The configured global bin directory \"${globalBinDir}\" is not in PATH`)\n  }\n  if (shouldAllowWrite && !canWriteToDirAndExists(globalBinDir)) {\n    throw new PnpmError('PNPM_DIR_NOT_WRITABLE', `The CLI has no write access to the pnpm home directory at ${globalBinDir}`)\n  }\n}\n\nasync function globalBinDirIsInPath (globalBinDir: string, env: Record<string, string | undefined>): Promise<boolean> {\n  const dirs = env[PATH]?.split(path.delimiter) ?? []\n  if (dirs.some((dir) => areDirsEqual(globalBinDir, dir))) return true\n  const realGlobalBinDir = await fs.realpath(globalBinDir)\n  return dirs.some((dir) => areDirsEqual(realGlobalBinDir, dir))\n}\n\nconst areDirsEqual = (dir1: string, dir2: string): boolean =>\n  path.relative(dir1, dir2) === ''\n\nfunction canWriteToDirAndExists (dir: string): boolean {\n  try {\n    return canWriteToDir(dir)\n  } catch (err: unknown) {\n    if (util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') return false\n    throw err\n  }\n}\n\n\nCANDIDATE 2 {\"path\":\"deps/graph-builder/src/lockfileToDepGraph.ts\",\"lines\":[234,252],\"columns\":[1,51],\"offsets\":[8365,9091],\"lexicalScore\":68,\"fileSha256\":\"620ed6ba6c5ceaa4d41c79f6ba65aac4ca1accf3144f31ca39474c6d11e16384\",\"excerptSha256\":\"d14b0e0b107e090dddf8cb17e225cbd5e9e9c8adb61b4fae7902c5ae015d59ce\",\"complete\":false,\"declarationComplete\":false,\"selection\":\"partial-line-window\",\"omittedBytes\":11899}\n        injectionTargetsByDepPath.set(depPath, [dir])\n      }\n\n      let dirExists: boolean | undefined\n      if (\n        depIsPresent &&\n        depIntegrityIsUnchanged &&\n        isEmpty(currentPackages[depPath].optionalDependencies ?? {}) &&\n        isEmpty(pkgSnapshot.optionalDependencies ?? {}) &&\n        !opts.includeUnchangedDeps\n      ) {\n        dirExists = await pathExists(dir)\n        if (dirExists) return\n        brokenModulesLogger.debug({ missing: dir })\n      }\n\n      let fetchResponse!: Partial<FetchResponse>\n      if (depIsPresent && depIntegrityIsUnchanged && equals(currentPackages[depPath].optionalDependencies, pkgSnapshot.optionalDependencies)) {\n        if (dirExists ?? await pathExists(dir)) {\n\n\nCANDIDATE 3 {\"path\":\"__utils__/test-fixtures/src/index.ts\",\"lines\":[77,89],\"columns\":[1,3],\"offsets\":[2807,3353],\"lexicalScore\":62,\"fileSha256\":\"f1f7bc87db4e43bde0835b3a0760d30903f9319ac926c77dbbfbe3dd086e0456\",\"excerptSha256\":\"e82c11fbabcd3278b9b7b8b3146de9c2bd1884c84cce80c93d5001b4eee30765\",\"complete\":false,\"declarationComplete\":true,\"selection\":\"enclosing-declaration\",\"omittedBytes\":2807}\nfunction findFixture (dir: string, name: string): string {\n  const { root } = path.parse(dir)\n  while (true) {\n    let checkDir = path.join(dir, 'fixtures', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    checkDir = path.join(dir, '__fixtures__', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    checkDir = path.join(dir, 'node_modules/@pnpm/tgz-fixtures/tgz', name)\n    if (fs.existsSync(checkDir)) return checkDir\n    if (dir === root) throw new Error(`Local package \"${name}\" not found`)\n    dir = path.dirname(dir)\n  }\n}\n\n\nCANDIDATE 4 {\"path\":\"env/plugin-commands-env/src/envRemove.ts\",\"lines\":[35,53],\"columns\":[1,27],\"offsets\":[1260,1945],\"lexicalScore\":62,\"fileSha256\":\"6a4a65b30fd7aed38fd8e299d5d31ee37111ac0e731c996f3a248453c5e0d0e6\",\"excerptSha256\":\"6a31758b0382203a0fb1209bb6020b1d672129127c3dff3288c927ed8cf9fddc\",\"complete\":false,\"declarationComplete\":false,\"selection\":\"partial-line-window\",\"omittedBytes\":1626}\n    return new PnpmError('COULD_NOT_RESOLVE_NODEJS', `Couldn't find Node.js version matching ${version}`)\n  }\n\n  const versionDir = path.resolve(nodeDir, nodeVersion)\n\n  if (!existsSync(versionDir)) {\n    return new PnpmError('ENV_NO_NODE_DIRECTORY', `Couldn't find Node.js directory in ${versionDir}`)\n  }\n\n  const { nodePath, nodeLink } = await getNodeExecPathAndTargetDir(opts.pnpmHomeDir)\n\n  if (nodeLink?.includes(versionDir)) {\n    globalInfo(`Node.js ${nodeVersion as string} was detected as the default one, removing ...`)\n\n    const npmPath = path.resolve(opts.pnpmHomeDir, 'npm')\n    const npxPath = path.resolve(opts.pnpmHomeDir, 'npx')\n\n    try {\n      await Promise.all([\n"
        }
      },
      "error": null
    },
    {
      "idSha256": "57dbfc296665f072254d15345fb3a2bbf457ae03cbb6ee8f6020e8f11d4b056b",
      "type": "command_execution",
      "status": "completed",
      "originalLine": 10,
      "outputSha256": "e51e7aaf9d03e40f5e52b4c8276de58faf7f321521392212b69c0613ae24e337",
      "outputBytes": 409,
      "exitCode": 0,
      "stdout": "$WORKSPACE\nAGENTS.md\nls: node_modules/can-write-to-dir: No such file or directory\nlrwxr-xr-x@ 1 dima  staff  80 Nov  6 20:42 config/config/node_modules/can-write-to-dir -> ../../../node_modules/.pnpm/can-write-to-dir@2.0.0/node_modules/can-write-to-dir\n"
    },
    {
      "idSha256": "9462965f2002ffb6e5ebf84d633936910b584441932a9dee26f8497eb9d82c75",
      "type": "command_execution",
      "status": "completed",
      "originalLine": 12,
      "outputSha256": "326f3c7c51cb5f01dbd2bebe92308d3c411b898eaf3af864abe35634cf76ef5d",
      "outputBytes": 7122,
      "exitCode": 0,
      "stdout": "# Agent Guide to pnpm Repository\n\nThis document provides context and instructions for AI agents working on the pnpm codebase.\n\n## Repository Structure\n\nThe pnpm codebase is a monorepo managed by pnpm itself. The root contains functional directories organized by domain:\n\n### Core Directories\n\n-   `pnpm/`: The CLI entry point and main package.\n-   `pkg-manager/`: Core package management logic (installation, linking, etc.).\n-   `resolving/`: Dependency resolution logic (resolvers for npm, tarballs, git, etc.).\n-   `fetching/`: Package fetching logic.\n-   `store/`: Store management logic (content-addressable storage).\n-   `lockfile/`: Lockfile handling, parsing, and utilities.\n\n### CLI & Configuration\n\n-   `cli/`: CLI command implementations and infrastructure.\n-   `config/`: Configuration management and parsing.\n-   `hooks/`: pnpm hooks (readPackage, etc.).\n-   `completion/`: Shell completion support.\n\n### Other Functional Directories\n\n-   `network/`: Network-related utilities (proxy, fetch, auth).\n-   `workspace/`: Workspace-related utilities.\n-   `exec/`: Execution-related commands (run, exec, dlx).\n-   `env/`: Node.js environment management.\n-   `cache/`: Cache-related commands and utilities.\n-   `patching/`: Package patching functionality.\n-   `reviewing/`: License and dependency review tools.\n-   `releasing/`: Release and publishing utilities.\n\n### Shared Utilities\n\n-   `packages/`: Shared utility packages (constants, error handling, logger, types, etc.).\n-   `fs/`: Filesystem utilities.\n-   `crypto/`: Cryptographic utilities.\n-   `text/`: Text processing utilities.\n\n## Setup & Build\n\nTo set up the environment and build the project:\n\n```bash\npnpm install\npnpm run compile\n```\n\n## Testing\n\nNever run all tests in the repository as it takes a lot of time.\n\nRun tests for a specific project instead:\n\n```bash\n# From the project directory\npnpm test\n\n# From the root, filtering by package name\npnpm --filter <package_name> test\n```\n\nOr better yet, run tests for a specific file:\n\n```bash\npnpm --filter <package_name> test <file_path>\n```\n\nOr a specific test case in a specific file:\n\n```bash\npnpm --filter <package_name> test <file_path> -t <test_name_pattern>\n```\n\n## Linting\n\nTo run all linting checks:\n\n```bash\npnpm run lint\n```\n\n## Contribution Workflow\n\n### Changesets\n\nIf your changes affect published packages, you MUST create a changeset file in the `.changeset` directory. The changeset file should describe the change and specify the packages that are affected with the pending version bump types: patch, minor, or major.\n\n**IMPORTANT: Always explicitly include `\"pnpm\"` in the changeset** with the appropriate version bump (patch, minor, or major). The pnpm CLI will only receive automatic patch bumps from its dependencies, so if your change warrants a minor or major version bump for the CLI, you must specify it explicitly. The changeset description will appear on the release notes page.\n\nExample:\n\n```\n---\n\"@pnpm/core\": minor\n\"pnpm\": minor\n---\n\nAdded a new setting `blockExoticSubdeps` that prevents the resolution of exotic protocols in transitive dependencies [#10352](https://github.com/pnpm/pnpm/issues/10352).\n```\n\n**Versioning Guidelines for pnpm CLI:**\n- **patch**: Bug fixes, internal refactors, and changes that don't require documentation updates\n- **minor**: New features, settings, or commands that should be documented (anything users should know about)\n- **major**: Breaking changes\n\n### Commit Messages\n\nFollow the [Conventional Commits](https://www.conventionalcommits.org/) specification.\n    -   `feat`: a new feature\n    -   `fix`: a bug fix\n    -   `docs`: documentation only changes\n    -   `style`: formatting, missing semi-colons, etc.\n    -   `refactor`: code change that neither fixes a bug nor adds a feature\n    -   `perf`: a code change that improves performance\n    -   `test`: adding missing tests\n    -   `chore`: changes to build process or auxiliary tools\n\n## Code Style\n\nThis repository uses [Standard Style](https://github.com/standard/standard) with a few modifications:\n-   **Trailing commas** are used.\n-   **Functions are preferred** over classes.\n-   **Functions are declared after they are used** (hoisting is relied upon).\n-   **Import Order**:\n    1.  Standard libraries (e.g., `fs`, `path`).\n    2.  External dependencies (sorted alphabetically).\n    3.  Relative imports.\n\nTo ensure your code adheres to the style guide, run:\n\n```bash\npnpm run lint\n```\n\n## Common Gotchas\n\n### Error Type Checking in Jest\n\nWhen checking if a caught error is an `Error` object, **do not use `instanceof Error`**. Jest runs tests in a VM context where `instanceof` checks can fail across realms.\n\nInstead, use `util.types.isNativeError()`:\n\n```typescript\nimport util from 'util'\n\ntry {\n  // ... some operation\n} catch (err: unknown) {\n  // ❌ Wrong - may fail in Jest\n  if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {\n    return null\n  }\n  \n  // ✅ Correct - works across realms\n  if (util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') {\n    return null\n  }\n  throw err\n}\n```\n\n## Key Configuration Files\n\n-   `pnpm-workspace.yaml`: Defines the workspace structure.\n-   `package.json` (root): Root scripts and devDependencies.\n-   `CONTRIBUTING.md`: Detailed contribution guidelines.\nls: config/node_modules/.pnpm/can-write-to-dir@2.0.0/node_modules/can-write-to-dir: No such file or directory\nLICENSE\nREADME.md\nindex.d.ts\nindex.js\npackage.json\nimport { promises as fs } from 'fs'\nimport path from 'path'\nimport util from 'util'\nimport { PnpmError } from '@pnpm/error'\nimport { sync as canWriteToDir } from 'can-write-to-dir'\nimport PATH from 'path-name'\n\nexport async function checkGlobalBinDir (\n  globalBinDir: string,\n  { env, shouldAllowWrite }: { env: Record<string, string | undefined>, shouldAllowWrite?: boolean }\n): Promise<void> {\n  if (!env[PATH]) {\n    throw new PnpmError('NO_PATH_ENV',\n      `Couldn't find a global directory for executables because the \"${PATH}\" environment variable is not set.`)\n  }\n  if (!await globalBinDirIsInPath(globalBinDir, env)) {\n    throw new PnpmError('GLOBAL_BIN_DIR_NOT_IN_PATH', `The configured global bin directory \"${globalBinDir}\" is not in PATH`)\n  }\n  if (shouldAllowWrite && !canWriteToDirAndExists(globalBinDir)) {\n    throw new PnpmError('PNPM_DIR_NOT_WRITABLE', `The CLI has no write access to the pnpm home directory at ${globalBinDir}`)\n  }\n}\n\nasync function globalBinDirIsInPath (globalBinDir: string, env: Record<string, string | undefined>): Promise<boolean> {\n  const dirs = env[PATH]?.split(path.delimiter) ?? []\n  if (dirs.some((dir) => areDirsEqual(globalBinDir, dir))) return true\n  const realGlobalBinDir = await fs.realpath(globalBinDir)\n  return dirs.some((dir) => areDirsEqual(realGlobalBinDir, dir))\n}\n\nconst areDirsEqual = (dir1: string, dir2: string): boolean =>\n  path.relative(dir1, dir2) === ''\n\nfunction canWriteToDirAndExists (dir: string): boolean {\n  try {\n    return canWriteToDir(dir)\n  } catch (err: unknown) {\n    if (util.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') return false\n    throw err\n  }\n}\n"
    },
    {
      "idSha256": "919299b8b8860441036a08b8ce4a6486ee1712366afaec2286c8579387359f27",
      "type": "command_execution",
      "status": "completed",
      "originalLine": 14,
      "outputSha256": "587e56bc2abbfa1ed396aa2a047a4f97a71506eecafc3ef5b6ec8e39f3ab21e6",
      "outputBytes": 942,
      "exitCode": 0,
      "stdout": "export function canWriteToDir (dir: string): Promise<boolean>\nexport function canWriteToDirSync (dir: string): boolean\nimport defaultFS from 'node:fs'\nimport { pathTemp } from 'path-temp'\n\nexport async function canWriteToDir (dir, customFS) {\n  const fs = customFS || defaultFS\n  const tempFile = pathTemp(dir)\n  try {\n    await fs.promises.writeFile(tempFile, '', 'utf8')\n    fs.promises.unlink(tempFile).catch(() => {})\n    return true\n  } catch (err) {\n    if (err.code === 'EACCES' || err.code === 'EPERM' || err.code === 'EROFS') {\n      return false\n    }\n    throw err\n  }\n}\n\nexport function canWriteToDirSync (dir, customFS) {\n  const fs = customFS || defaultFS\n  const tempFile = pathTemp(dir)\n  try {\n    fs.writeFileSync(tempFile, '', 'utf8')\n    fs.unlinkSync(tempFile)\n    return true\n  } catch (err) {\n    if (err.code === 'EACCES' || err.code === 'EPERM' || err.code === 'EROFS') {\n      return false\n    }\n    throw err\n  }\n}\n"
    },
    {
      "idSha256": "cfc5c391b5ba915c081c7d09c3edfc599f5369196d03ab00aa96b73369f89b5f",
      "type": "command_execution",
      "status": "completed",
      "originalLine": 19,
      "outputSha256": "b57b68e071ff5220309d5199d67398c3f2b2908f2a1194e57acd96e8c1b84d44",
      "outputBytes": 1135,
      "exitCode": 0,
      "stdout": "\n> test:typelatch-benchmark\n> TZ=UTC TSX_DISABLE_CACHE=1 node --import '$REPOSITORY/node_modules/tsx/dist/loader.mjs' '$REPOSITORY/artifacts/research/large-monorepo/api-migration/public-check.mjs'\n\n{\"passed\":true,\"cases\":3,\"failed\":0,\"results\":[{\"id\":\"writable-global-directory\",\"passed\":true,\"expectedError\":null,\"actual\":{\"ok\":true},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-wBA0G7\"},{\"id\":\"write-check-disabled\",\"passed\":true,\"expectedError\":null,\"actual\":{\"ok\":true},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-FDFR84\"},{\"id\":\"missing-path-setting\",\"passed\":true,\"expectedError\":\"ERR_PNPM_NO_PATH_ENV\",\"actual\":{\"ok\":false,\"name\":\"Error\",\"code\":\"ERR_PNPM_NO_PATH_ENV\",\"message\":\"Couldn't find a global directory for executables because the \\\"PATH\\\" environment variable is not set.\"},\"unhandled\":[],\"temporaryDirectory\":\"$TEMP_ROOTtypelatch-bin-migration-E8sdo7\"}]}\n"
    },
    {
      "idSha256": "a26c6de8780e4e792e8ad6df3fb6ac31fe229b7b2f8bc2aa29c602e8d647918c",
      "type": "command_execution",
      "status": "completed",
      "originalLine": 21,
      "outputSha256": "138ddb3c99a14c064231316a33814c42421889534835ca388b5addfaf717087c",
      "outputBytes": 654,
      "exitCode": 0,
      "stdout": " config/config/src/checkGlobalBinDir.ts | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\ndiff --git a/config/config/src/checkGlobalBinDir.ts b/config/config/src/checkGlobalBinDir.ts\nindex 27c571a..06b8d5d 100644\n--- a/config/config/src/checkGlobalBinDir.ts\n+++ b/config/config/src/checkGlobalBinDir.ts\n@@ -2,7 +2,7 @@ import { promises as fs } from 'fs'\n import path from 'path'\n import util from 'util'\n import { PnpmError } from '@pnpm/error'\n-import { sync as canWriteToDir } from 'can-write-to-dir'\n+import { canWriteToDirSync as canWriteToDir } from 'can-write-to-dir'\n import PATH from 'path-name'\n \n export async function checkGlobalBinDir (\n"
    }
  ],
  "evidenceBoundary": "Only item.completed command_execution stdout and mcp_tool_call result/error payloads. No agent reasoning, assistant messages, command input, unrelated item fields or file edit bodies. Tool-returned message fields remain tool evidence."
}
