Every year in March or April I try to set some objective benchmarks for Labour’s performance in the May elections so that I can then review the results against them after the elections.

Here is what I wrote in March.

It must have been good because Corbynite former MP Chris Williamson told me on Twitter it was “a good balanced piece”.

Here is how we did on the various indicators:

The London Mayor result was obviously a stunning and very welcome victory, cementing London’s transformation from an impediment to Labour victory back in the 1980s when London Labour’s leftwing reputation caused against-the-tide seat losses, to one of Labour’s best regions, thanks to superb grassroots organisation, more mainstream politics and massive demographic change as London has become a more ethnically diverse city. Sadiq Khan is promoting a narrative that he won because he had a different strategy to Corbyn, going for a broad appeal to swing voters, so the reasons for victory will be contested between different wings of the party.

In the London Assembly vote Labour achieved the goal I had suggested by matching its 2012 highest ever performance by holding 12 seats. A stunning constituency win for third-time candidate Leonie Cooper in previously Tory Merton & Wandsworth (which must bode well for the Tooting by-election caused by Sadiq leaving the Commons) was offset by the loss of a top-up list seat because Labour’s overall list vote across London was actually down by 1% compared to 2012. Ivana Bartoletti missed out on a second constituency gain in Havering & Redbridge by only 1438 votes, almost certainly because Ken Livingstone’s behaviour the week before the election would have alienated the sizeable Jewish Community in Ilford.

In the Welsh Assembly Labour missed the target of holding all 30 seats because it lost one constituency seat to Plaid Cymru – Rhondda, gained by Plaid’s leader, which has historically been one of the most Labour areas in the UK.

In the Scottish Parliament I set the bar very low – not coming third behind the Tories in one out of seats or vote share. Sadly we crashed well below that, finishing 7 seats overall and 3.8% on the list vote behind the Tories, and losing a total of 13 seats despite the softening impact of the proportional top-up list system. Scottish Labour’s attempt to outflank the SNP to the left by running on a more Corbynite platform than UK Labour (scrapping Trident, tax rises and anti-austerity policies) was a dismal failure, which does not bode well given the perception that Scotland is the most culturally leftwing part of the UK. One glimmer of consolation is that Labour held onto three first-past-the-post constituency seats, two in pro-union Lothian and Dumbarton, where Jackie Baillie appealed to a local electorate economically dependent on the basing of the Trident submarine fleet at Faslane and its armaments depot at Coulport.

For the English council elections there were many excellent defensive victories and some seat gains in university towns where the Corbyn factor has been popular with a left-intellectual demographic, enabling the Green vote to be squeezed, but the overall pattern was anaemic, going backwards from Ed Miliband’s results (which had not been enough to deliver a General Election win) rather than building momentum for a 2020 win.

Labour did well to hold the southern councils I had highlighted as important defensive battles: Exeter, Southampton, Reading, Harlow, and Norwich.

However in the three southern councils we had held in 2012 which I suggested we might be able to gain back from No Overall Control we fell back: in Great Yarmouth to third place behind UKIP, losing three seats; in Plymouth losing one seat to the Tories and in Thurrock losing four seats to UKIP and falling to third place. These are all places we must win in a General Election.

Other key defensive councils I named were Carlisle, Rossendale, Crawley, Cambridge, Derby, Lincoln, Dudley and Cannock Chase. We lost Dudley to No Overall Control – an area that includes all or part of four parliamentary marginal seats. We held the others, making gains in Crawley and Rossendale but lost one seat to an independent in Carlisle, three seats to the Tories and UKIP in Derby, and a seat to the Greens in Cannock Chase.

Of the councils named above where we lost seats, both Plymouth and Derby are economically dependent on the Trident programme, as is Cumbria which we failed to take in the Police Commissioner elections.

We did not succeed in taking from No Overall Control the two Midlands councils I had suggested: Newcastle-Under-Lyme and Walsall, though a single gained seat in Walsall could mean Labour can now form a coalition administration.

However, we gained Bristol (both the Mayor and majority control of the council), which had not been on most people’s radar, ending a long period where the city had underperformed for Labour.

In Tamworth, a constituency we need to take in a General Election, we lost three seats. In Nuneaton, famous as the first marginal to declare in 2015, we also lost three seats.

In Bury, which has two parliamentary marginals and a large Jewish Community, the Livingstone furore cost Labour two seats, with Labour Councillor Alan Quinn saying “It’s down to one person, and that’s Ken Livingstone. He has caused grotesque offence to the Jewish population in Prestwich with his absolutely awful comments. Our councillors put their hearts and souls into representing the area and there really is no place in the Labour Party for bigots like Ken Livingstone.”

On national vote share, Labour was estimated by the BBC to have got 31%. That’s a shocking 8% fall since these seats were last contested in 2012, itself not sufficient to lead to a Labour win in the last General Election. It’s in the same zone as our 2013, 2014 and 2015 results, even though UKIP is now less of a factor than it was then. We did however come in 1% of the Tories as their performance was equally bad. In contrast when Tony Blair fought this round of elections in 1996 he got 43% of the vote.

I calculate that our total number of councillors is now 6859 – it peaked in this cycle at 7098 in 2014, the all time high being 10929 in 1996. We would need about 8000 councillors to have more than the Tories and be on course to win a General Election.

We lost 16 councillors net. This is the only time other than 1982 (Falklands War) and 1985 (Miners’ Strike) that we have had net losses of councillors in opposition in a non-General Election year.

The loss of Dudley but gaining of Bristol means that the number of councils we control stays the same at 118. The last time we controlled more councils than the Tories was 2002 when we controlled 136.

On Police and Crime Commissioners the increased turnout in urban areas which had council elections on the same day and in Wales meant that Labour made net gains but the Tories also made gains from Independents. Labour gained Cheshire, Humberside, Gwent and Leicestershire but lost Bedfordshire to the Tories. We failed to take a number of PCCs that had been very close in 2012, such as Staffordshire, Suffolk, Dyfed-Powys and Cumbria. We therefore failed to overtake the Tories in number of PCCs, the totals now being Conservatives 20 (+4), Labour 15 (+3), Independents 3 (-9), Plaid Cymru 2 (+2). Labour’s malaise in the South is illustrated by us coming third behind the Tories and UKIP in Kent, a county where we used to have 8 MPs, and in Essex where we used to have 6.

Overall then certainly not a disaster except in Scotland, but we fought these elections defensively rather than seeking to make progress in or appeal to the areas we need to win in a General Election, so we ended up with results that were mediocre outside big cities and university towns, and do not even position us to win in 2020 as well as the pre-2015 elections did for that General Election.