{"record":{"id":"990fb95a3a91f6e7","repo":"affaan-m/ECC","slug":"release-tag-is-required","errorCode":null,"errorMessage":"release tag is required","messagePattern":"release tag is required","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"scripts/discord/announcement-core.mjs","lineNumber":11,"sourceCode":"import { createHash } from 'node:crypto';\n\nconst DISCORD_DESCRIPTION_LIMIT = 4000;\n\nexport function isAnnouncementDiscussion(discussion) {\n  return discussion?.category?.name === 'Announcements';\n}\n\nexport function releaseMarker(tag) {\n  const normalized = String(tag || '').trim();\n  if (!normalized) throw new Error('release tag is required');\n  return `<!-- ecc-release:${normalized} -->`;\n}\n\nexport function findReleaseDiscussion(discussions, marker) {\n  return discussions.find(item => (\n    item?.category?.name === 'Announcements'\n    && typeof item.body === 'string'\n    && item.body.includes(marker)\n  )) || null;\n}\n\nexport function announcementKey({ repository, discussionId }) {\n  if (!/^[^/\\s]+\\/[^/\\s]+$/.test(String(repository || ''))) throw new Error('invalid repository');\n  if (!/^[A-Za-z0-9_-]+$/.test(String(discussionId || ''))) throw new Error('invalid discussion id');\n  return `${repository}:discussion:${discussionId}`;\n}\n\nexport function buildDiscordPayload({ title, body, url, key }) {","sourceCodeStart":1,"sourceCodeEnd":29,"githubUrl":"https://github.com/affaan-m/ECC/blob/06c5e118c4d3e6c3b7f9445f973a2194c82de193/scripts/discord/announcement-core.mjs#L1-L29","documentation":"Guard inside releaseMarker: the release tag used to build the idempotency marker comment is empty or whitespace. The marker uniquely identifies which release an announcement belongs to, so a tag is mandatory.","triggerScenarios":"Triggered when announcement-core.mjs rejects the current invocation: release tag is required","commonSituations":"Occurs while running scripts/discord/announcement-core.mjs with invalid arguments, missing flags, or a failing external dependency; the guard at scripts/discord/announcement-core.mjs:11 aborts the command with this message.","solutions":["Supply the required argument/option named in the message and re-run the command."],"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-14T05:17:10.506Z"}