Personally I found it quicker to write comments by hand, than to
try and
force the LLM to produce a sensible Note.
The next best thing in my experience is to write a rough draft
and let a LLM
fill in the details. This way your input on what to emphasise, and
what can be
ignored will transfer over to the final text for the most part.
Skills or instructions like "be concise" reduce the
wordiness/rambliness but don't
do much to guide the focus of the text. So they are an
improvement. But they often
also result in useful context being removed.
----------------------------------------------------------------------
About https://gitlab.haskell.org/ghc/ghc/-/merge_requests/16543#note_700940
it's not *confusing*. It's just exhausting to read. There is terrible signal:noise ratio
and a complete lack of focus.
Since you asked, when looking at the commit message from a0539f8ed059a72186dc6fdeb5649ade4eb4ddbe and starting with the title:
Cmm: delete losing blocks in common block elimination
What does this tell me. Cmm is fine. common block elimination is fine.
But half of this sentence reads as noise. Deleting blocks is the point of CBE.
so yes I would expect it to do that.
Something better would be something like Cmm: Drop duplicate blocks during common block instead of just rewriting labels.
Likes yes it's not *terrible*. But it's not great. And what makes it terrible is that all of it is not great. Because if we move on:
Just like any great novel it starts by repeating the title. I'm joking of course.
Sometimes that can be fine but no one will read the body without the title.
So again not *terrible* but lowkey bad. Then it rambles on:
"Leaving them in the graph", where else would we leave them, if the graph is the only output.
"unreachable", well yes or we couldn't drop them.
"stack layout", I would have just said a later pass, because it doesn't matter much which one. But
maybe I'm being nitpicky on that last one.
Delete each merge's losing block in the pass itself, instead of
leaving it in the graph, unreachable, until stack layout drops it.
This is low key pointless again. If it were not safe why would we merge it. We are deleting
duplicate blocks that are *already* dropped by another pass before this commit. Why would it
not be safe? It does not say.This is safe:
replaceLabels rewrites every in-graph reference to a loser
to the end of its substitution chain, and chain ends never lie in the
substitution's domain.
This is meaningless to anyone who hasn't already read the code.
If they have read the code it's meaningless too. Because you already know this information.
Which just makes this paragraph meaningless.
What is info_tbls? What is replaceLabels? Again if I know the code enough to remember this then
this is of zero value.
If one doesn't know the code then it's a soup of references to things in the code
we haven't seen before. It doesn't help anyone understand what the MR does without reading the code.
But even if you read the code this is not really helpful to understand it.The one reference replaceLabels does not rewrite,
info_tbls, holds only the entry block's info table at this stage, and the
entry block never loses a merge -- see
Note [Retain entry block during common block elimination.]
At best this tells an LLM some keywords to grep for. But it will just look at the diff anyway.
The information anyone will gain by looking at this will be near zero.
Maybe the Note reference is relevant. Maybe ...
Who is this for? Who would read this and say
"I'm glad I could glance from the git log that this Note was rewritten here".
The note is related to the change so it was touched up. That should happen.
But who wants to read about this in the commit message.
I wouldn't. A LLM wouldn't. A maintainer cherry picking the commit wouldn't.
Someone bisecting a bug wouldn't. A reviewer wouldn't.
I think it's noise. Word shaped noise.
Filling the commit message up to the length the LLM thinks it should have and nothing more.
--------------------------
I have forgotten what this MR was about since I left the comment. Also rewrite Note [unreachable blocks] in GHC.Cmm.Pipeline to state
who actually removes unreachable blocks and when, and point at it from
GHC.Cmm.ContFlowOpt.
All that re-reading of the commit message told me was we drop some dead code in another place now. For unknown reasons. And unknown benefits. In ways I can't really gleam from the commit message either.
It tells me almost none of the things I care about in a commit message, and a lot of things I don't care about.
It's just bad. Bad in a myriad of tiny ways that I can point at exactly. And for any one of them one could say maybe it's not that bad. But once you throw enough pixels at a screen you get a picture. And clearly this picture is just bad.
So I hope we can do better. One way or another. On 14/10/2026 15:00, Simon Jakobi wrote:
Thanks for your message and your review efforts, Andreas! This is an issue I've been struggling with, primarily in my own patches. Recently I've often spent more time and effort trying to get the prose into an acceptable shape than on any other aspect of a patch. While I believe that this has been fairly effective at removing unnecessary context, the readibility of the result is often still not great, so I'd be very interested to learn how other contributors manage to achieve good quality comments with their LLM-assisted workflows. Regarding your MR feedback: Do you think you could point out relatively precisely _what_ you regard as a problem, e.g. bad wording, unnecessary factoids, etc? For example, in https://gitlab.haskell.org/ghc/ghc/-/merge_requests/16543#note_700940 you complained about the "LLM Rambling", but I couldn't tell which comments or commit messages you actually found confusing, and why. (I had actually invested several hours into them.) I understand that my request takes even more effort from you – I will try to make it pay off. Thanks! Simon Am Mi., 14. Okt. 2026 um 13:08 Uhr schrieb Andreas Klebinger via ghc-devs <ghc-devs@haskell.org>:Hello Devs, Given the use of AI has increased recently I think this deserves discussion. There are certain texts that are, ultimately, transient, or read less frequently as time moves on. This broadly includes tickets, which generally become mostly irrelevant once resolved. While reading AI tickets can be exhausting, I'm willing, within reason, to accept them as a fact of live. But there are parts of the code base in which we have prose that is written once and read often. I'm primarily concerned with Notes, Commit messages, and to a lesser degree code comments. I've noticed more people have been posting LLM generated bug fixes (fine, it's policy) where seemingly little work went into polishing texts other devs will read many times. I consider this a problem. I think it's important for certain parts of the code base to be written concisely. Something LLMs are terrible at today, and even skills make it marginally better. This is just a fact. I think especially with the release of Opus 5.5 this has become *more* of an issue as the prose is now only bad in a myriad ways that are not immediately obvious rather than being obviously atrocious at a glance. Which leads people to take it as-is without putting effort into writing it by hand, or at least trimming it down after the fact. This is obviously bad for human consumers of these texts. But even if you are "all in" on AI these texts are also objectively garbage for future AI use as they are bloated with irrelevant facts, meaningless past history, repeating things obvious from context and generally wordy for no benefit. They are simply bad. Is it fair to expect people to put in more effort into these? I think yes. Notes are *the* way to understand the code base. And making them worse permanently degrades the ability of newcomers to understand the codebase. Similarly commit messages are hugely important to be able to determine when changes where introduced, quickly find ranges of commits to bisect for new bugs and many more regular maintenance tasks. My plan is to aggressively request improvement of prose during MR review going forward. Accepting bad prose is worse for maintainers because they have to read texts three times to understand what is going on. It's worse for agents because it fills context windows with irrelevant facts and pointless trivia that poison their reasoning ability. It's just worse, and it takes little effort to fix. But maybe I'm alone in feeling this way. If everyone else is happy to read Opus text output all, or at least to have opus read opus output all day long. Then I will surrender this fight and move to another hill to die on. But if people are feeling similarly then please let me know and do likewise. I don't think it's a big ask either. If you are prompting already just type a draft in your commit message/note and let claude do formatting/typo/alignment fixes. A sloppy text pushed through claude will in most cases beat what any model today will generate on it's own. Maybe this changes in 2 years. But it's not changing today. It's not just a question of length. You can make a LLM generate shorter texts with a skill file or otherwise. But they are terrible at understanding what the tricky parts are, what is worth highlighting, what can be dropped because it is obvious from wider context. I think it's *easy* for every contributor who knows what is happening in their patch to reach a reasonable standard. But we have to ask them to do it and to set the expectation. And I hope we can do so. Andreas, freshly back from reading some claude output. _______________________________________________ ghc-devs mailing list -- ghc-devs@haskell.org To unsubscribe send an email to ghc-devs-leave@haskell.org