can1357/oh-my-pi · error · Error

source deps install failed

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.

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.

Appendix: 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)