abhigyanpatwari/GitNexus · error

Unsupported analyzer runtime payload entry

Error message

Unsupported analyzer runtime payload entry: ${absolutePath}

What it means

During the runtime payload walk, an entry must be a regular file, a symbolic link, or a directory; anything else (FIFO, socket, device node, or a stat result reporting none of these kinds) is rejected with this error naming the offending absolute path. The hasher refuses to include or skip exotic filesystem entries because they cannot be hashed deterministically and could hide mutation, so identity computation fails closed.

Solutions

  1. Remove the special file named in the message: rm <absolutePath> (verify it is not an active service socket first — stop the process that owns it).
  2. Move runtime state (sockets, pipes, caches) out of the gitnexus package/build tree, e.g. point TMPDIR and serve working dirs elsewhere.
  3. If it recurs from a container mount, re-run the analysis on a plain local filesystem path instead of the special mount.
  4. Re-run analyze after cleanup to confirm the walk completes.

Example fix

# before: serve creates a socket inside the package tree
$ gitnexus serve &   # writes gitnexus.sock under package root
$ npx gitnexus analyze
# Unsupported analyzer runtime payload entry: /.../gitnexus.sock

# after: keep runtime sockets out of the scanned tree
$ gitnexus serve --workdir /tmp/gitnexus-serve &
npx gitnexus analyze
Defensive patterns

Strategy: validation

Validate before calling

// Pre-flight: reject special files in the trees you control before analyze:
import { readdirSync, statSync } from 'node:fs';
import { join } from 'node:path';
function findNonRegularEntries(root: string): string[] {
  const bad: string[] = [];
  for (const entry of readdirSync(root, { withFileTypes: true })) {
    const p = join(root, entry.name);
    const s = statSync(p); // throws on broken symlink; wrap if needed
    if (!s.isFile() && !s.isSymbolicLink() && !s.isDirectory()) bad.push(p);
    else if (s.isDirectory()) bad.push(...findNonRegularEntries(p));
  }
  return bad;
}

Try / catch

try {
  await analyze({ repo: '.' });
} catch (err) {
  if (err instanceof Error && err.message.startsWith('Unsupported analyzer runtime payload entry:')) {
    const path = err.message.slice('Unsupported analyzer runtime payload entry: '.length);
    await fs.rm(path, { force: true }); // after confirming it is not an active socket
    return analyze({ repo: '.' });
  }
  throw err;
}

Prevention

When it happens

Trigger: resolveAnalyzerRunnerIdentity() walking the analyzer package/build trees encounters a directory entry where !stat.isFile() && !stat.isSymbolicLink() && the entry was not handled as a directory earlier — e.g. mkfifo pipes, unix sockets created by a running server inside the tree, /dev-style special files bind-mounted in containers, or broken stat kinds on exotic filesystems.

Common situations: Running `gitnexus serve` or a dev watcher whose working directories sit inside the analyzed package tree and create socket/pid/named-pipe files; Docker volumes with special device nodes; WSL or network filesystems returning unusual d_type values.

Related errors


AI-assisted analysis of abhigyanpatwari/GitNexus@52924ef12c (2026-08-20). Data as JSON: /api/errors/46fc63c97f95a4ac. Report an issue: GitHub.

Appendix: source

Thrown at gitnexus/src/core/analyzer-identity.ts:1414

        budget.artifacts += 1;
        if (budget.artifacts > limits.runtimePayloads) {
          throw new Error(
            `Analyzer runtime payload scan exceeded ${limits.runtimePayloads} payloads: ${root}`,
          );
        }
        if (budget.bytes + payloadBytes > limits.runtimeBytes) {
          throw new Error(
            `Analyzer runtime scan exceeded ${limits.runtimeBytes} bytes: ${absolutePath}`,
          );
        }
        budget.bytes += payloadBytes;
        artifacts.push({
          absolutePath,
          canonicalPath: `${canonicalPrefix}/${relativePath}`,
          kind: stat.isSymbolicLink() ? 'symlink' : 'file',
        });
      } else if (!stat.isFile() && !stat.isSymbolicLink()) {
        throw new Error(`Unsupported analyzer runtime payload entry: ${absolutePath}`);
      }
    }
  }
  return artifacts;
}

function collectVendoredGrammarInputs(
  packageRoot: string,
  directoryGuards: Map<string, DependencyDirectoryGuard>,
  options: AnalyzerIdentityResolveOptions,
  budget: RuntimeArtifactScanBudget,
  limits: AnalyzerIdentityTraversalLimits,
): {
  manifests: DependencyInputs['vendoredManifests'];
  artifacts: RuntimeArtifact[];
} {
  const vendorRoot = path.join(packageRoot, 'vendor');
  if (!existsSync(vendorRoot) || !lstatSync(vendorRoot).isDirectory()) {

View on GitHub (pinned to 52924ef12c)