Drafting CUE release notes
The release body is the GitHub release text. Write only the curated,
hand-judged prose. The trailing <details> "Full list of changes since
vX.Y.Z" block is tool-generated — ignore it entirely.
Structure
Curated prose = an optional preamble, then ## sections (optionally
split by #### subsections).
Preamble. If the release has any breaking change, the first line is
verbatim:
Changes which may break some users are marked below with: :warning:
Omit it otherwise (typical of patch releases).
Sections, in this fixed order; omit any that are empty:
## Language · ## Evaluator · ## `cmd/cue` · ## LSP server ·
## Encodings · ## Standard library · ## Go API.
Lead with the headline feature when one dominates, overriding the order
(e.g. the new cue lsp led v0.15.0).
Subsections (####) group a large section or a flagship item:
- Named experiments/features (
#### The new `try` experiment):
1–3 paragraphs on what it does and how to enable it
(@experiment(...) or a language version), with links to the how-to,
proposal, and spec CL.
#### Performance / #### Other changes split ## Evaluator when
there is substantial performance work.
- A
#### may carry :warning: when the whole subsection is breaking.
Entry style
- One change per paragraph (blank-line separated, not bullet lists);
each a complete sentence or two. Closely related changes to one
flag/command/feature may share a paragraph.
- Write for CUE users, not evaluator authors. Describe the observable
effect, not the implementation. Avoid internals ("arcs/vertices",
"scope chain", "pushdown", "materializing fields"); name the symptom
("failed as an incomplete value or a cycle", "relative references now
resolve correctly"). Internal/roadmap terms (
evalv4, "comparing to
bottom") may appear only as forward-looking context.
- Tense/voice: descriptive present or imperative — "The new
--chdir
flag …", "cue import --path now skips …", "Fix a panic which could
occur when …".
- Backticks for anything code-like: flags (
--outfile), commands
(cue mod publish), identifiers, keywords, attributes (@embed), env
vars ($DOCKER_AUTH_CONFIG), types. Name encodings plainly in prose
("the JSON Schema encoder", "the ProtoBuf decoder"); use the import
path (encoding/jsonschema) only for a specific API symbol such as
GenerateConfig.NameFunc.
- Breaking changes: prefix
:warning:, and phrase so the impact and
migration path are clear.
- Regressions name the version that introduced them ("a regression
introduced in
v0.12.0"); plain bugs need not.
- Quantify performance ("up to 80% faster", "memory down by as much
as 60%"); credit the Unity service where relevant.
- Aggregate many small same-theme fixes into one paragraph, often
closing with gratitude: "A number of panics and other bugs … have been
fixed; thank you to all who reported these."
- Reminders: ongoing multi-release experiments may get a one-line
note at the top of
## Language.
Links
- Go API: pkg.go.dev pinned to the tag — e.g.
https://pkg.go.dev/cuelang.org/go/pkg/net@v0.16.0#InCIDR.
- Issues
https://cuelang.org/issue/NNN · CLs https://cuelang.org/cl/NNN
· Discussions/proposals https://cuelang.org/discussion/NNN · How-tos
https://cuelang.org/docs/howto/....
- LSP sections link the Getting Started wiki and invite bug reports via
the issue tracker and the
#lsp Discord/Slack channels.
What to include
A 300+-commit release yields ~20–40 prose entries. The test for every
candidate is: would a user notice or care? Membership in an Include
category is necessary, not sufficient — drop or aggregate a change whose
audience is narrow or whose effect is cosmetic (a reworded error, a
usage-line tweak, a doc fix). A lean, high-signal section beats an
exhaustive list.
When a change fixes a GitHub issue, the issue's engagement signals how
many users are affected: two or more 👍 reactions, or four or more
unique commenters, indicates the change matters to multiple users and is
worth including.
Include:
- New language features, syntax, experiments (and experiments going
stable, renamed, or reworked).
- New or changed CLI flags, commands, and behaviors.
- New stdlib functions/packages; new or changed public Go API
(
cue, cue/ast, cue/load, …), including deprecations.
- New encoding support and encoder/decoder fixes (JSON Schema, YAML,
TOML, Protobuf,
cue get go).
- Bug fixes users hit — especially panics and regressions.
- **Major evaluator changes/refactors — summarize in simple,
user-facing terms and explain why (the bugs it resolves,
the future work it enables, or if it helps performance).
- Performance/memory improvements, quantified.
- LSP features and notable fixes.
- Breaking changes and removals — always, with
:warning:, including
removal of long-deprecated APIs.
Exclude: ordinary internal refactors and cleanup
(major evaluator reworks excepted, above); test, test-framework, and
regression-test commits; CI, build, tooling, and dependency bumps;
doc-only and comment fixes; anything with no observable effect on the
CLI, the language, or the Go API.
Release types
- Minor (
vX.Y.0): full treatment — ## Language with experiment
subsections, performance write-ups, every applicable section; reference
the previous minor as the diff base.
- Pre-release (
-alpha.N / -rc.N): same structure as the minor it
leads to; content accumulates into the final .0. RCs often document
late design tweaks under a :warning: subsection.
- Patch (
vX.Y.Z, Z>0): short and fix-focused — usually no
## Language section, no warning legend; phrase entries as "Fix a …".
Source: cue-lang/cue — distributed by TomeVault.
1---2name: release-notes3description: Draft CUE GitHub release notes from a commit range. Use when writing or assisting with the curated release-note prose for a CUE release — minor, pre-release (alpha/rc), or patch. Use when this capability is needed.4---56# Drafting CUE release notes78The release body is the GitHub release text. Write only the curated,9hand-judged prose. The trailing `<details>` "Full list of changes since10vX.Y.Z" block is tool-generated — ignore it entirely.1112## Structure1314Curated prose = an optional preamble, then `##` sections (optionally15split by `####` subsections).1617**Preamble.** If the release has any breaking change, the first line is18verbatim:1920> Changes which may break some users are marked below with: :warning:2122Omit it otherwise (typical of patch releases).2324**Sections**, in this fixed order; omit any that are empty:25`## Language` · `## Evaluator` · `` ## `cmd/cue` `` · `## LSP server` ·26`## Encodings` · `## Standard library` · `## Go API`.27Lead with the headline feature when one dominates, overriding the order28(e.g. the new `cue lsp` led v0.15.0).2930**Subsections** (`####`) group a large section or a flagship item:31- Named experiments/features (`` #### The new `try` experiment ``):32 1–3 paragraphs on what it does and how to enable it33 (`@experiment(...)` or a language version), with links to the how-to,34 proposal, and spec CL.35- `#### Performance` / `#### Other changes` split `## Evaluator` when36 there is substantial performance work.37- A `####` may carry `:warning:` when the whole subsection is breaking.3839## Entry style4041- **One change per paragraph** (blank-line separated, not bullet lists);42 each a complete sentence or two. Closely related changes to one43 flag/command/feature may share a paragraph.44- **Write for CUE users, not evaluator authors.** Describe the observable45 effect, not the implementation. Avoid internals ("arcs/vertices",46 "scope chain", "pushdown", "materializing fields"); name the symptom47 ("failed as an incomplete value or a cycle", "relative references now48 resolve correctly"). Internal/roadmap terms (`evalv4`, "comparing to49 bottom") may appear only as forward-looking context.50- **Tense/voice**: descriptive present or imperative — "The new `--chdir`51 flag …", "`cue import --path` now skips …", "Fix a panic which could52 occur when …".53- **Backticks** for anything code-like: flags (`--outfile`), commands54 (`cue mod publish`), identifiers, keywords, attributes (`@embed`), env55 vars (`$DOCKER_AUTH_CONFIG`), types. Name encodings plainly in prose56 ("the JSON Schema encoder", "the ProtoBuf decoder"); use the import57 path (`encoding/jsonschema`) only for a specific API symbol such as58 `GenerateConfig.NameFunc`.59- **Breaking changes**: prefix `:warning:`, and phrase so the impact and60 migration path are clear.61- **Regressions** name the version that introduced them ("a regression62 introduced in `v0.12.0`"); plain bugs need not.63- **Quantify performance** ("up to 80% faster", "memory down by as much64 as 60%"); credit the Unity service where relevant.65- **Aggregate** many small same-theme fixes into one paragraph, often66 closing with gratitude: "A number of panics and other bugs … have been67 fixed; thank you to all who reported these."68- **Reminders**: ongoing multi-release experiments may get a one-line69 note at the top of `## Language`.7071### Links7273- Go API: pkg.go.dev pinned to the tag — e.g.74 `https://pkg.go.dev/cuelang.org/go/pkg/net@v0.16.0#InCIDR`.75- Issues `https://cuelang.org/issue/NNN` · CLs `https://cuelang.org/cl/NNN`76 · Discussions/proposals `https://cuelang.org/discussion/NNN` · How-tos77 `https://cuelang.org/docs/howto/...`.78- LSP sections link the Getting Started wiki and invite bug reports via79 the issue tracker and the `#lsp` Discord/Slack channels.8081## What to include8283A 300+-commit release yields ~20–40 prose entries. The test for every84candidate is: **would a user notice or care?** Membership in an Include85category is necessary, not sufficient — drop or aggregate a change whose86audience is narrow or whose effect is cosmetic (a reworded error, a87usage-line tweak, a doc fix). A lean, high-signal section beats an88exhaustive list.8990When a change fixes a GitHub issue, the issue's engagement signals how91many users are affected: two or more 👍 reactions, or four or more92unique commenters, indicates the change matters to multiple users and is93worth including.9495**Include:**96- New language features, syntax, experiments (and experiments going97 stable, renamed, or reworked).98- New or changed CLI flags, commands, and behaviors.99- New stdlib functions/packages; new or changed public Go API100 (`cue`, `cue/ast`, `cue/load`, …), including deprecations.101- New encoding support and encoder/decoder fixes (JSON Schema, YAML,102 TOML, Protobuf, `cue get go`).103- Bug fixes users hit — especially panics and regressions.104- **Major evaluator changes/refactors — summarize in simple,105 user-facing terms and explain *why* (the bugs it resolves,106 the future work it enables, or if it helps performance).107- Performance/memory improvements, quantified.108- LSP features and notable fixes.109- **Breaking changes and removals — always, with `:warning:`**, including110 removal of long-deprecated APIs.111112**Exclude**: ordinary internal refactors and cleanup113(major evaluator reworks excepted, above); test, test-framework, and114regression-test commits; CI, build, tooling, and dependency bumps;115doc-only and comment fixes; anything with no observable effect on the116CLI, the language, or the Go API.117118## Release types119120- **Minor** (`vX.Y.0`): full treatment — `## Language` with experiment121 subsections, performance write-ups, every applicable section; reference122 the previous minor as the diff base.123- **Pre-release** (`-alpha.N` / `-rc.N`): same structure as the minor it124 leads to; content accumulates into the final `.0`. RCs often document125 late design tweaks under a `:warning:` subsection.126- **Patch** (`vX.Y.Z`, Z>0): short and fix-focused — usually no127 `## Language` section, no warning legend; phrase entries as "Fix a …".128129---130> Source: [cue-lang/cue](https://github.com/cue-lang/cue) — distributed by [TomeVault](https://tomevault.io).131<!-- tomevault:4.0:skill_md:2026-06-29 -->