{"record":{"id":"1fc68ae9d9dbb592","repo":"affaan-m/ECC","slug":"it-compute-has-no-paper-or-dry-run-success-mode","errorCode":null,"errorMessage":"Itô compute has no paper or dry-run success mode. No CLI operation was invoked.","messagePattern":"Itô compute has no paper or dry-run success mode\\. No CLI operation was invoked\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/ito.js","lineNumber":152,"sourceCode":"  } catch {\n    throw new Error(\n      \"--config-dir must exist and contain a regular sixtytwo.yaml before any process is started.\"\n    );\n  }\n}\n\nfunction parseArgs(argv, environment = process.env) {\n  const args = [...argv];\n  if (\n    args.length === 0\n    || args.includes(\"--help\")\n    || args.includes(\"-h\")\n  ) {\n    return Object.freeze({ help: true, invocationArgs: [] });\n  }\n\n  if (environment.ECC_DRY_RUN === \"1\" || args.includes(\"--dry-run\")) {\n    throw new Error(\n      \"Itô compute has no paper or dry-run success mode. No CLI operation was invoked.\"\n    );\n  }\n\n  const jsonIndexes = args\n    .map((value, index) => (value === \"--json\" ? index : -1))\n    .filter((index) => index >= 0);\n  if (jsonIndexes.length > 1) {\n    throw new Error(\"--json may only be provided once\");\n  }\n  const withoutJson = args.filter((value) => value !== \"--json\");\n  const command = withoutJson.shift();\n  if (!SUPPORTED_COMMANDS.includes(command)) {\n    throw new Error(\n      `Unsupported Itô command \"${command || \"(missing)\"}\"; ECC permits only login, logout, auth, find, status, and evals.`\n    );\n  }\n  if (command === \"auth\" && withoutJson.includes(\"--no-browser\")) {","sourceCodeStart":134,"sourceCodeEnd":170,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/scripts/ito.js#L134-L170","documentation":"parseArgs deliberately refuses any dry-run mode: if ECC_DRY_RUN=1 is set in the environment or --dry-run is passed, it throws because the Itô compute CLI has no paper/dry-run success mode — there is no safe way to simulate real compute operations. No operation is invoked and the command fails fast.","triggerScenarios":"Running `ECC_DRY_RUN=1 ecc ito status`, or `ecc ito evals --dry-run ...`, or any ecc ito subcommand when the environment variable ECC_DRY_RUN is set to \"1\" (e.g. exported globally in a CI or shell profile).","commonSituations":"Exporting ECC_DRY_RUN=1 for other ECC tools and forgetting to scope it; CI harnesses that blanket-set dry-run variables; assuming a --dry-run flag works uniformly across all ECC subcommands.","solutions":["Unset the variable: unset ECC_DRY_RUN (or remove it from the export in your shell profile/CI job)","Remove the --dry-run flag from the ito invocation","Scope dry-run settings per-command instead of globally when mixing ECC tools","Use the real operation in a controlled environment since no paper mode exists for ito"],"exampleFix":"// before\nECC_DRY_RUN=1 ecc ito status\n// after\nenv -u ECC_DRY_RUN ecc ito status","handlingStrategy":"validation","validationCode":"if (process.env.ECC_DRY_RUN === '1' || process.argv.includes('--dry-run')) {\n  throw new Error('ecc ito does not support dry-run; unset ECC_DRY_RUN and drop --dry-run');\n}","typeGuard":null,"tryCatchPattern":"try {\n  runIto(args);\n} catch (e) {\n  if (e.message.includes('dry-run')) {\n    const { ECC_DRY_RUN, ...cleanEnv } = process.env;\n    runIto(args.filter(a => a !== '--dry-run'), cleanEnv);\n  } else throw e;\n}","preventionTips":["Never export ECC_DRY_RUN globally; scope it per-command when other ECC tools need it","In CI wrappers, strip ECC_DRY_RUN before dispatching to ecc ito subcommands","Document that ecc ito has no paper mode so no one tries to add --dry-run"],"tags":["cli","dry-run","environment"],"backgroundTag":"unsupported-operation","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}