stablyai/orca · error
Windows inner executable path is not a file: ${executablePat
Error message
Windows inner executable path is not a file: ${executablePath} What it means
Thrown by validateExecutablePath() when the path exists but statSync().isFile() returns false — the path resolves to a directory, socket, device, or other non-regular-file. This guards against passing a directory path (e.g. the containing folder) instead of the .exe file.
Source
Thrown at config/scripts/verify-windows-inner-signature.mjs:128
`Subject: ${normalizeSignerSubject(signature.signerSubject) || '<missing>'}`,
`Issuer: ${signature.signerIssuer ?? '<missing>'}`,
`Thumbprint: ${normalizeThumbprint(signature.signerThumbprint) || '<missing>'}`,
`NotBefore: ${signature.notBefore ?? '<missing>'}`,
`NotAfter: ${signature.notAfter ?? '<missing>'}`
].join('\n')
}
export function validateExecutablePath(executablePath) {
if (typeof executablePath !== 'string' || executablePath.trim() === '') {
throw new Error('Usage: node config/scripts/verify-windows-inner-signature.mjs <Orca.exe>')
}
if (!existsSync(executablePath)) {
throw new Error(`Windows inner executable does not exist: ${executablePath}`)
}
if (!statSync(executablePath).isFile()) {
throw new Error(`Windows inner executable path is not a file: ${executablePath}`)
}
}
export function getPowerShellSignatureJson(executablePath, spawnSyncImpl = spawnSync) {
// Why: pwsh -Command does not reliably expose trailing process args to string commands.
const result = spawnSyncImpl(
'pwsh',
[
'-NoLogo',
'-NoProfile',
'-NonInteractive',
'-ExecutionPolicy',
'Bypass',
'-Command',
POWERSHELL_SIGNATURE_SCRIPT
],
{
encoding: 'utf8',View on GitHub (pinned to 1136503c6a)
Solutions
- Point to the actual .exe file, not its parent directory.
- If using a glob or variable, append the filename explicitly.
- Verify with ls -la <path> that the entry is a regular file.
Example fix
// before: directory path passed node verify-windows-inner-signature.mjs ./Release/win-unpacked/ // after: the exe file inside the directory node verify-windows-inner-signature.mjs ./Release/win-unpacked/Orca.exe
Defensive patterns
Strategy: validation
Validate before calling
function assertExecutableIsFile(path) {
const stat = statSync(path)
if (!stat.isFile()) {
throw new Error(`Path is not a regular file: ${path}`)
}
} Type guard
function isRegularFile(path) {
try { return statSync(path).isFile() } catch { return false }
} Prevention
- Always append the executable filename to directory paths in CI variables.
- Validate path type before spawning PowerShell to fail fast with a clear message.
- Use glob patterns that resolve to a single file, not a directory.
When it happens
Trigger: validateExecutablePath(executablePath) where existsSync is true but statSync(executablePath).isFile() is false. Caused by: passing a directory path instead of the .exe; passing a path to /dev/null or a named pipe; a symlink pointing to a directory.
Common situations: Passing the win-unpacked directory instead of Orca.exe inside it; passing a Squirrel app folder; a path glob that resolved to a directory; accidentally passing the build output directory rather than the executable within it.
Related errors
- Windows inner executable does not exist: ${executablePath}
- Managed Claude auth directory does not exist on disk.
- Packaged node-pty is missing ${conptyRoot}
- Packaged node-pty is missing ${sourceFile}
- PowerShell did not return signature JSON.
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/58f85e8ce23fec55.
Report an issue: GitHub.