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
- Run `bun scripts/ci-release-build-binaries.ts --targets linux-<arch>` manually and inspect its output
- Check `packages/coding-agent/binaries/` for what was actually produced and whether the path/name changed
- Confirm the requested arch is supported by the build script
- 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
- Confirm the release build script supports every requested target
- Run the build script manually once and inspect binaries/ output
- Check disk space and toolchain health before long builds
- Keep the output path expectation in sync with the script
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
- bundled Silver.ttf must parse
- utoken: zstd decode failed
- ${steps.manager} update did not produce a working launcher a
- ${formatVerificationFailure(verification, expectedVersion)};
- No session - output artifacts unavailable
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/028ef70e0443a088.
Report an issue: GitHub.