affaan-m/ECC · error
${EXECUTABLE_OVERRIDE} does not point to a readable local It
Error message
${EXECUTABLE_OVERRIDE} does not point to a readable local Itô CLI file. What it means
Thrown by assertUsableExecutable at scripts/ito.js:211-214 when fs.realpathSync.native(candidate) throws — i.e. the configured path does not exist, contains a broken symlink, has a permission-restricted parent, or hits a symlink loop. This is the first of three sequential gates in assertUsableExecutable: realpath resolution, canonical-entry-name check (error 110), and readability check (error 111). Note the identical message is reused at ito.js:222 (error 111) for a different failure, so line number is the only discriminator.
Source
Thrown at scripts/ito.js:212
"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.`
);
}
if (!isUsableExecutable(canonicalCandidate)) {
throw new Error(
`${EXECUTABLE_OVERRIDE} does not point to a readable local Itô CLI file.`
);
}
return canonicalCandidate;
}
function isCanonicalItoEntry(candidate) {
const pathSegments = pathView on GitHub (pinned to 01e15490f0)
Solutions
- Confirm the path exists: `test -e "$ECC_ITO_CLI_EXECUTABLE" && readlink -f "$ECC_ITO_CLI_EXECUTABLE"`.
- Rebuild if missing: `cd ito-cloud-runtime/cli/ito-compute-cli && npm ci && npm run check`.
- Point at the built dist entry, not the source: the path must end with dist/bin/ito.js (see isCanonicalItoEntry at ito.js:229).
- Fix parent-directory permissions so realpath can traverse: `chmod +x` on each path component.
Example fix
// before $ export ECC_ITO_CLI_EXECUTABLE="$HOME/ito-cloud-runtime/cli/ito-compute-cli/src/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 fs = require('fs');
function assertExecutableResolves(candidate) {
try { return fs.realpathSync.native(candidate); }
catch (e) { throw new Error(`ECC_ITO_CLI_EXECUTABLE does not resolve: ${e.message}`); }
} Try / catch
try {
resolveItoExecutable(env);
} catch (err) {
if (err.message.endsWith('does not point to a readable local Itô CLI file.')) {
// distinguish line 212 (realpath) from line 222 (post-canonical-check) by re-running realpath yourself
try { fs.realpathSync.native(env.ECC_ITO_CLI_EXECUTABLE); }
catch (e) { /* line-212 path: missing/blocked */ }
}
throw err;
} Prevention
- Pin ECC_ITO_CLI_EXECUTABLE to the built dist entry, not the source.
- Rebuild the canonical CLI after pulling changes before re-running ecc ito.
- In CI, cache the canonical build output under a stable absolute path.
When it happens
Trigger: ECC_ITO_CLI_EXECUTABLE points to a path that does not exist; points through a symlink whose target is missing; parent directory lacks execute (traverse) permission; symlink loop; ENOENT/EACCES/ELOOP from realpathSync. Always fires before isCanonicalItoEntry and isUsableExecutable.
Common situations: Operator deleted or moved ito-cloud-runtime after setting the env var; pointed at the source file (cli/.../src/ito.js) instead of the built dist entry; cloned to a different path than the env var records; file ownership changed under sudo.
Related errors
- ${EXECUTABLE_OVERRIDE} must be an absolute path explicitly c
- ${EXECUTABLE_OVERRIDE} must point to the canonical dist/bin/
- --config-dir must be an existing absolute directory.
- --config-dir must exist and contain a regular sixtytwo.yaml
- TypeScript compiler not found. Install root dev dependencies
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/95e5587504f20c40.
Report an issue: GitHub.