abhigyanpatwari/GitNexus · error · Error
Unsupported analyzer build entry: ${absolutePath}
Error message
Unsupported analyzer build entry: ${absolutePath} What it means
collectBuildEntries classifies every build-tree entry via lstat into directory, regular file, or symbolic link; anything else — FIFO/named pipe, unix socket, character/block device — hits the else branch and throws. The receipt schema simply has no representation for such nodes, and hashing them would be meaningless, so their presence is treated as a corrupt or polluted build tree.
Source
Thrown at gitnexus/src/core/analyzer-identity.ts:783
state: statState(link),
});
if (depth >= limits.buildDepth) {
throw new Error(
`Analyzer build scan exceeded depth ${limits.buildDepth}: ${absolutePath}`,
);
}
pending.push({ absoluteDir: absolutePath, depth: depth + 1 });
} else if (link.isFile()) {
const state = statState(link);
scannedBytes += stateSize(state, absolutePath);
if (scannedBytes > limits.buildBytes) {
throw new Error(`Analyzer build scan exceeded ${limits.buildBytes} bytes: ${buildRoot}`);
}
entries.push({ absolutePath, relativePath, kind: 'file', state });
} else if (link.isSymbolicLink()) {
entries.push({ absolutePath, relativePath, kind: 'symlink', state: statState(link) });
} else {
throw new Error(`Unsupported analyzer build entry: ${absolutePath}`);
}
}
}
entries.sort((a, b) => compareBytes(a.relativePath, b.relativePath));
return entries;
}
function buildSnapshot(entries: readonly BuildEntry[]): Array<{
relativePath: string;
kind: BuildEntry['kind'];
state: StatState;
}> {
return entries.map(({ relativePath, kind, state }) => ({ relativePath, kind, state }));
}
function buildCacheKey(entry: Pick<BuildEntry, 'relativePath' | 'kind'>): string {
return JSON.stringify([entry.kind, entry.relativePath]);
}View on GitHub (pinned to aac7515d2a)
Solutions
- Locate special files: 'find dist -type p -o -type s -o -type b -o -type c' (POSIX) and delete the offenders.
- Reconfigure the tool that created the socket/pipe to place IPC files outside the build tree (e.g. /tmp).
- Clean-rebuild dist after removal so the scan sees only directories, files, and links.
Example fix
# before: stray IPC files inside the build tree $ ls dist/run.sock dist/log.fifo # after: remove special files, keep IPC artifacts outside dist/ $ find dist -type p -o -type s | xargs rm -f
Defensive patterns
Strategy: validation
Validate before calling
import { readdirSync } from 'node:fs';
function buildTreeHasOnlySupportedEntries(buildRoot: string): boolean {
const stack = [buildRoot];
while (stack.length > 0) {
const dir = stack.pop()!;
for (const entry of readdirSync(dir, { withFileTypes: true })) {
if (entry.isDirectory() || entry.isFile() || entry.isSymbolicLink()) continue;
return false;
}
// descend only directories (not symlinks) as the scan does
}
return true;
} Type guard
function isUnsupportedBuildEntryError(error: unknown): boolean {
return error instanceof Error && /^Unsupported analyzer build entry:/.test(error.message);
} Try / catch
try {
identity = resolveAnalyzerRunnerIdentity(import.meta.url);
} catch (error) {
if (isUnsupportedBuildEntryError(error)) {
reportUserError(`Special file in build tree: ${error.message}; remove FIFOs/sockets from dist.`);
}
throw error;
} Prevention
- Configure dev servers and IPC tools to create sockets/pipes in /tmp, never inside the build directory.
- Add a pre-run check for special files when packaging custom builds: find dist -type p -o -type s.
When it happens
Trigger: A stray 'mkfifo' pipe, a lingering socket file left by a dev server or database, or a device node inside the analyzer's dist/src directory when resolveAnalyzerRunnerIdentity scans it. Common after running tools that create lock/IPC files with unusual types inside the build output.
Common situations: A dev server crashed and left a .sock file in the build dir; someone created a named pipe for log tailing inside dist/; containerized builds that materialize device-like special files into the output layer.
Related errors
- Analyzer package lock is not a regular file: ${candidate}
- Analyzer identity input changed while it was being read: ${c
- Analyzer runtime scan exceeded ${maxBytes} bytes: ${candidat
- Analyzer identity input changed while it was being hashed: $
- Analyzer build scan exceeded ${limits.buildEntries} entries:
AI-assisted analysis of abhigyanpatwari/GitNexus@aac7515d2a (2026-08-20).
Data as JSON: /api/errors/7cffaeaae94522f4.
Report an issue: GitHub.