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
- Pass a valid numeric port: --port 4700 (any integer 1-65535)
- Check for stray characters or whitespace in the port value in scripts/config
- Ensure the value immediately follows --port (the parser reads argv[++i])
- 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
- Validate port values in wrapper scripts before passing them to the server
- Never build --port from unvalidated env vars or user input without range-checking
- Strip whitespace/suffixes from port strings before numeric conversion
- Omit --port to use the documented default (4700)
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
- Unsupported language '{value}'. Supported: {}
- Unable to infer language from file extension: {}. Specify `l
- Invalid pattern: {err}
- Failed to load tree-sitter language: {err}
- err.to_string() (invalid glob pattern)
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/250310713f734789.
Report an issue: GitHub.