can1357/oh-my-pi · error · Error

--port must be 1..65535

Error message

--port must be 1..65535

What it means

The metaharness server validates the --port CLI argument after parsing: it must be a safe integer between 1 and 65535. Non-numeric, zero, negative, or out-of-range values are rejected with this error before the server starts.

Source

Thrown at packages/metaharness/src/server.ts:89

const enum SseState {
	Open = 0,
	Closed = 1,
}

interface SseClient {
	controller: ReadableStreamDefaultController<Uint8Array>;
	state: SseState;
}

function parseServerArgs(argv: string[]): { port: number; jobsDir: string } {
	let port = 4700;
	let jobsDir = DEFAULT_JOBS_DIR;
	for (let i = 0; i < argv.length; i++) {
		if (argv[i] === "--port" && argv[i + 1]) port = Number(argv[++i]);
		else if (argv[i] === "--jobs-dir" && argv[i + 1]) jobsDir = path.resolve(argv[++i]);
	}
	if (!Number.isSafeInteger(port) || port < 1 || port > 65535) throw new Error("--port must be 1..65535");
	return { port, jobsDir };
}

/** Job names are single path segments; anything else could escape the jobs dir. */
function assertSafeJobName(jobName: string): void {
	if (!jobName || jobName === "." || jobName === ".." || /[/\\]/.test(jobName)) {
		throw new Error(`invalid job name: ${jobName}`);
	}
}

/** True when `pid` names a live process (signal-0 probe). */
function pidAlive(pid: number | null): boolean {
	if (pid == null) return false;
	try {
		process.kill(pid, 0);
		return true;
	} catch {
		return false;

View on GitHub (pinned to 9690622007)

Solutions

  1. Pass a valid numeric port: --port 4700 (any integer 1-65535)
  2. Check for stray characters or whitespace in the port value in scripts/config
  3. Ensure the value immediately follows --port (the parser reads argv[++i])
  4. Use the default by omitting --port entirely (default 4700)

Example fix

// before
$ metaharness-server --port 70000
// Error: --port must be 1..65535

// after
$ metaharness-server --port 4800
Defensive patterns

Strategy: validation

Validate before calling

function parsePort(value) {
  const port = Number(value);
  if (!Number.isSafeInteger(port) || port < 1 || port > 65535) {
    throw new Error(`invalid port: ${value}`);
  }
  return port;
}
// call before spawning: parsePort(process.env.BENCH_PORT ?? "4700")

Type guard

function isValidPort(v) {
  return typeof v === "number" && Number.isSafeInteger(v) && v >= 1 && v <= 65535;
}

Try / catch

try {
  const server = spawnServer(["--port", portArg]);
} catch (err) {
  if (err instanceof Error && err.message === "--port must be 1..65535") {
    console.error(`Bad --port value '${portArg}'; use an integer 1-65535`);
    process.exitCode = 1;
    return;
  }
  throw err;
}

Prevention

When it happens

Trigger: parseServerArgs receives --port followed by a value that Number() maps to something outside 1..65535 — e.g. --port 0, --port 70000, --port abc (NaN), --port 99999999999999 (unsafe integer), or --port with a missing/non-adjacent value.

Common situations: Typo in the port number; copying a port from a config that includes a suffix (e.g. '4700x'); scripting that passes an empty or unset variable as the port value; confusing port with a host:port string.

Related errors


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