Millwall suffered a second successive home defeat as Coventry City moved to the top of the League One table with a comprehensive win - their first at The Den, old or new, in nearly 60 years.
Following hot on the heels of Tuesday night's Capital One Cup exit at the hands of Barnet, this was not what manager Neil Harris or any one of the 11,000+ Lions fans would have hoped for or expected.
Coventry were slick, quick and superb value for the win as they broke an awayday hoodoo against The Lions going back to Boxing Day 1955.
The game sprung into life with less than three minutes on the clock when Millwall were handed a fantastic opportunity to break the deadlock. Defender Mark Beevers, making his 100th appearance for The Lions, saw his shot spilled by Sky Blues keeper Lee Burge, who then made contact with Lee Gregory as the striker raced onto the loose ball.
For the second successive game Harris' side missed from the penalty spot; Steve Morison hit the bar against Barnet on Tuesday night and on this occasion, Gregory shot low to the keeper's left, with Burge palming his effort away to safety.
Thereafter Coventry, who had been incensed at the penalty, simply slipped into gear and promptly tore The Lions apart with a spell of three goals in 18-minutes.
A sensational strike from Armstrong, who spun on a sixpence and lobbed keeper David Forde from fully 40 yards, started the ball rolling after six minutes.
Coventry doubled their lead on 19 minutes when Ruben Lameiras cut into the area and drove home with a precision finish. With The Lions rocking, Armstrong added his second of the game five minutes later, springing the offside trap and lifting the ball over the stranded Forde.
Gregory had an opportunity to claw a goal back for the hosts from a Martin corner, but his header went over the bar from six yards before the two teams both hit the woodwork before the break. First Lameiras rattled the crossbar with a cross and then a Shaun Williams strike from 25 yards smacked against the outside of the upright.
The introduction of Shane Ferguson at left-back and Ben Thompson for Martin sparked an improvement in the second-half as Millwall tried to redress the balance of a woeful first 45 minutes.
Midfielder Thompson was at the heart of Millwall's best moments and was unlucky not to score on 56 minutes with a low strike that forced a good save from Burge.
Two minutes later Thompson swung over an inviting ball from the right which Morison met first-time, but struck his effort straight into the keeper's hands.
Ed Upson was unlucky with an 18-yarder that took a deflection and looped comfortably for Burge to collect and then tried his luck from slightly further out, this time a free-kick, but curled over the bar.
At this stage Millwall were creating the clearer chances and continued to do so with both Gregory and Morison thwarted in quick succession by the increasingly busy Burge.
However Coventry remained a threat on the counter and it was so nearly 4-0 with 12 minutes remaining; sub Jacob Murphy cut inside and slipped the ball through to Armstrong, who took a touch but saw his angled drive parried by Forde for a corner.
The visitors didn't have to wait long to add to their tally and just two minutes later O'Brien played a neat one-two with Murphy before firing home.
Ironically Millwall's two best chances of the second-half followed in the final 10 minutes, by when the result was already out of reach.
Fred Onyedinma skipped past two defenders before dinking the ball in to Gregory, whose header flashed wide of the post.
The afternoon was best summed up for Millwall in the dying moments when Morison turned his marker with supreme skill and laid the ball into Gregory's path with the goal begging. Unfortunately, the striker was unable to make a clean connection and the ball ended up spinning away from the goal.
Forde, Cummings, Beevers (Ferguson, 46mins), Craig, Webster, Martin (Thompson, 46mins), Upson (Cowan-Hall, 77mins), Williams, Gregory, Morison, Onyedinma. Subs not used: Archer, Nelson, Powell, Marquis.
Beevers (12mins), Williams (18mins), Onyedinma (29mins), Thompson (53mins), Morison (85mins)
Burge, Willis, Stokes, Vincelot, Johnson, Fleck, Lameiras (Tudgay, 72mins), Armstrong (Thomas, 83mins), Maddison (Murphy, 63mins), O'Brien, Ricketts. Subs not used: Morris, Phillips, Martin, Charles-Cook.
Maddison (12mins), Johnson (65mins)
Armstrong (6, 24mins), Lameiras (19mins), O'Brien (80mins)
11,197 (away 1,286)