affaan-m/ECC · error · Error
does not point to a readable local Itô CLI file.
Error message
${EXECUTABLE_OVERRIDE} does not point to a readable local Itô CLI file. What it means
This is the first failure inside assertUsableExecutable: fs.realpathSync.native(candidate) threw, meaning the configured path could not be resolved at all — typically ENOENT (some component of the path does not exist), EACCES (no permission on a parent directory), or a symlink loop. The message reports it as 'not a readable local Itô CLI file' before canonical-entry or permission checks run.
Solutions
- Check the path component-by-component: ls -l "$ECC_ITO_CLI_EXECUTABLE" — fix whichever parent is missing.
- If dist/bin/ito.js is absent, rebuild: cd cli/ito-compute-cli && npm ci && npm run check.
- If the repo moved, re-export ECC_ITO_CLI_EXECUTABLE to the new absolute location.
Example fix
# before $ ls "$ECC_ITO_CLI_EXECUTABLE" ls: cannot access '.../dist/bin/ito.js': No such file or directory # after — build the CLI, then retry $ cd ito-cloud-runtime/cli/ito-compute-cli && npm ci && npm run check $ ls "$ECC_ITO_CLI_EXECUTABLE" # now resolves
Defensive patterns
Strategy: validation
Validate before calling
import fs from 'node:fs';
function assertItoEntryResolves(p) {
let real;
try { real = fs.realpathSync.native(p); }
catch { throw new Error(`ECC_ITO_CLI_EXECUTABLE path does not resolve: ${p} (build the CLI or fix the path)`); }
return real;
} Type guard
function itoEntryResolves(p) {
try { fs.realpathSync.native(p); return true; } catch { return false; }
} Prevention
- Verify the build artifact exists immediately after building: test -f dist/bin/ito.js.
- Pin the env var to the checkout's absolute path and update it when the repo moves.
When it happens
Trigger: ECC_ITO_CLI_EXECUTABLE points at dist/bin/ito.js that was never built (npm run build/check skipped), the repo was moved or deleted, or a parent directory is unreadable by the current user.
Common situations: Forgetting the build step so dist/ does not exist; cloning ito-cloud-runtime fresh after the env var already points to the old checkout path; running under a different container user that cannot traverse the repo directory.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- all overlays must be readable local files
- all takes must be readable local files
- artifact byte count exceeded during reading
- artifact byte count mismatch
- artifact changed before reading
AI-assisted analysis of affaan-m/ECC@06c5e118c4 (2026-08-18).
Data as JSON: /api/errors/95e5587504f20c40.
Report an issue: GitHub.
Appendix: 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 06c5e118c4)