Substitute Nahki Wells powered home a second-half penalty as Bristol City extended their unbeaten run to 12 games with a 1-0 Sky Bet Championship victory over Hull at Ashton Gate.
The striker sent goalkeeper Karl Darlow the wrong way with a fierce 70th-minute spot-kick after Anis Mehmeti’s cross from the left had struck a defender’s arm.
It looked a harsh decision, but the hosts deserved their win for edging a contest packed with commitment from both teams.
Robins manager Nigel Pearson made one change as his team looked to build on their impressive unbeaten sequence, Tomas Kalas replacing the injured Rob Atkinson, while Hull gave a debut to Darlow, on loan from Newcastle.
The hosts, wearing their new home shirt, red with double white pinstripes, made a fast start and Mark Sykes had a low shot saved by Darlow’s outstretched leg in the opening minute.
A goal-bound volley from George Tanner was blocked for a corner by the Hull defence before the Tigers had their first shot on seven minutes, Xavier Simons’ effort from distance going wide.
Darlow had to go full length to keep out Sam Bell’s low drive in the 12th minute. Then Mehmeti went down inside the box claiming a Robins penalty, but referee Sam Barrott was well placed and waved play on.
Oscar Estupinan might have fired Hull in front in the 26th minute, but he dragged his shot wide having broken through the hosts’ back line.
Cyrus Christie had a shot deflected for a corner but, at the other end, Hull were having to defend for their lives from a succession of dangerous crosses.
Mehmeti had a shot blocked in the final meaningful action of an open first half, which the Robins edged without finding a cutting edge.
Hull boss Liam Rosenior, back at the ground where he made his name as a player, changed things at the break, sending on Ryan Longman for Ozan Tufan.
Sykes sent a curling shot wide as the hosts looked to start the second half on the front foot. Again the home side were getting behind their opponents at will without fashioning a telling cross.
Rosenior responded with another change in the 55th minute, replacing Malcolm Ebiowei with Benjamin Tetteh. His side were showing plenty of defensive commitment, throwing bodies in the way of shots.
After Wells’ penalty had broken the deadlock, Hull almost levelled when Tetteh’s header from a 74th-minute corner hit a post before the ball was scrambled clear.
Bristol City goalkeeper Max O’Leary saved with his legs from Ryan Longman, but Pearson’s men controlled the closing stages to boost confidence ahead of Tuesday night’s FA Cup fifth-round home clash with Manchester City.