Collect
Pull commits, work items, and release metadata into one clean input set.
Release notes are one of those jobs where the data is already there, but the wording still needs a human touch. I let code collect and filter the changes, AI draft the note, and a person approve the final version.
Pull commits, work items, and release metadata into one clean input set.
Keep only the changes a customer should actually see.
Turn the filtered items into readable release-note language.
Let a human approve the final wording before publishing.
public sealed record ChangeItem(string Id, string Title, bool CustomerFacing);
public sealed record ReleaseNoteDraft(string Summary, string[] BulletPoints);
public static class ReleaseNotePipeline
{
public static IEnumerable<ChangeItem> FilterCustomerFacing(IEnumerable<ChangeItem> changes)
=> changes.Where(x => x.CustomerFacing);
}
public sealed class ReleaseNoteService
{
private readonly IAssistantService _assistant;
public ReleaseNoteService(IAssistantService assistant) => _assistant = assistant;
public async Task<ReleaseNoteDraft> BuildDraftAsync(IEnumerable<ChangeItem> changes)
{
var source = string.Join("\n", changes.Select(c => $"- {c.Id}: {c.Title}"));
var summary = await _assistant.SummarizeAsync(source);
return new ReleaseNoteDraft(summary.Summary, summary.ActionItems);
}
}
Summarize these release items in 4 bullets.
Use plain language.
Keep customer-facing wording.
Do not invent features that are not in the list.