Re: Structured Changelogs for ELPA packages

Andrew Hyatt <[email protected]> Sat, 08 Aug 2026 09:41:44 -0500
Newsgroups gmane.emacs.devel
Message-ID <[email protected]>
Philip Kaludercic <[email protected]> writes:

> Jean Louis <[email protected]> writes:
>
>> Hello Philip,
>>
>> I understand your request was about extracting, yet me I answered to
>> Andrew Hyatt, who said:
>>
>>> " I know this will be controversial, but if we want to maintain that
>>> changelogs are for humans and not machines, the solution is to use
>>> an LLM to produce a standardized changelog from the freeform
>>> changelog. I really don't see a downside to this; this kind of
>>> operation is pretty reliable. "
>>
>> So my message and testing was related to "producing standardized
>> changelog using the LLM" and I have demonstrated it is not
>> deterministic.
>
> My understanding, and Andrew can correct me here, is that he was
> thinking about using an LLM to take an arbitrary changelog/NEWS file and
> transform it into some standardized format like "Keep a Changelog".

Yes, exactly.  To make this super-explicit, here's an example using just
free software and open weight LLMs, and the `llm` package on ELPA.

(llm-chat (defconst ash/llm-ollama-gemma (make-llm-ollama :chat-model "gemma4:e2b"))
          (llm-make-chat-prompt 
           "A short history of the changes to this module:
Version 0.1 was the first version. Fixes to the roasting function were
made in 0.1.1. The issue was that the negative roasting values could be
obtained if there was just 1 roasting step. In Version 0.2, I made
several improvements so that now we can handle several different
roasting, subtypes, see variable `roaster-roast-type' for details."
           :context
           "Take the input and turn it into an org-list, with headings for major versions that have underneath them in the hierarchy, headings for minor versions.  Each heading has the version number, and a list of changes is below.  Example output:

* Version 1
- Initial version of the =foo= module.
** Version 1.1
- Fix typo in the =README.org=.
- Bugfix for command =foo-find-match=.
* Version 2
- Added the ability to do reverse computations.(llm-chat ash/llm-ollama-gemma
          (llm-make-chat-prompt 
           "A short history of the changes to this module:
Version 0.1 was the first version. Fixes to the roasting function were
made in 0.1.1. The issue was that the negative roasting values could be
obtained if there was just 1 roasting step. In Version 0.2, I made
several improvements so that now we can handle several different
roasting, subtypes, see variable `roaster-roast-type' for details."
           :context
           "Take the input and turn it into an org-list, with headings for major versions that have underneath them in the hierarchy, headings for minor versions.  Each heading has the version number, and a list of changes is below.  Example output:

* Version 1
- Initial version of the =foo= module.
** Version 1.1
- Fix typo in the =README.org=.
- Bugfix for command =foo-find-match=.
* Version 2
- Added the ability to do reverse computations.
- Created a tutorial with command =foo-tutorial=.
  "))
"* Version 0.1
- First version of the module.
** Version 0.1.1
- Fixes to the roasting function to prevent obtaining negative roasting values when only one roasting step was performed.

** Version 0.2
- Made several improvements to handle different roasting subtypes.
- Introduced the variable `roaster-roast-type` for details on roasting types."

- Created a tutorial with command =foo-tutorial=.
  "))

Running this produces the following output:

"* Version 0.1
- First version of the module.
** Version 0.1.1
- Fixes to the roasting function to prevent obtaining negative roasting values when only one roasting step was performed.

** Version 0.2
- Made several improvements to handle different roasting subtypes.
- Introduced the variable `roaster-roast-type` for details on roasting types."