George Saville's 73rd-minute strike proved decisive as Middlesbrough ended Bristol City's unbeaten start to the Championship season with a 1-0 victory at Ashton Gate.
The goal resulted from a nightmare moment for defender Taylor Moore, who allowed Saville to rob him on the edge of the box as City tried to play out from the back.
Saville was left with only goalkeeper Dan Bentley to beat and did so with an assured low left-footed finish.
The result meant a first league defeat for City head coach Dean Holden and rewarded Neil Warnock's visitors for an organised and committed display.
Both defences took the honours in a first half that saw Boro create the clearer chances, while City were often let down by their final pass at the end of some promising build-ups.
The home side were quick off the blocks and Andreas Weimann should have done better when racing onto a third-minute pass from Nahki Wells only to chip tamely wide.
Boro's best opportunities fell to Chuba Akpom, the first coming on five minutes when his close-range shot was deflected wide.
Jamie Paterson shot wide from 20 yards for City before Akpom's cross-shot from the left was tipped over by Bentley.
A better chance fell to Akpom on 29 minutes, but he miskicked with the goal at his mercy from a Saville cross.
Paterson had another effort blocked for a corner, while at the other end Saville and Dael Fry moved in threateningly on a Paddy McNair free-kick only for the ball to fly well wide.
The second half began quietly, but City suffered a blow on 55 minutes when Alfie Mawson, who had excelled at the back, was carried off after stretching to make an important tackle inside the box.
Tomas Kalas returned to the side after injury as replacement. Soon afterwards Wells wasted a decent opening, shooting high over the Boro crossbar from 15 yards.
Fry received the first yellow card of what had been a cleanly fought contest on 67 minutes for a late challenge on Weimann.
Holden responded to his team's lack of goal threat by replacing both strikers on 70 minutes, Famara Diedhiou and Antoine Semenyo taking over from Chris Martin and Wells.
Boro were finding it equally hard to fashion openings until Moore's costly error. The closing stages brought them just one moment of alarm.
Tyreeq Bakinson looked to be through inside the box when challenged from behind by McNair, but referee Tim Robinson ignored City's strident penalty appeal.
Moore left the pitch with head bowed, but his team could have few complaints after failing to force a save from Marcus Bettinelli.
What the managers said...
Bristol City's Dean Holden: "Taylor Moore is a young player who will learn from what happened tonight. We certainly don't want to take risks like that playing out from the back. He has apologised to the group in the dressing room. It was one of many poor decisions we made as a team.
"We put ourselves under pressure by giving the ball away too cheaply against a side looking to get men behind the ball. We need to be better than that, but it has still been a strong start to the season."
Middlesbrough's Neil Warnock: "It was strange not to have anyone banging on the coach windows at me as we drove into the ground. At the end I wanted to go on a lap of honour and give the crowd a wave because it might be my last chance to do that at Ashton Gate. But there was no one there to watch.
"I'll settle for a really strong performance from my team. We got a bit of luck with the goal, but you need that sometimes and I thought we earned it. We have just played two of the top sides in the table and they have managed only a shot or two against us between them. If you had offered me four points before the Reading and Bristol games, I would have snapped your hand off. I thought our wing-backs were excellent and there was a strong spine to the team, which made us very solid."