Create the GitHub release discussion in dotnet/core and the locked mirror announcement issue in dotnet/announcements for a .NET preview, RC, or GA release. USE FOR: publishing release discussions after release notes exist, mirroring a newly created discussion into dotnet/announcements, verifying an existing post, and re-running a partially completed publication safely. DO NOT USE FOR: writing release notes, generating changes/features.json, or retrying create commands blindly after cancellation.
Use this skill when the release notes are already published in this repository and you need to publish the corresponding GitHub discussion and announcements mirror.
This skill exists because GitHub create mutations are not idempotent. Creating a discussion or issue twice creates duplicates. A canceled tool call or partial terminal result does not prove the create failed.
The goal is to:
dotnet/core discussion for the releasedotnet/announcements mirror issue that links to the
discussionCollect these before creating anything:
.NET 11 Preview 3release-notes/11.0/preview/preview3/dotnet/coredotnet/announcementsBefore any create mutation, perform these checks in order.
Read the target release directory and README.md to confirm:
Do not copy links from the previous discussion without checking that the new files exist.
Fetch:
dotnet/core discussion bodydotnet/announcements issue bodyPreserve the established wording and structure unless the current release notes or publishing pattern changed.
This step is mandatory.
Search dotnet/core for an existing discussion matching the target title or
blog/release link. Search dotnet/announcements for an existing issue matching
the same release title.
If a matching discussion or issue already exists:
If a terminal run, tool call, or agent step was canceled after sending a create command, assume the create may already have succeeded.
The next action must be a search or direct fetch for the expected title, not a second create attempt.
Update only the release-specific fields:
.NET 11 Preview 3Use gh api graphql or another non-interactive gh command to create the
discussion.
Capture and report:
Fetch the created discussion and confirm:
Example verification target:
.NET 11 Preview 3 discussion:
https://github.com/dotnet/core/discussions/10363If verification succeeds, use that discussion URL as the source of truth for the announcement mirror.
The mirror issue should start with the locked-mirror sentence that points to the new discussion URL.
Reuse the previous release issue as the template for:
For the current .NET 11 preview pattern, the mirror issue uses the Preview
and .NET 11.0 labels and is locked with reason resolved.
Even if the discussion is new, the issue might already exist because of a prior
attempt. Search dotnet/announcements by exact title before creating.
After creation, verify:
active_lock_reasonExample verification target:
.NET 11 Preview 3 announcement issue:
https://github.com/dotnet/announcements/issues/393Do not assume the lock succeeded just because the command returned. Query the
issue API and verify locked: true and the expected reason.
Follow these rules on every rerun:
createDiscussion or gh issue create until you have searched
for an existing item with the target titleFor a normal release publication run:
This keeps the publication workflow repeatable without producing duplicate discussions or mirror issues.