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:

Delete each merge's losing block in the pass itself, instead of
leaving it in the graph, unreachable, until stack layout drops it.
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.
This is safe:
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.

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.

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.]
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.

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 ...

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.
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.

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<[email protected]>:
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 [email protected]
To unsubscribe send an email [email protected]
_______________________________________________
ghc-devs mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to