create-draft-release-notes — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-draft-release-notes (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create a GitHub draft release, organize the generated notes by conventional commit type, and save the organized body back to the draft. Preserve each release note item exactly; only split accidentally joined bullets, move bullets into sections, and adjust headings.
Input: a release tag/title such as v2.0.6. If title and tag differ, ask for the tag.
repo as <owner>/<repo>.Prefer an explicit repo from the user. Otherwise infer the current project's main GitHub repository from project metadata or the current GitHub remote. For npm projects, package.json repository is a useful signal; in monorepos, inspect the package or project being released rather than assuming the workspace root. Ignore subdirectory metadata such as repository.directory because GitHub releases are repository-level. If the repo is ambiguous, ask.
repo="<owner>/<repo>"
release_tag="v2.0.6"
release_title="$release_tag" gh auth status
gh repo view "$repo" --json nameWithOwner --jq '.nameWithOwner'
gh release view "$release_tag" -R "$repo" --json tagName,isDraft,urlIf the release exists, stop unless the user explicitly asked to update that draft.
previous_tag="$(gh release list -R "$repo" --exclude-drafts --exclude-pre-releases --limit 1 --json tagName --jq '.[0].tagName')"
gh release list -R "$repo" --exclude-drafts --exclude-pre-releases --limit 5Ask for confirmation if the previous tag is missing, surprising, or part of a non-standard range.
previous_tag -> release_tag. If the user did not explicitly ask to create the draft in this turn, ask for confirmation. gh release create "$release_tag" -R "$repo" --draft --generate-notes --notes-start-tag "$previous_tag" --title "$release_title"Add --verify-tag when the release must use an existing remote tag.
tmp_dir="$(mktemp -d)"
gh release view "$release_tag" -R "$repo" --json body --jq '.body' > "$tmp_dir/generated.md"
node .agents/skills/create-draft-release-notes/scripts/create-draft-release-notes.mjs "$tmp_dir/generated.md" > "$tmp_dir/organized.md"
gh release edit "$release_tag" -R "$repo" --draft --title "$release_title" --notes-file "$tmp_dir/organized.md" gh release view "$release_tag" -R "$repo" --json url --jq '.url'Use this when the user provides generated release note Markdown and only wants it organized:
node .agents/skills/create-draft-release-notes/scripts/create-draft-release-notes.mjs release-notes.mdOmit the file path to read from stdin. Review that every original item still appears once and non-item sections remain.
Emit non-empty sections in this order:
### Breaking Changes 🍭### New Features 🎉### Performance 🚀### Bug Fixes 🐞### Refactor 🔨### Document 📖### Other ChangesClassify by the item prefix:
type!: or type(scope)!:, plus breaking: / break:.feat: / feat(scope):, plus feature:.perf:.fix:.refactor:.docs: / docs(scope):, plus doc:.Keep each category in generated top-to-bottom order.
**Full Changelog**, or other non-item sections.scripts/create-draft-release-notes.mjs: deterministic formatter for generated release note Markdown.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.