{"record":{"id":"c7820019b6422ac7","repo":"affaan-m/ECC","slug":"announcement-has-a-pending-receipt-inspect-discor","errorCode":null,"errorMessage":"announcement has a pending receipt; inspect Discord before clearing it","messagePattern":"announcement has a pending receipt; inspect Discord before clearing it","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/discord/release-announce.mjs","lineNumber":159,"sourceCode":"    body: body ? JSON.stringify(body) : undefined,\n  });\n  if (!response.ok) throw new Error(`Discord request failed (${response.status})`);\n  return response.status === 204 ? null : response.json();\n}\n\nasync function deliver(discussion) {\n  const key = announcementKey({ repository: env.GITHUB_REPOSITORY, discussionId: discussion.id });\n  if (env.DISCORD_ANNOUNCE_WEBHOOK_URL) {\n    if (!env.GITHUB_TOKEN) throw new Error('GitHub receipt configuration is missing');\n    const webhookUrl = normalizeDiscordWebhookUrl(env.DISCORD_ANNOUNCE_WEBHOOK_URL);\n    const marker = discussionReceiptMarker(key);\n    const existingReceipt = await findReceiptComment(discussion.id, marker);\n    if (existingReceipt) {\n      if (discussionReceiptStatus(existingReceipt) === 'complete') {\n        console.log('announcement already delivered');\n        return;\n      }\n      throw new Error('announcement has a pending receipt; inspect Discord before clearing it');\n    }\n    const claimId = await addReceiptComment(discussion.id, `${marker}\\n\\nDiscord delivery: pending.`);\n    const payload = buildDiscordPayload({ title: discussion.title, body: discussion.body, url: discussion.url, key });\n    delete payload.nonce;\n    delete payload.enforce_nonce;\n    const response = await request(webhookUrl, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload),\n    });\n    if (!response.ok) {\n      await deleteReceiptComment(claimId);\n      throw new Error(`Discord webhook request failed (${response.status})`);\n    }\n    const message = await response.json();\n    await addReceiptComment(discussion.id, `${marker}\\n\\nDiscord delivery: complete (message ${message.id}).`);\n    await deleteReceiptComment(claimId).catch(() => {\n      console.warn('announcement delivered; pending receipt cleanup requires attention');","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/affaan-m/ECC/blob/06c5e118c4d3e6c3b7f9445f973a2194c82de193/scripts/discord/release-announce.mjs#L141-L177","documentation":"Delivery idempotency guard: a receipt comment marking a pending delivery already exists on the discussion. The tool refuses to deliver again until a human inspects Discord and clears the stale receipt, preventing duplicate announcements.","triggerScenarios":"Triggered when release-announce.mjs rejects the current invocation: announcement has a pending receipt; inspect Discord before clearing it","commonSituations":"Occurs while running scripts/discord/release-announce.mjs with invalid arguments, missing flags, or a failing external dependency; the guard at scripts/discord/release-announce.mjs:159 aborts the command with this message.","solutions":["Review the constraint in the error message, correct the input accordingly, and re-run."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"06c5e118c4d3e6c3b7f9445f973a2194c82de193","analyzedAt":"2026-08-18T11:27:13.915Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}