can1357/oh-my-pi · error · Error

Binary build did not produce ${source}

Error message

Binary build did not produce ${source}

What it means

After invoking the binary build script for the missing guest architectures, prepareAgentBinaries verifies that `packages/coding-agent/binaries/omp-linux-<arch>` was produced and throws this error if not. It prevents caching a non-existent artifact and surfaces a build-script failure that exited 0 without emitting the binary.

Source

Thrown at packages/metaharness/src/tb/agent.ts:77

	const arches = [...new Set(opts.arches)];
	const cached: Partial<Record<GuestArch, string>> = {};
	for (const arch of arches) {
		cached[arch] = path.join(opts.cacheDir, `omp-linux-${arch}-${manifest.version}`);
	}
	const missing: GuestArch[] = [];
	for (const arch of arches) {
		if (opts.rebuild || !(await Bun.file(cached[arch]!).exists())) missing.push(arch);
	}

	if (missing.length > 0) {
		await fs.mkdir(opts.cacheDir, { recursive: true });
		await refreshCrossNatives(missing, manifest.version);
		const targets = missing.map(arch => `linux-${arch}`).join(",");
		await run(["bun", "scripts/ci-release-build-binaries.ts", "--targets", targets], REPO_ROOT);
		for (const arch of missing) {
			const source = path.join(CODING_AGENT_DIR, "binaries", `omp-linux-${arch}`);
			const destination = cached[arch]!;
			if (!(await Bun.file(source).exists())) throw new Error(`Binary build did not produce ${source}`);
			await Bun.write(destination, Bun.file(source));
			await fs.chmod(destination, 0o755);
		}
	}

	const binaries: AgentBinaries = { version: manifest.version };
	for (const arch of arches) binaries[arch] = cached[arch];
	return binaries;
}

/** Install omp and gateway-only configuration into one running trial microVM. */
export async function installAgent(vm: TrialVm, binaries: AgentBinaries, gateway: GatewayConfig): Promise<string> {
	const binary = binaries[vm.arch];
	if (!binary) throw new Error(`No omp binary available for guest architecture ${vm.arch}`);

	const entrypoint = "/opt/omp/omp";
	const mkdir = await vm.exec("mkdir -p /opt/omp");
	if (mkdir.exitCode !== 0) throw new Error(`Could not create /opt/omp: ${mkdir.stderr.trim()}`);

View on GitHub (pinned to 9690622007)

Solutions

  1. Run `bun scripts/ci-release-build-binaries.ts --targets linux-<arch>` manually and inspect its output
  2. Check `packages/coding-agent/binaries/` for what was actually produced and whether the path/name changed
  3. Confirm the requested arch is supported by the build script
  4. Free disk space / fix toolchain errors if the build failed silently

Example fix

// before
await prepareAgentBinaries({ arches: ["mips64"], ... }); // build script never emits mips64
// after
const supported = new Set(["x64", "arm64"]);
const missing = arches.filter(a => supported.has(a) && !cached[a]);
Defensive patterns

Strategy: validation

Validate before calling

// verify build outputs exist before calling prepareAgentBinaries
for (const arch of arches) {
  const p = path.join(CODING_AGENT_DIR, "binaries", `omp-linux-${arch}`);
  if (!(await Bun.file(p).exists())) throw new Error(`build script will not produce ${p}`);
}

Try / catch

try {
  await prepareAgentBinaries({ arches, cacheDir, rebuild: true });
} catch (err) {
  if (err instanceof Error && err.message.startsWith("Binary build did not produce")) {
    // fall back to a previously cached binary for that arch
  } else throw err;
}

Prevention

When it happens

Trigger: `bun scripts/ci-release-build-binaries.ts --targets <targets>` completed (possibly exit 0) but did not write `binaries/omp-linux-<arch>` for one of the requested targets — e.g. the script skipped an unsupported target, build output went elsewhere, or an inner step silently failed.

Common situations: Requesting an architecture the release script does not support; the script's output directory changed; disk-full or compile failure swallowed by the script; stale script version that ignores `--targets`.

Related errors


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