{"record":{"id":"882336a8be0d4958","repo":"paperclipai/paperclip","slug":"upload-did-not-return-a-file-url","errorCode":null,"errorMessage":"Upload did not return a file URL","messagePattern":"Upload did not return a file URL","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"ui/src/components/task-chat/TaskChatComposer.tsx","lineNumber":282,"sourceCode":"          placement === \"option\" ? assigneeValue : undefined\n        }\n      >\n        {profile?.image ? <AvatarImage src={profile.image} alt=\"\" /> : null}\n        <AvatarFallback>{identityInitials(resolvedLabel)}</AvatarFallback>\n      </Avatar>\n    );\n  }\n\n  return null;\n}\n\nconst MODE_DESCRIPTION: Partial<Record<IssueWorkMode, string>> = {\n  standard: \"Make changes and run work\",\n  planning: \"Draft a plan before acting\",\n  ask: \"Answer questions only, no changes\",\n};\n\n/** v7 per-mode placeholder copy; `{agent}` is the pending assignee's name. */\nfunction modePlaceholder(mode: IssueWorkMode, agentName: string): string {\n  switch (mode) {\n    case \"planning\":\n      return `Plan with ${agentName} — shapes the plan doc, no code changes…`;\n    case \"ask\":\n      return `Ask ${agentName} a question — read-only, nothing runs…`;\n    default:\n      return `Message ${agentName} — describe what you want done…`;\n  }\n}\n\ntype ComposerAttachment = {\n  id: string;\n  name: string;\n  size?: number;\n  status: \"uploading\" | \"attached\" | \"error\";\n  error?: string;\n  /** Set once uploaded; the submit path appends `[name](contentPath)` lines. */","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/ui/src/components/task-chat/TaskChatComposer.tsx#L264-L300","documentation":"The chat composer's image upload flow completed but the response contained no file URL. The upload API returned an unexpected/empty payload, so the attachment cannot be referenced in the message.","triggerScenarios":"Thrown at ui/src/components/task-chat/TaskChatComposer.tsx:211 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the upload; if it persists, check the asset upload endpoint response for why no file URL was returned."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}