{"record":{"id":"35ab7d8d337789e3","repo":"chenhg5/cc-connect","slug":"slack-sendimage-invalid-reply-context-type-t","errorCode":null,"errorMessage":"slack: SendImage: invalid reply context type %T","messagePattern":"slack: SendImage: invalid reply context type %T","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"platform/slack/slack.go","lineNumber":498,"sourceCode":"\topts := []slack.MsgOption{\n\t\tslack.MsgOptionText(core.MarkdownToSlackMrkdwn(content), false),\n\t}\n\tif rc.timestamp != \"\" {\n\t\topts = append(opts, slack.MsgOptionPostMessageParameters(slack.PostMessageParameters{ThreadTimestamp: rc.timestamp}))\n\t}\n\t_, _, err := p.client.PostMessageContext(ctx, rc.channel, opts...)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"slack: send: %w\", err)\n\t}\n\treturn nil\n}\n\n// SendImage uploads and sends an image to the channel.\n// Implements core.ImageSender.\nfunc (p *Platform) SendImage(ctx context.Context, rctx any, img core.ImageAttachment) error {\n\trc, ok := rctx.(replyContext)\n\tif !ok {\n\t\treturn fmt.Errorf(\"slack: SendImage: invalid reply context type %T\", rctx)\n\t}\n\n\tname := img.FileName\n\tif name == \"\" {\n\t\tname = \"image.png\"\n\t}\n\n\t_, err := p.client.UploadFileV2Context(ctx, slack.UploadFileV2Parameters{\n\t\tReader:          bytes.NewReader(img.Data),\n\t\tFileSize:        len(img.Data),\n\t\tFilename:        name,\n\t\tChannel:         rc.channel,\n\t\tThreadTimestamp: rc.timestamp,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"slack: send image: %w\", err)\n\t}\n\treturn nil","sourceCodeStart":480,"sourceCodeEnd":516,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/platform/slack/slack.go#L480-L516","documentation":"Type-assertion guard in Slack SendImage: rctx is not the platform's internal replyContext struct, so the target channel/thread for the upload cannot be determined.","triggerScenarios":"Thrown at platform/slack/slack.go:498 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a Slack-produced reply context"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}