Two documents bracket every release: the release notes nobody wants to write, and the risk assessment nobody has time to write. Both are summarization over the same inputs — merged PRs, diffs, dependency changes, recent incident history — which makes them one AI workflow with two outputs.
Tier: Core · Workflow area: CI/CD & release engineering
The notes are low-risk drafting; the risk brief is a genuine stability control, because AI-accelerated delivery ships more change per deploy and the risk review is where that speed gets converted back into safety.
Skip the risk brief for single-line, feature-flagged, instantly-revertible changes — process theater helps nobody.
git log v1.41..v1.42 --merges or the GitHub compare API).Extract the raw change set.
gh pr list --search "merged:>=2026-07-20 base:main" \
--json number,title,labels,files,author > changes.json
git diff v1.41..v1.42 --stat > diffstat.txt
Generate release notes with an audience split.
From the attached merged-PR list, write release notes in three sections:
- For customers: user-visible changes only, plain language, no internal names.
- For engineers: all changes grouped by service, with PR links.
- Dependency/infra changes: version bumps, schema migrations, config changes.
Use only the attached data. If a PR title is too vague to classify, list it
under "Needs description" instead of guessing what it does.
Generate the risk brief from the same data plus operational context.
Now produce a pre-deploy risk brief for this change set. Context attached:
diffstat, dependency diff, and the last 90 days of incident titles.
Output:
1. Riskiest changes (max 5), each with: why, blast radius (single service /
shared infra / data), and the specific rollback for that change.
2. Migration/irreversibility flags: schema changes, data backfills,
one-way config flips.
3. Any change touching a service named in a recent incident.
4. Overall risk: LOW / MEDIUM / HIGH with one-sentence justification and
an explicit confidence level. State what context you did NOT have.
Verify the brief against reality. For each "riskiest change": open the actual diff and confirm the characterization. Check the migration list against the real migrations directory — this is a claim audit, and missed migrations are the classic gap.
Human sets the final risk rating. The model's LOW/MEDIUM/HIGH is an input. The deploy decision, timing (not at 5 pm Friday), and rollback-readiness call belong to the engineer whose name is on the deploy.
The risk brief's confidence line and "context I did not have" section are the most valuable part — a model that was not given the incident history cannot warn you about repeat offenders, and it should say so.
gh/git extraction itself and iterate; good while you are still tuning the prompts.PR titles, service names, and incident history are often client-confidential. Run the scripted version inside the client's environment against their approved AI endpoint (Bedrock/Azure OpenAI in-tenancy), or redact service names to stable aliases before using a public assistant and re-substitute locally. For fully restricted estates, the structured templates in steps 2–3 work as human checklists too — the format is the transferable asset.