{"record":{"id":"91648690736a7c84","repo":"JuliusBrussee/caveman","slug":"cave-conversation-in-use","errorCode":"cave_conversation_in_use","errorMessage":"cave_conversation_in_use","messagePattern":"cave_conversation_in_use","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/agent/src/runtime.ts","lineNumber":305,"sourceCode":"\nexport function createConversation(): Conversation {\n  return new Conversation();\n}\n\ntype ConversationTransaction = {\n  readonly owner: Conversation;\n  readonly sessionId: string;\n  messages: AgentMessage[];\n  fingerprint: string | undefined;\n  cachePrefixDigest: string | undefined;\n  providerFrozen: ProviderFrozenView | undefined;\n  originalFrozen: ProviderFrozenView | undefined;\n};\n\nfunction beginConversation(owner: Conversation): ConversationTransaction {\n  const state = conversationStates.get(owner);\n  if (!state) throw new Error(\"cave_conversation_invalid\");\n  if (state.busy) throw new Error(\"cave_conversation_in_use\");\n  const transaction: ConversationTransaction = {\n    owner,\n    sessionId: state.sessionId,\n    messages: structuredClone(state.messages),\n    fingerprint: state.fingerprint,\n    cachePrefixDigest: state.cachePrefixDigest,\n    providerFrozen: state.providerFrozen === undefined\n      ? undefined\n      : structuredClone(state.providerFrozen),\n    originalFrozen: state.originalFrozen === undefined\n      ? undefined\n      : structuredClone(state.originalFrozen),\n  };\n  state.busy = true;\n  return transaction;\n}\n\nfunction commitConversation(","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/766dce6b1394ebb56a3090748d5a0240a5aefb36/packages/agent/src/runtime.ts#L287-L323","documentation":"Concurrency guard in beginConversation: the conversation's state is already busy — another run/stream is currently using this Conversation, and re-entrant turns would corrupt message history and fingerprints.","triggerScenarios":"Thrown at packages/agent/src/runtime.ts:305 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Await the in-flight run on this Conversation before starting another","Use a separate createConversation() per concurrent session","Serialize access with a queue keyed by conversation"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"766dce6b1394ebb56a3090748d5a0240a5aefb36","analyzedAt":"2026-08-18T03:14:35.516Z","contentChangedAt":"2026-08-18T03:14:35.516Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}