paperclipai/paperclip · error · HarnessRuntimeRequestResolutionError
${action} does not carry submitted form data
Error message
${action} does not carry submitted form data What it means
parseHarnessRuntimeRequestResolution validates that a request resolution matches its request kind. Only action 'submit' may carry form payload fields (answers/content/response); any other action (accept, decline, cancel, accept_for_session) that includes one of those fields is rejected so mismatched submits fail closed instead of degrading into empty responses.
Source
Thrown at packages/paperclip-runner/src/contracts/harness-driver.ts:223
const candidate = plainRecord(value) ?? {};
const rawAction = candidate.action;
if (
typeof rawAction !== "string" ||
!RUNTIME_REQUEST_ACTIONS.includes(rawAction as HarnessRuntimeRequestAction)
) {
throw new HarnessRuntimeRequestResolutionError(
requestKind,
`unsupported action ${JSON.stringify(rawAction) ?? "undefined"}`,
);
}
const action = rawAction as HarnessRuntimeRequestAction;
if (
action !== "submit" &&
("answers" in candidate ||
"content" in candidate ||
"response" in candidate)
) {
throw new HarnessRuntimeRequestResolutionError(
requestKind,
`${action} does not carry submitted form data`,
);
}
if (action === "submit" && "response" in candidate) {
if (requestKind !== "user_input" && requestKind !== "elicitation") {
throw new HarnessRuntimeRequestResolutionError(
requestKind,
"approval requests do not accept submitted question responses",
);
}
if ("answers" in candidate || "content" in candidate) {
throw new HarnessRuntimeRequestResolutionError(
requestKind,
"canonical submissions cannot also carry provider-specific answers or content",
);
}View on GitHub (pinned to 01ad858492)
Solutions
- Strip answers/content/response fields from the payload when the action is not 'submit'.
- If the intent is to submit form data, change the action to 'submit'.
- For approval requests use accept/accept_for_session/decline with no payload fields; for user_input use submit/decline/cancel.
- Validate the resolution object shape client-side before posting it to the route.
Example fix
// before
resolve({ action: 'decline', answers: { q1: ['no'] } });
// after
resolve({ action: 'decline' }); Defensive patterns
Strategy: validation
Validate before calling
function validateResolution(r) {
const payloadFields = ['answers', 'content', 'response'].filter((k) => k in r);
if (r.action !== 'submit' && payloadFields.length > 0) {
throw new Error(`${r.action} must not carry ${payloadFields.join(',')}`);
}
} Try / catch
try {
await resolveRequest(requestId, resolution);
} catch (e) {
if (e instanceof HarnessRuntimeRequestResolutionError && e.message.includes('does not carry submitted form data')) {
await resolveRequest(requestId, { action: resolution.action });
} else throw e;
} Prevention
- Build resolutions from per-action constructors that only attach payload fields for 'submit'.
- Add a client-side schema check mirroring parseHarnessRuntimeRequestResolution before posting.
- Never reuse the submit payload object for accept/decline/cancel actions.
When it happens
Trigger: Calling parseHarnessRuntimeRequestResolution (or the agent routes/browser transport that wrap it) with `{ action: 'decline', answers: {...} }`, `{ action: 'accept', content: '...' }`, or similar where a non-submit action also includes answers/content/response.
Common situations: UI sends the user's typed text along with an 'accept' action; a generic resolver attaches a stale answers object to a decline; API client copies the submit payload shape for other actions.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Worktree seed manifest is missing source path diagnostics.
- unsupported request schema
- Public attempt must contain the read-only public chat projec
- Unknown public chat payload field
- Unknown public chat projection field
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/49df8f08219a1927.
Report an issue: GitHub.