Manchester City's 100% Premier League record came to an end at Molineux as Hwang Hee-chan scored a second-half winner to give Wolves a shock victory against the champions.
City manager Pep Guardiola, forced to watch from the stands as he served a one-match touchline ban, was unable to intervene as his side failed to take control in their usual manner and free-scoring striker Erling Haaland was limited to a single chance.
Still, it did seem as though the visitors were on course to emerge victorious after Julian Alvarez curled home a brilliant free-kick to level Ruben Dias' early own goal.
But, just as Pedro Neto had gone on a right-wing raid before the opener, Nelson Semedo's forward surge inspired a second for Wolves, who ended a run of six straight defeats against City.
It completed a miserable day for former Wolves midfielder Matheus Nunes.
The Portugal international went on strike to secure his £53m move to City last month and the home fans evidently have not forgotten as they jeered him every time he touched the ball before he was substituted at half-time.Reaction to Wolves' victory over Man City and the rest of Saturday's Premier League action.How did you rate Wolves' performance? Have your say hereWhat did you make of Manchester City's display? Send us your views here
Nunes misfires as City stumble
Whilst most observers feel it is a foregone conclusion that City will become the first side in English football history to win four league titles in a row, there are signs to provide reason for optimism amongst their rivals.
City have now gone behind four times in their last five matches and have now lost successive games for the first time since January following their midweek defeat to Newcastle in the EFL Cup.
Although he was in an unaccustomed position alongside football director Txiki Begiristain, there was the familiar sight of Guardiola rubbing his head in frustration at a team that is struggling to find the fluidity they have been so accustomed to producing so easily.
Phil Foden tried his best to spark the visitors into life and Jack Grealish was introduced for the final 10 minutes to try to inspire a late revival.
It was not to be though, with Nunes' performance a clear disappointment as he struggled to impose himself on the contest and failed to reappear for the second half as youngster Oscar Bobb took his place.
There was an acceptance last season from virtually everyone at Wolves that at some point in the not too distant future, Nunes would leave.
But having haemorrhaged talent throughout a tortuous summer, it left a sour taste when the 25-year-old to refused to turn up and train in order to force his transfer to City.
When City's half-time change was announced to the crowd, the home fans reacted with glee, chanting "what a waste of money". When the final whistle sounded, the chant had changed to "Nunes, Nunes, what's the score".All the best Manchester City news and views in one place
More to follow.
How to play
Rate players out of 10 throughout or after the game. The rater will close 30 minutes after the final whistle.
Rating range key1 = Give it up10 = Pure perfection
Squad number1Player nameJosé Sá
Squad number23Player nameKilman
Squad number15Player nameDawson
Squad number24Player nameToti Gomes
Squad number22Player nameNélson Semedo
Squad number8Player nameJoão Gomes
Squad number5Player nameLemina
Squad number3Player nameAït-Nouri
Squad number7Player namePedro Neto
Squad number12Player nameMatheus Cunha
Squad number11Player nameHwang Hee-chan
Squad number2Player nameDoherty
Squad number6Player nameTraoré
Squad number9Player nameFábio Silva
Squad number19Player nameOtto
Squad number31Player nameEderson
Squad number2Player nameWalker
Squad number25Player nameAkanji
Squad number3Player nameRúben Dias
Squad number6Player nameAké
Squad number27Player nameMatheus Nunes
Squad number8Player nameKovacic
Squad number47Player nameFoden
Squad number19Player nameÁlvarez
Squad number11Player nameDoku
Squad number9Player nameHaaland
Squad number4Player namePhillips
Squad number10Player nameGrealish
Squad number52Player nameBobb
Formation 3-4-31SáBooked at 83mins23Kilman15Dawson24Gomes22Nélson Semedo8João GomesSubstituted forTraoréat 67'minutes5LeminaBooked at 39mins3Aït-NouriSubstituted forDohertyat 74'minutes7NetoBooked at 57mins12Matheus CunhaSubstituted forFábio Silvaat 86'minutesBooked at 90mins11Hwang Hee-chanBooked at 24minsSubstituted forOttoat 86'minutes
Formation 4-2-3-131Ederson2WalkerBooked at 17mins25Akanji3Rúben Dias6AkéSubstituted forGrealishat 80'minutes27NunesSubstituted forBobbat 45'minutes8KovacicBooked at 59minsSubstituted forPhillipsat 65'minutes47Foden19ÁlvarezBooked at 63mins11DokuBooked at 82mins9Haaland
Match ends, Wolverhampton Wanderers 2, Manchester City 1.
Second Half ends, Wolverhampton Wanderers 2, Manchester City 1.
Kalvin Phillips (Manchester City) wins a free kick in the defensive half.
Foul by Pedro Neto (Wolverhampton Wanderers).
Foul by Rúben Dias (Manchester City).
Pedro Neto (Wolverhampton Wanderers) wins a free kick in the defensive half.
Attempt saved. Jérémy Doku (Manchester City) left footed shot from outside the box is saved in the bottom right corner. Assisted by Phil Foden with a cross.
Corner, Manchester City. Conceded by Jonny Otto.
Attempt blocked. Kalvin Phillips (Manchester City) left footed shot from the centre of the box is blocked. Assisted by Jack Grealish.
Fábio Silva (Wolverhampton Wanderers) is shown the yellow card.
Manuel Akanji (Manchester City) wins a free kick on the left wing.
Foul by Pedro Neto (Wolverhampton Wanderers).
Foul by Jérémy Doku (Manchester City).
Fábio Silva (Wolverhampton Wanderers) wins a free kick on the left wing.
Offside, Wolverhampton Wanderers. José Sá tries a through ball, but Fábio Silva is caught offside.
Substitution, Wolverhampton Wanderers. Jonny Otto replaces Hwang Hee-Chan.
Substitution, Wolverhampton Wanderers. Fábio Silva replaces Matheus Cunha.
Attempt saved. Kyle Walker (Manchester City) right footed shot from outside the box is saved in the centre of the goal. Assisted by Rúben Dias.
José Sá (Wolverhampton Wanderers) is shown the yellow card.
Jérémy Doku (Manchester City) is shown the yellow card.