Adama Traore did the damage, scoring twice in the last ten minutes to inflict our first home league defeat since December 2018.
It was Wolves who had the first good chance of the game when Patrick Cutrone found himself one on one with Ederson, but the striker miscued his effort and let City off the hook.
Then came a thrilling, end-to-end passage of play. Riyad Mahrez’s volley looked to be heading in but for Connor Coady’s timely headed clearance, but Wolves went straight up the other end and forced Fernandinho into last-ditch heroics, first sliding in to block Raul Jimenez’s effort before heading Cutrone’s effort away whilst lay on the floor.
It was superb defending from the Brazilian.
City were looking somewhat pedestrian, our usual high-intensity passing and pressing absent, and Wolves were frequently getting in behind our backline. Nicolas Otamendi’s loose ball saw Jimenez race clear again, but Fernandinho did enough to put him off at the last.
City needed a spark and Raheem Sterling tried to provide it, his smart turn and effort from the edge of the area forcing Rui Patricio into action, but the lethargy remained. Half-time came and Pep Guardiola looked understandably unhappy with what he’d seen.
City upped the tempo slightly in the second half. David Silva's free-kick struck the crossbar and in the proceeding melee he shot just over the bar on the volley.
But we were hit on the counter with ten minutes remaining, Adama Traore slotting home after Jiminez had skinned Otamendi and squared the ball superbly.
With our passing and movement way below our usual standard - and with Wolves defending resolutely - finding an equaliser was difficult, Aguero's effort on the turn in added time as close as we came.
And with seconds remaining, Wolves double their advantage, Traore again racing clear and slotting past Ederson low into the bottom corner.
A day to forget for City, but a memorable one for the travelling Wolves supporters who stayed behind afterwards to celebrate with their jubilant players and manager.
READ | Mendy injury update
"It was not our best day. We started good, we wanted to be patient with our game because we know how good they defend. We let them run twice, got nervous a little bit and our process to create chances was not good. We had the problems on the counter-attack in the end and it was a bad day.
"They defend. They play long balls and defend, they then go on the counter. It is physical team, a strong team so know how good they are. We know their qualities and we knew how they scored the goals. We were not organised, lost balls in positions we could not lose them in.
"We had two chances, one onto the crossbar and with Bernardo Silva. They did really well. We are going to come back again to try."
There is now an international break that will see many of our senior stars jet off around the world for various friendlies and qualifiers.
Our next fixture is away at Crystal Palace on 19 October, before our Champions League game against Atalanta three days later.
City remain second in the Premier League table, but we are now eight points behind Liverpool whose 100 percent start to the campaign continued yesterday with their 2-1 win over Leicester. Closing that gap is the priority when we return from this latest international hiatus.