tinyhumansai/openhuman · error · SpecError
tracking_issue must be a positive integer
Error message
tracking_issue must be a positive integer
What it means
The top-level tracking_issue must satisfy Number.isInteger(x) && x > 0, tying the batch to one GitHub issue that tracks overall progress. The check fails for non-numbers, non-integers, zero, and negatives. A JSON string like "5312" is intentionally rejected — no string-to-number coercion is done.
Source
Thrown at scripts/agent-batch/lib.mjs:69
typeof spec.batch_id !== "string" ||
!/^[a-z0-9][a-z0-9-]*$/.test(spec.batch_id)
) {
throw new SpecError("batch_id must be a kebab-case slug", "batch_id");
}
if (spec.base_repo !== "tinyhumansai/openhuman") {
throw new SpecError(
`base_repo must be "tinyhumansai/openhuman" (got "${spec.base_repo}")`,
"base_repo",
);
}
if (spec.base_branch !== "main") {
throw new SpecError(
`base_branch must be "main" (got "${spec.base_branch}")`,
"base_branch",
);
}
if (!Number.isInteger(spec.tracking_issue) || spec.tracking_issue <= 0) {
throw new SpecError(
"tracking_issue must be a positive integer",
"tracking_issue",
);
}
if (!Array.isArray(spec.agents) || spec.agents.length === 0) {
throw new SpecError("agents must be a non-empty array", "agents");
}
if (spec.agents.length > 25) {
throw new SpecError(
`batch size ${spec.agents.length} exceeds hard cap of 25`,
"agents",
);
}
const seenId = new Set();
const seenIssue = new Set();
const seenBranch = new Set();
for (let i = 0; i < spec.agents.length; i++) {View on GitHub (pinned to a221052e0d)
Solutions
- Open (or pick) the tracking issue first, then set tracking_issue to its unquoted positive integer, e.g. 5312
- Remove quotes around the number in the spec file
- If generating specs programmatically, coerce with Number.parseInt and re-check Number.isInteger before serializing
Example fix
// before "tracking_issue": "5312" // after "tracking_issue": 5312
Defensive patterns
Strategy: validation
Validate before calling
if (!Number.isInteger(spec.tracking_issue) || spec.tracking_issue <= 0) {
console.error("tracking_issue must be a positive integer");
process.exit(1);
} Type guard
/** @param {unknown} v */
function isPositiveInt(v) {
return typeof v === "number" && Number.isInteger(v) && v > 0;
} Try / catch
try {
validateSpec(spec);
} catch (e) {
if (e instanceof SpecError && e.path === "tracking_issue") {
console.error(`open the tracking GitHub issue first, then set the number: ${e.message}`);
process.exit(1);
}
throw e;
} Prevention
- Open the tracking issue before writing the spec so you have the real number
- Never quote issue numbers in spec JSON
- If generating specs, run Number.parseInt + Number.isInteger checks before serializing
When it happens
Trigger: "tracking_issue": 0, -5, 1.5, "5312" (string), or null in the spec passed to validateSpec.
Common situations: Hand-writing the JSON and quoting the issue number out of habit; generating the spec from a form/CLI that yields strings; leaving a placeholder 0 while the tracking issue has not been opened yet.
Related errors
- issue must be a positive integer
- duplicate issue #${agent.issue}
- branch issue segment "${m[2]}" does not match agent issue ${
- batch_id must be a kebab-case slug
- base_repo must be "tinyhumansai/openhuman" (got "${spec.base
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/56827d6cae8f0513.
Report an issue: GitHub.