paperclipai/paperclip · error · Error
eval-session nativeResume requires a retained live-session c
Error message
eval-session nativeResume requires a retained live-session checkpoint
What it means
This validator rejects any eval-session request that carries a nativeResume field, because resuming natively requires a retained live-session checkpoint and the current CapabilityLiveSessionService does not retain/accept checkpoints through this path. The check is fail-closed: the presence of the field alone triggers the throw, regardless of its value.
Source
Thrown at packages/paperclip-runner/src/cli/eval-session-contract.ts:270
? undefined
: input.managedProfile;
const agentCoreProfileInput = input.agentCoreProfile === null
? undefined
: input.agentCoreProfile;
const managedProfile = provider === "claude_managed"
? parseManagedProfile(managedProfileInput)
: undefined;
const agentCoreProfile = provider === "aws_agentcore"
? parseAgentCoreProfile(agentCoreProfileInput)
: undefined;
if (provider !== "claude_managed" && managedProfileInput !== undefined) {
throw new Error("eval-session managedProfile requires provider claude_managed");
}
if (provider !== "aws_agentcore" && agentCoreProfileInput !== undefined) {
throw new Error("eval-session agentCoreProfile requires provider aws_agentcore");
}
if (input.nativeResume !== undefined) {
throw new Error(
"eval-session nativeResume requires a retained live-session checkpoint",
);
}
if (input.includeCollaborationModeInstructions === false) {
throw new Error(
"current CapabilityLiveSessionService requires collaboration-mode instructions",
);
}
const runnerd = object(input.runnerd, "request.runnerd");
const digest = text(runnerd.sha256, "request.runnerd.sha256");
if (!/^(?:sha256:)?[a-f0-9]{64}$/i.test(digest)) {
throw new Error("request.runnerd.sha256 must be a SHA-256 digest");
}
const limits = object(input.limits, "request.limits");
const sessionInput = object(input.session, "request.session");
const session = sessionInput as unknown as CreateCapabilityLiveSessionInput;
const model = text(input.model, "request.model");View on GitHub (pinned to 01ad858492)
Solutions
- Remove the nativeResume field from the request and start a fresh eval session.
- If resume is required, ensure the session checkpoint is retained by the CapabilityLiveSessionService and use the resume entry point intended for retained checkpoints instead of the eval-session contract path.
- Upgrade/check for a runner version whose contract supports nativeResume before sending the field.
Example fix
// before
{ "provider": "codex", "nativeResume": { "checkpointId": "abc" }, ... }
// after
{ "provider": "codex", ... } Defensive patterns
Strategy: validation
Validate before calling
function hasNoNativeResume(input) { return input.nativeResume === undefined; }
if (!hasNoNativeResume(req)) throw new Error("nativeResume is not accepted by this eval-session contract"); Type guard
function isResumableSessionRequest(input) { return input.nativeResume === undefined; } Try / catch
try { return parseEvalSessionRequest(raw); } catch (e) { if (String(e.message).includes("nativeResume requires a retained live-session checkpoint")) { const { nativeResume, ...rest } = raw; return parseEvalSessionRequest(rest); } throw e; } Prevention
- Gate resume features behind a capability check against the runner version.
- Strip unsupported fields before serializing requests.
- Keep request schemas versioned and documented so clients know nativeResume is rejected.
When it happens
Trigger: Calling parseEvalSessionRequest with input.nativeResume defined (e.g. { nativeResume: true } or { nativeResume: { checkpointId: ... } }) on any provider.
Common situations: Replaying a previously captured request that used native resume; a client feature flag enabling resume before the backend supports it; attempting to reattach to an earlier live session whose checkpoint was not retained.
Related errors
- current CapabilityLiveSessionService requires collaboration-
- The Pi ACPX profile is not available
- Invalid status '${String(rawStatus)}'. Must be one of: ${PLU
- "tool" is required and must be a string
- "runContext" is required and must be an object
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-02).
Data as JSON: /api/errors/c892902847583d40.
Report an issue: GitHub.