{"record":{"id":"9c71bf657bebcb38","repo":"paperclipai/paperclip","slug":"paperclip-runner-acpx-model-unqualified","errorCode":"paperclip_runner_acpx_model_unqualified","errorMessage":"Paperclip Runner ACPX ${acpxAgent} requires exact model ${qualifiedModel}.","messagePattern":"Paperclip Runner ACPX (.+?) requires exact model (.+?)\\.","errorType":"error_code","errorClass":"PaperclipRunnerProviderProfileError","httpStatus":null,"severity":"error","filePath":"server/src/services/native-runtime/provider-profile.ts","lineNumber":415,"sourceCode":"      model,\n      maxEstimatedSessionCostUsd: positiveNumberOrNull(\n        config.maxEstimatedSessionCostUsd,\n        \"paperclip_runner_aws_agentcore_spend_cap_invalid\",\n        \"Paperclip Runner AWS AgentCore requires a positive estimated session spend ceiling when overridden.\",\n      ),\n    };\n  }\n\n  const acpxAgent = config.acpxAgent ?? \"claude\";\n  if (acpxAgent !== \"claude\" && acpxAgent !== \"codex\") {\n    throw new PaperclipRunnerProviderProfileError(\n      \"paperclip_runner_acpx_agent_unavailable\",\n      \"Paperclip Runner ACPX requires the qualified Claude or Codex agent profile; Pi is not available.\",\n    );\n  }\n  const qualifiedModel = QUALIFIED_ACPX_RUNNER_MODELS[acpxAgent];\n  if (acpxAgent === \"codex\" && model !== qualifiedModel) {\n    throw new PaperclipRunnerProviderProfileError(\n      \"paperclip_runner_acpx_model_unqualified\",\n      `Paperclip Runner ACPX ${acpxAgent} requires exact model ${qualifiedModel}.`,\n    );\n  }\n  return {\n    provider: \"acpx\",\n    backend: \"acpx_runtime\",\n    model: model || qualifiedModel,\n    acpxAgent,\n  };\n}\n\n/**\n * Project the operator-owned adapter configuration and a qualified stored\n * profile into the closed native execution descriptor. Editable adapter\n * configuration can select a stored profile, but it cannot replace that\n * profile's immutable remote resource identity.\n */","sourceCodeStart":397,"sourceCodeEnd":433,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/services/native-runtime/provider-profile.ts#L397-L433","documentation":"Guard in resolvePaperclipRunnerProviderProfile for ACPX: once the agent is qualified, the model must exactly equal that agent's qualified model from the ACPX qualification table; otherwise 'paperclip_runner_acpx_agent_unavailable'-style error naming the exact model is thrown. ACPX profiles are pinned to one model version, so any other string is rejected.","triggerScenarios":"Thrown at server/src/services/native-runtime/provider-profile.ts:409 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the model to the exact qualified model named in the error message.","Remove the model override so the agent's qualified default applies.","Re-qualify the ACPX agent profile if a different model version is needed."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}