affaan-m/ECC · error

${EXECUTABLE_OVERRIDE} must be an absolute path explicitly c

Error message

${EXECUTABLE_OVERRIDE} must be an absolute path explicitly configured by the operator.

What it means

Thrown by resolveItoExecutable at scripts/ito.js:199-203 when ECC_ITO_CLI_EXECUTABLE is set and non-empty but path.isAbsolute returns false. ECC requires the operator to name the canonical entry by absolute path so PATH lookup, cwd-relative resolution, and symlinked shims cannot slip a different binary into the credential-bearing invocation. Relative paths and '~'-prefixed paths both fail (Node does not expand ~).

Source

Thrown at scripts/ito.js:200

      ...withoutJson,
    ]),
  });
}

function resolveItoExecutable(environment = process.env) {
  const configured = environment[EXECUTABLE_OVERRIDE]?.trim();
  if (!configured) {
    throw new Error([
      "The canonical ito-compute-cli is unpublished and ECC will not resolve",
      `a credential-bearing "ito" executable from PATH. Build it from`,
      `${CANONICAL_REPOSITORY.replace(/\.git$/, "")}/${CANONICAL_PACKAGE_PATH},`,
      "run npm ci and npm run check, then set",
      `${EXECUTABLE_OVERRIDE} to the explicit absolute dist/bin/ito.js path.`,
    ].join(" "));
  }

  if (!path.isAbsolute(configured)) {
    throw new Error(
      `${EXECUTABLE_OVERRIDE} must be an absolute path explicitly configured by the operator.`
    );
  }
  return assertUsableExecutable(configured);
}

function assertUsableExecutable(candidate) {
  let canonicalCandidate;
  try {
    canonicalCandidate = fs.realpathSync.native(candidate);
  } catch {
    throw new Error(
      `${EXECUTABLE_OVERRIDE} does not point to a readable local Itô CLI file.`
    );
  }
  if (!isCanonicalItoEntry(canonicalCandidate)) {
    throw new Error(
      `${EXECUTABLE_OVERRIDE} must point to the canonical dist/bin/ito.js entry.`

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Set an absolute path: `export ECC_ITO_CLI_EXECUTABLE="$HOME/ito-cloud-runtime/cli/ito-compute-cli/dist/bin/ito.js"`.
  2. If you must compute it dynamically, resolve at export time: `export ECC_ITO_CLI_EXECUTABLE="$(cd "$PKG_DIR" && pwd)/dist/bin/ito.js"`.
  3. Avoid `~` in the value — expand `$HOME` explicitly instead.

Example fix

// before
$ export ECC_ITO_CLI_EXECUTABLE=dist/bin/ito.js
// after
$ export ECC_ITO_CLI_EXECUTABLE="$HOME/ito-cloud-runtime/cli/ito-compute-cli/dist/bin/ito.js"
Defensive patterns

Strategy: validation

Validate before calling

const path = require('path');
function assertExecutableAbsolute(env) {
  const v = (env.ECC_ITO_CLI_EXECUTABLE || '').trim();
  if (!v) throw new Error('ECC_ITO_CLI_EXECUTABLE unset');
  if (!path.isAbsolute(v)) throw new Error(`ECC_ITO_CLI_EXECUTABLE must be absolute: ${v}`);
  return v;
}

Prevention

When it happens

Trigger: `ECC_ITO_CLI_EXECUTABLE=dist/bin/ito.js ecc ito status`; `ECC_ITO_CLI_EXECUTABLE=~/ito/dist/bin/ito.js ecc ito status` (tilde is literal); any non-absolute value.

Common situations: Operator sets the env var from inside the package directory using a relative path; or uses `~` thinking Node will expand it; or a wrapper script captures the value via `pwd`-relative logic that breaks when invoked from elsewhere.

Related errors


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/0f1fb8da97253433. Report an issue: GitHub.