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
- Set an absolute path: `export ECC_ITO_CLI_EXECUTABLE="$HOME/ito-cloud-runtime/cli/ito-compute-cli/dist/bin/ito.js"`.
- If you must compute it dynamically, resolve at export time: `export ECC_ITO_CLI_EXECUTABLE="$(cd "$PKG_DIR" && pwd)/dist/bin/ito.js"`.
- 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
- Use $HOME (not ~) when constructing the path for export.
- Compute the path at export time via $(pwd) or node path.resolve, not relative literals.
- Lint shell rc files for any tilde-prefixed ECC_ITO_CLI_EXECUTABLE assignment.
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
- ${EXECUTABLE_OVERRIDE} does not point to a readable local It
- ${EXECUTABLE_OVERRIDE} must point to the canonical dist/bin/
- --config-dir must be an existing absolute directory.
- The canonical ito-compute-cli is unpublished and ECC will no
- Live node qualification requires ITO_ENABLE_SIXTYTWO_LIVE=1
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/0f1fb8da97253433.
Report an issue: GitHub.