The notes are built from contributor-written commit and pull-request text, so a
prompt injection there reaches a model holding a token. Its gh and git calls now
run with a read-only token while the write-capable PAT stays shell-side for the
apply, and git is limited to its read subcommands.
Notes now start from the first-parent mainline and read each entry's pull
request, which surfaces user-facing fixes buried inside large squash merges.
The model emits only bare URLs; the action resolves each author, groups them
and renders the credit, so wrong or invented handles are not expressible.
A hidden comment lists any pull request no bullet references, and failing to
produce or apply notes now fails the job instead of passing silently.
Action gains from/to/format/apply inputs and a notes-file output; default
'from' is the previous same-kind tag (prerelease vs stable). New Generate
Release Notes workflow_dispatch previews any range to the summary/artifact,
with optional apply to an existing release.
Rollback: checkboxes to delete the GitHub release/tag and unlist NuGet
(dry-run default, independent steps); replaces Unlist Release.
Whitelist: releases only accept X.Y.Z or X.Y.Z-(alpha|beta|rc|preview)<N>.
Shared .github/actions/ai-release-notes composite action derives the previous
same-product tag, builds a path-scoped git log, and rewrites the release body
via Claude. Best-effort: falls back to the existing notes on any failure.
Wired into engine, CLI, VS package, and launcher releases.
Name upload-artifact outputs per component version so downloaded zips are
self-identifying (stride-packages-<v>, stride-cli-<v>, stride-launcher-<v>,
stride-vsix-<v>). release-deploy downloads by stride-packages-* glob since it
runs by run-id without the version in scope.