| name | concise-changelog-entries |
| description | Keep CHANGELOG.md entries to a single concise sentence. Use when adding or editing entries in CHANGELOG.md. |
Concise CHANGELOG Entries
Rule
A CHANGELOG entry is one sentence: what changed, at a glance. Most of the time the
first sentence of the description is enough — drop the rest.
Do NOT put in the CHANGELOG:
- The mechanism / how it works (which flag, which procedure, the algorithm).
- Consequences, edge cases, and downstream effects.
- Rationale or motivation.
Those belong in the PR description and the commit message, which the entry's link
points to. The reader gets "what changed" from the CHANGELOG and one click away for
the details.
When trimming, don't drop:
- The trailing PR/issue link, e.g.
([#3310](https://github.com/0xMiden/protocol/issues/3310)).
- A leading
[BREAKING] tag if one is already there. Condensing an entry must not silently
change whether it's marked breaking.
The [BREAKING] tag is not about verbosity — it belongs only on changes that actually break
users of a prior version (removed/renamed/behavior-changed public APIs). Purely additive changes
(new APIs, new features) get no tag, however large. Add or remove the tag based on the change
itself, never as a side effect of shortening the sentence.
Examples
Avoid (verbose — mechanism + consequences inline):
- [BREAKING] Unified the two account-origin authenticators in the transaction kernel's `api.masm` into a single `authenticate_account_origin` procedure that conditionally tracks the call: a kernel procedure call is recorded (via the `was_called` flag) only when the active account is the native account and the account's authentication procedure is not currently executing. As a result the read-only introspection procedures (`account_has_procedure`, ...) are now tracked in the native context, and `account_upgrade` is now gated by the authenticator ([#3310](https://github.com/0xMiden/protocol/issues/3310)).
Good (first sentence only):
- [BREAKING] Unified the two account-origin authenticators in `api.masm` into a single `authenticate_account_origin` procedure that conditionally tracks the call ([#3310](https://github.com/0xMiden/protocol/issues/3310)).
Avoid:
- [BREAKING] Transaction fees are now paid by the authentication procedure creating a public TX_FEE note before the transaction summary is created, so the fee payment is covered by the signature (`miden::standards::fee`). The payment asset and conversion rate are committed to via the auth args (see `FeeConversionInfo`); on zero-base-fee chains no note is created ([#2899](https://github.com/0xMiden/protocol/discussions/2899)).
Good:
- [BREAKING] Transaction fees are now paid by the authentication procedure creating a public TX_FEE note covered by the signature ([#2899](https://github.com/0xMiden/protocol/discussions/2899)).
When a second sentence is warranted
Rarely — only when a single sentence would leave a user unable to react to the change
(e.g. a migration note they must act on). Even then, keep it to one short clause, not a
paragraph. When in doubt, cut it.