can1357/oh-my-pi · error · Error

source deps install failed (${runArgv[0]} exit ${r.status})

Error message

source deps install failed (${runArgv[0]} exit ${r.status})

What it means

The runner installs source dependencies into a cached deps dir via a shell script (the package manager command in runArgv). When the spawned process exits non-zero, the stamp file is removed so the install is retried next run, and this error is thrown naming the executable and its exit code. stdout/stderr are inherited, so the real failure reason appears directly above this message in the terminal.

Source

Thrown at packages/metaharness/src/runner.ts:1157

				: [
						"docker",
						"run",
						"--rm",
						"--platform",
						`linux/${arch === "x64" ? "amd64" : "arm64"}`,
						"-e",
						"HOME=/tmp",
						"-v",
						`${depsDir}:/deps`,
						image,
						"sh",
						"-c",
						script,
					];
		const r = spawnSync(runArgv[0], runArgv.slice(1), { stdio: ["ignore", "inherit", "inherit"] });
		if (r.status !== 0) {
			fs.rmSync(stampFile, { force: true });
			throw new Error(`source deps install failed (${runArgv[0]} exit ${r.status})`);
		}
		fs.writeFileSync(stampFile, `${stamp}\n`);
	}
	if (!fs.existsSync(path.join(depsDir, "node_modules"))) {
		throw new Error(`source deps tree has no node_modules (${depsDir}); delete it and retry`);
	}
	// Shadow-mount every node_modules visible in the host tree (they hold darwin
	// binaries) with the skeleton's linux one; both sides of each mount must exist.
	const nodeModules = ["node_modules"];
	for (const dir of pkgDirs) {
		const rel = path.join(dir, "node_modules");
		const inHost = fs.existsSync(path.join(REPO_ROOT, rel));
		const inDeps = fs.existsSync(path.join(depsDir, rel));
		if (!inHost && !inDeps) continue;
		if (!inDeps) fs.mkdirSync(path.join(depsDir, rel), { recursive: true });
		if (!inHost) fs.mkdirSync(path.join(REPO_ROOT, rel), { recursive: true });
		nodeModules.push(rel);
	}

View on GitHub (pinned to 9690622007)

Solutions

  1. Scroll up to the inherited output from the install command to see the underlying failure and fix it
  2. Re-run the install manually in the deps dir to reproduce interactively
  3. Check network/registry access (corporate proxy, NPM_TOKEN) and retry
  4. Clear the deps dir entirely so a fresh install is attempted

Example fix

// before: transient registry failure
source deps install failed (bun exit 1)
// after: retry with network healthy
$ bun install --cwd <depsDir>
# rerun the harness; stamp regenerates on success
Defensive patterns

Strategy: retry

Validate before calling

const probe = Bun.spawnSync(["bun", "install", "--dry-run"], { cwd: depsDir });
if (probe.exitCode !== 0) throw new Error("deps install would fail; check package.json/lockfile and network first");

Try / catch

try {
  await runHarness();
} catch (err) {
  if (err instanceof Error && err.message.startsWith("source deps install failed")) {
    // stdout/stderr were inherited: inspect the real cause printed above, then retry
    console.error("Install subprocess failed; fix the printed cause (network/lockfile) and rerun.");
  } else throw err;
}

Prevention

When it happens

Trigger: `runArgv[0]` (e.g. bun/npm install script) exits non-zero while populating the source deps tree — network failure during install, unresolved dependency versions, or a broken lockfile/package.json in the skeleton.

Common situations: Offline or proxied network blocking registry access; a dependency added to package.json with no resolvable version; package-manager authentication failures for private registries; disk full during install.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/17a0d3f6a193a446. Report an issue: GitHub.