{"record":{"id":"d5ece1b77591ba7e","repo":"paperclipai/paperclip","slug":"too-many-explicit-skill-inputs","errorCode":null,"errorMessage":"Too many explicit skill inputs","messagePattern":"Too many explicit skill inputs","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/runnerd-codex-transport.ts","lineNumber":6623,"sourceCode":"  providerTurnIsActiveFromCommittedEvents,\n  recoveredRunAttachment,\n  releaseRunnerProcessOwnership,\n  runnerCloseDeadlines,\n  rotatedRunAttachPayload,\n  rotateExternalAuthorityEpoch,\n  turnStartCommandResultValid,\n  turnStartNotificationDisposition,\n  turnStartResponseReady,\n});\n\n\n/** Map controller asset paths to the assigned copy on the provider filesystem. */\nexport function resolveRunnerdCodexSkillInputs(\n  inputs: Record<string, unknown>[],\n  context: NativeRuntimeContextSnapshot | null,\n  codexHome: string,\n): Array<{ type: \"skill\"; name: string; path: string }> {\n  if (inputs.length > 64) throw new Error(\"Too many explicit skill inputs\");\n  const seen = new Set<string>();\n  return inputs.map((input) => {\n    const assigned = context?.skills.find((skill) => skill.runtimeName === input.name);\n    if (\n      !assigned || !/^[a-zA-Z0-9_-]+$/.test(assigned.runtimeName)\n      || input.path !== resolve(assigned.bundle.rootPath, \"SKILL.md\")\n      || seen.has(assigned.runtimeName)\n    ) {\n      throw new Error(\"Explicit skill input must reference a unique assigned runtime skill\");\n    }\n    seen.add(assigned.runtimeName);\n    return {\n      type: \"skill\",\n      name: assigned.runtimeName,\n      path: resolve(codexHome, \"skills\", assigned.runtimeName, \"SKILL.md\"),\n    };\n  });\n}","sourceCodeStart":6605,"sourceCodeEnd":6641,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/packages/paperclip-runner/src/live/runnerd-codex-transport.ts#L6605-L6641","documentation":"Bound guard in the runnerd Codex skill-input resolution (resolveRunnerdCodexSkillInputs): the turn supplies more explicit skill inputs than the transport allows, so it refuses rather than materializing an unbounded set of controller-asset copies onto the provider filesystem. Generic validation — the input at fault is an oversized skills array on the turn request, usually from a caller bug or missing batching.","triggerScenarios":"Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:6623 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reduce the number of explicit skill inputs attached to a single turn (split across turns or preselect the needed skills).","Deduplicate the input list before sending — repeated skill entries often inflate the count.","If a legitimate workload needs more skills, raise the documented cap in resolveRunnerdCodexSkillInputs."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-09-18T08:03:59.046Z","contentChangedAt":"2026-09-18T08:03:59.046Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}