I can see two possible issues here.
Firstly, the value of the annotation you see in the resolved messsage is always the value at the time *before* the alert resolved, not the value which is now below the threshold.
Let me simplify your expression to:
foo > 85
This is a PromQL filter. In general there could be many timeseries for metric "foo". If you have ten timeseries, and two of them have values over 85, then the result of this expression is those two timeseries, with their labels and those two values above 85. But if all the timeseries are below 85, then this expression returns no timeseries, and therefore it has no values.
So: suppose one "foo" timeseries goes up to 90 for long enough to trigger the alert (for: 2m). You will get an alert with annotation:
description: Current value = 90
Maybe then it goes up to 95 for a while. You don't get a new notification except in certain circumances (group_interval etc).
When the value of foo drops below the threshold, say to 70, then the alert ceases to exist. Alertmanager sends out a "resolved" message with all the labels and annotations of the alert as it was when it last existed, i.e.
description: Current value = 95
There's nothing else it can do. The "expr" in the alerting rule returns no timeseries, which means no values and no labels. You can't create an annotation for an alert that doesn't exist.
It's for this reason that I removed all my alert annotations which had $value in them, since the Resolved messages are confusing. However you could instead change them to something more verbose, e.g.
description: Most recent triggering value = 95
The second issue is, is it possible the value dipped below the threshold for one rule evaluation interval?
Prometheus does debouncing in one direction (the alert must be constantly active "for: 2m" before it goes from Pending into Firing), but not in the other direction. A single dip below the threshold and it will resolve immediately, and then it could go into Pending then Firing again. You would see that as a resolved followed by a new alert.
There is a closed issue for alertmanager debouncing / flap detection here:
Personally I think prometheus itself should have a "Resolving" state analogous to "Pending", so a brief trip below the threshold doesn't instantly resolve - but like I say, that issue is closed.
HTH,
Brian.