T2 chain · engineering / devrel — the release-day ritual as one
file: history in, a typed notes object out, the CHANGELOG updated
in place with nika:edit, the team pinged with the headline.
The job
Every release someone copy-pastes git log into a doc, rewrites it, pastes it into the CHANGELOG, then announces it. Four manual steps, four chances to drift. Here the git range is an input, the notes are a schema-typed object, and the announcement quotes the same headline the CHANGELOG got.The shape
The file
t2-release-notes.nika.yaml
How it works
The range is a var, not a hardcode
${{ vars.since_tag }}..HEAD — next release you change one input,
or pass it at run time.Typed notes · headline + breaking + body
The schema means
${{ tasks.notes.output.headline }} is a real
field downstream — in the CHANGELOG insert AND in the ping. One
source, two consumers, no drift.Constructs you just used
| Construct | Where | Reference |
|---|---|---|
exec: with var interpolation | history | The 4 verbs |
infer.schema: | notes | The 4 verbs |
nika:edit find/replace | changelog | Builtins |
nika:notify + secrets: | announce | Builtins |
Make it yours
- Gate the announce behind a human: add a
nika:prompttask betweenchangelogandannounce— the pattern is in Invoice chaser. - Add
breaking:to the ping whensize(tasks.notes.output.breaking) > 0. - Render a public version too: a second
infertask with a “user-facing tone” prompt, writingdocs/changelog/.
Next · SEO content brief
Chained fetch extractions — sitemap mode, then article mode — and CEL
indexing into a binding.