Fulham have always specialised in gallant failure and it was no different here. All the pre-match talk surrounded the fitness of Erling Haaland and the Norwegian’s introduction, midway through the second half, proved decisive. Manchester City seemed set to stroll to another straightforward home victory when Julian Alvarez lashed in a lovely pass from Ilkay Gündogan to put the champions ahead, but a moment of madness from Joao Cancelo, who bundled over Harry Wilson in the box and was sent off, gave Marco Silva’s men an opportunity. Andreas Pereira sent Ederson the wrong way from the spot and a tantalising tie remained level until deep into stoppage time when a daft tackle from Antonee Robinson allowed Kevin de Bruyne to tumble. Even the penalty wasn’t convincing, Haaland’s effort going through Bernd Leno’s palms – but it meant that the Whites headed home with nothing.

As impressive as Silva’s side have been on their return to the top flight, they don’t have the resources of their illustrious hosts. When Aleksandar Mitrovic’s ankle wouldn’t allow him to feature at the Etihad, Silva turned to Carlos Vinicius. The Brazilian has barely been used as an understudy: his only start was in a dispiriting defeat at West Ham, whilst City could select Alvarez, an Argentine attacker who rattled in eighteen goals in 26 appearances at River Plate last season. Pep Guardiola did leave Phil Foden on the bench alongside Haaland, but when you have the quality of de Bruyne, vital in pulling the strings once the hosts were down to ten men, your side are threatening from the most mundane of positions.

The Belgian playmaker drew a terrific save from Leno in the seventh minute with the German goalkeeper tipping over after Fulham had failed to close de Bruyne down. City enjoyed almost all of the ball and Fulham’s usually precise passing was going array. Vinicius looked bright in latching onto a long ball and worrying both Cancelo and John Stones but failed to measure the pass for Wilson. City were not so careless in the final third and went in front from their next attack after Gündogan ghosted around Harrison Reed and rolled a ball past Tim Ream, which Alvarez powered past Leno almost without breaking stride.

City looked devastating in attack and appeared as though they could score at will. They did following a sharp Leno stop, but an offside flag correctly came to Fulham’s rescue. What happened next astonished everyone. Vinicius made a nuisance of himself again and poked a ball through the City defence. Suddenly, Wilson was clean through on goal – although Cancelo didn’t need to clumsily bring him down with Ederson coming off his line. The full back was sent off and Fulham had a penalty. No Mitrovic? No problem. Pereira, who is having a superb season, nonchalantly tucked it away and the whole complexion of the contest had changed in an instant.

City still carried the clearer threat, even down to ten. Tim Ream did well to get in the way of Alvarez shot after the forward had sprinted onto a delicious de Bruyne chip and Jack Grealish curled one effort just off target, before seeing a second deflected over. In the three minutes of stoppage time, Leno made a good reaction save from Manuel Akanji. Despite their numerical advantage, the visitors were happy to get to the interval all square.

Fulham arguably didn’t make the most of their opportunity after the break. Silva was slow to introduce substitutes, including Tom Cairney, who might have helped his side take greater care of the ball and the Whites were wasteful when space opened up. Pereira left one pass short of Vinicius, whilst Wilson miscued a shot after being slipped in by Reed. The home crowd were enlivened once Haaland and Foden came off the bench, as were their team. The Norwegian almost made an immediate impact – heading into a de Bruyne delivery – but he strayed fractionally offside.

Silva wasn’t bold – opting to replace the tiring Willian with Kevin Mbabu, and only sending on Luke Harris with a couple of minutes to play. Fulham were still frantically defending, like when Ream somehow found enough energy to keep up with Haaland’s electric pace and block a shot. Harris showed his eye for a pass by producing a beauty that created a crossing opportunity for Mbabu, but when his fellow substitute failed to deliver, the hosts broke down the other end with de Bruyne only just failing to find Haaland with a ball in off his own.

Everyone was checking their watches. Fulham folded in the final minutes. A rash challenge from Robinson saw Darren England point to the spot for the second time and, with clear contact, there was no hope of salvation from VAR. Even Haaland betrayed some nerves as his penalty went right through Leno – and the Etihad erupted in relief more than anything. It felt harsh on Silva’s side, but they were guilty of being cautious rather than cavalier when circumstances swung in their favour. It is still a superb start to Fulham’s return to the top flight, but this defeat will sting for a while.

MANCHESTER CITY (4-3-3): Ederson; Stones, Cancelo, Ake, Akanji; Rodri, Gündogan (Dias 90+7), de Bruyne; Grealish (Foden 64), B. Silva, Álvarez (Haaland 64). Subs (not used): Ortega, Laporte, Lewis, Gomez, Palmer, Mahrez.

BOOKED: B. Silva.

SENT OFF: Cancelo.

GOAL: Álvarez (17), Haaland (90+5).

FULHAM (4-2-3-1): Leno; Tete, A. Robinson, Diop, Ream; Palhinha, Reed; Wilson (James 76), Willian (Mbabu 80), Pereira (Harris 88); Vinicius (Cairney 76). Subs (not used): Rodak, Kurzawa, Duffy, Adarabioyo, Onomah.

BOOKED: Pereira, Reed, Wilson, Tete, A. Robinson.

GOAL: Pereira (pen 28).

REFEREE: Darren England (Doncaster).