{"record":{"id":"d31cbc3fd98c3807","repo":"paperclipai/paperclip","slug":"eval-session-managedprofile-requires-provider-clau","errorCode":null,"errorMessage":"eval-session managedProfile requires provider claude_managed","messagePattern":"eval-session managedProfile requires provider claude_managed","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/cli/eval-session-contract.ts","lineNumber":264,"sourceCode":"    throw new Error(\"eval-session acpxAgent must be codex or claude\");\n  }\n  if (provider !== \"acpx\" && acpxAgent !== undefined) {\n    throw new Error(\"eval-session acpxAgent requires provider acpx\");\n  }\n  const managedProfileInput = input.managedProfile === null\n    ? undefined\n    : input.managedProfile;\n  const agentCoreProfileInput = input.agentCoreProfile === null\n    ? undefined\n    : input.agentCoreProfile;\n  const managedProfile = provider === \"claude_managed\"\n    ? parseManagedProfile(managedProfileInput)\n    : undefined;\n  const agentCoreProfile = provider === \"aws_agentcore\"\n    ? parseAgentCoreProfile(agentCoreProfileInput)\n    : undefined;\n  if (provider !== \"claude_managed\" && managedProfileInput !== undefined) {\n    throw new Error(\"eval-session managedProfile requires provider claude_managed\");\n  }\n  if (provider !== \"aws_agentcore\" && agentCoreProfileInput !== undefined) {\n    throw new Error(\"eval-session agentCoreProfile requires provider aws_agentcore\");\n  }\n  if (input.nativeResume !== undefined) {\n    throw new Error(\n      \"eval-session nativeResume requires a retained live-session checkpoint\",\n    );\n  }\n  if (input.includeCollaborationModeInstructions === false) {\n    throw new Error(\n      \"current CapabilityLiveSessionService requires collaboration-mode instructions\",\n    );\n  }\n\n  const runnerd = object(input.runnerd, \"request.runnerd\");\n  const digest = text(runnerd.sha256, \"request.runnerd.sha256\");\n  if (!/^(?:sha256:)?[a-f0-9]{64}$/i.test(digest)) {","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/cli/eval-session-contract.ts#L246-L282","documentation":"managedProfile is a provider-specific credential/config block valid only for provider 'claude_managed'. If any other provider is chosen and request.managedProfile is present, parseEvalSessionRequest rejects the request. (When provider IS claude_managed, parseManagedProfile instead deeply validates the object.) This prevents stale Claude Managed Agents API credentials from being attached to unrelated providers.","triggerScenarios":"Calling parseEvalSessionRequest with e.g. {provider:'codex', managedProfile:{...}} or {provider:'aws_agentcore', managedProfile:{...}} — typically a config that previously used claude_managed had its provider switched without removing managedProfile.","commonSituations":"Toggling provider between claude_managed and codex/aws_agentcore in a shared eval config; copying a request template that includes managedProfile; CI matrix parameterizing only provider and leaving the profile block static.","solutions":["Remove managedProfile from the request when provider is not 'claude_managed'.","Set provider to 'claude_managed' if the managed profile (with model 'claude-sonnet-5') was intended.","Make the config builder include managedProfile only when provider === 'claude_managed'.","Note that claude_managed additionally requires model exactly 'claude-sonnet-5' and a fully valid managedProfile object (betaVersion 'managed-agents-2026-04-01', profileId, anthropicAgentId, environmentId, maxSessionListCostUsd, etc.)."],"exampleFix":"// before\nconst request = { schema, provider: \"aws_agentcore\", managedProfile: profile, agentCoreProfile: acp, ... };\n// after\nconst request = { schema, provider: \"aws_agentcore\", agentCoreProfile: acp, ... };\n// or, if Claude Managed was intended:\nconst request = { schema, provider: \"claude_managed\", model: \"claude-sonnet-5\", managedProfile: profile, ... };","handlingStrategy":"validation","validationCode":"function assertManagedProfileProviderPair(request: { provider?: string; managedProfile?: unknown }): void {\n  const provider = request.provider ?? \"codex\";\n  if (provider !== \"claude_managed\" && request.managedProfile !== undefined) {\n    throw new Error(`managedProfile set but provider is '${provider}'; managedProfile requires provider 'claude_managed'`);\n  }\n}","typeGuard":"function managedProfileAllowed(r: { provider?: string; managedProfile?: unknown }): boolean {\n  return r.managedProfile === undefined || (r.provider ?? \"codex\") === \"claude_managed\";\n}","tryCatchPattern":"try {\n  const parsed = parseEvalSessionRequest(raw);\n} catch (err) {\n  if (err instanceof Error && err.message === \"eval-session managedProfile requires provider claude_managed\") {\n    console.error(`Drop managedProfile or set provider='claude_managed' (got '${raw.provider ?? \"codex\"}').`);\n  } else throw err;\n}","preventionTips":["Include managedProfile only in the claude_managed branch of your request builder; remember claude_managed also requires model 'claude-sonnet-5'.","Use a discriminated union type per provider so provider-specific profile fields can't co-occur with the wrong provider.","Remove provider-specific profile blocks (managedProfile, agentCoreProfile) when switching providers in configs.","Validate provider/profile pairing at config-load time, before invoking the CLI."],"tags":["validation","contract","config"],"backgroundTag":"incompatible-provider-options","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"}