A comment explains WHY the code does something — a decision, a constraint, a non-obvious tradeoff. It never restates WHAT the next line already says in code.
Outside CHANGELOG.md, code comments never narrate evolution: no "changed
from X to Y", "previously did Z", "used to be", "old behavior was", "no
longer needed but kept for compatibility" phrased as history. A past
decision that matters belongs in CHANGELOG.md or a commit message — not in
a comment describing what the code does today.