paperclipai/paperclip · error
updatedSince must be a valid ISO 8601 timestamp when provide
Error message
updatedSince must be a valid ISO 8601 timestamp when provided
What it means
400 from the issue list route: the updatedSince query parameter was supplied but could not be parsed as a valid ISO 8601 timestamp for incremental filtering.
Source
Thrown at server/src/routes/issues.ts:6195
return { outcome: result.reopened ? "reopened" : "already-open", generation: result.generation };
}
if (result.code === "not_reopenable") {
res.status(409).json({ error: "This issue is linked to a closed workspace that cannot be reopened." });
} else {
res.status(503).json({ error: "Could not reopen the workspace for this issue. Please try again." });
}
return null;
}
// The keepalive re-stamps the reopen-pending flag on this interval while a
// consuming request is in flight. The interval is one fifth of the stale grace
// period, so several re-stamps land before the reaper could treat the flag as
// stranded. This keeps a live but slow request's fence against the reaper.
const REOPEN_PENDING_REFRESH_INTERVAL_MS = Math.floor(
STALE_REOPEN_PENDING_CONSUMPTION_GRACE_MS / 5,
);
// Guard a reopen against a caller that never consumes it.
// `reopenClosedIssueExecutionWorkspaceOrRespond` publishes the rebuilt worktree
// as active and sets the reopen-pending flag while the source issue is still
// terminal. The route then moves the issue out of the terminal state, and the
// terminal reaper clears the flag once it sees the non-terminal issue. If the
// route mutation returns null, throws, or leaves the issue terminal, the flag
// stays set and both the reaper and the archive route skip the row forever, so
// the rebuilt worktree leaks and no path can reclaim it.
//
// This guard runs when the response ends, so it covers every exit: a success, a
// rejected mutation, and a thrown error. It reads the final issue status through
// a getter. When the issue is null or still terminal, it clears the flag so the
// reaper can reclaim the worktree. When the issue left the terminal state, it
// does nothing and the reaper clears the flag. The guard never touches the
// response, and the underlying clear is idempotent.
function guardReopenedWorkspaceConsumption(input: {
req: Request;
res: Response;
issue: { id: string; companyId: string };View on GitHub (pinned to 01ad858492)
Solutions
- Fix the offending parameter to satisfy the constraint stated in the error message (type, range, or allowed values), then retry.
- Refer to the route's request validation in the named file and the shared validators for the accepted format.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/routes/issues.ts:5889 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18).
Data as JSON: /api/errors/593a3c4703f0021e.
Report an issue: GitHub.