Is anyone surprised that Donald Trump’s first 100 days in office have confirmed him to be a dangerous, reckless bigot; a kleptocrat who puts the financial interests of his family first, closely followed by the wealth of his fellow billionaires; a serial liar whose view of the wider world hovers between frightening and incoherent?

We surely can claim no shock. The warning signs were all there, the alarm amply sounded in advance. There have, in fact, been only two surprises about the infant Trump presidency. But one of those is unexpectedly heartening.

Start, though, with what three months of President Trump have made plain. Some thought the bigotry was a campaign pose that would fall away once Trump had breathed in the sobering vapours of the Oval Office. In fact he took all of seven days to issue a travel ban that would shut out newcomers from seven mainly Muslim countries – supposedly a counter-terrorism measure, even though the number of terrorist incidents in the US caused by migrants from those countries is precisely zero.

Look at the white nationalist wing of Trump’s team. Steve Bannon is off the national security council, but remains a key influence; his attorney general, Jeff Sessions, was deemed too racist to win senate confirmation as a federal judge in the 1980s; and aide Sebastian Gorka was, back in Hungary, a vocal supporter of a racist, antisemitic militia that was eventually banned.

In that context, it’s hardly a surprise that Trump’s cabinet is the least diverse in decades. Indeed, among the enduring images of these 100 days are photos comprised entirely of besuited men signing away the reproductive or healthcare rights of women.

As for the recklessness, that too has been a constant motif. Type “Trump threatens war with…” and Google helpfully offers to complete the sentence with any one of Mexico, China, Iran or North Korea. Yesterday, Trump warned of a “major, major conflict” with Pyongyang. That came in an interview, but sometimes it’s a tweet or just an unhinged phone call. He had been president 10 days when he told his Mexican counterpart he would send in US troops to deal with “bad hombres down there”.

Pity the analysts asked to discern a Trump foreign policy in all this mess. One minute he’s an isolationist, announcing that Nato is obsolete. The next he admits that he didn’t really know much about Nato and it is “no longer obsolete”. He fires cruise missiles at Syria, which perhaps signals that he’s now a hawkish interventionist. But then he’s on the sofa with Xi Jinping, cosying up to China like a foreign policy realist, announcing that Beijing is not, despite everything he said in the campaign, a currency manipulator after all.

The truth is, there is no Trump doctrine because a doctrine would require a series of connected thoughts demanding an attention span of more than a few seconds. And that is beyond the current US president. Instead, there are just a couple of instincts. One is a preference for autocrats over democrats: note the warm embrace he gave Egypt’s ruler soon after refusing to shake the hand of Angela Merkel. The second, related, impulse is to favour anything likely to enrich him or his family. So of course he welcomed Recep Tayyip Erdoğan’s power-grab in Turkey: Erdoğan had supported the construction of Trump Towers in Istanbul.

Which bring us to crony corruption so egregious that scholars believe Trump has already amassed ample grounds for impeachment, though the House of Representatives is too blinded by partisan loyalty to pursue it. Simply by doubling the membership fees at his Florida resort, Mar-a-Lago, Trump has overtly profiteered from the presidency.

‘Nobody knew healthcare could be so complicated,' Trump said, when in fact everyone but him knew that

He has not divested himself of his business interests; there is no blind trust. The nepotism of appointing his daughter and son-in-law to White House posts has made the US resemble a tinpot kleptocracy, with the dictator surrounded by adult children lining their pockets with gold. None of this is hidden: note that on the day the Trumps met Xi, the Chinese granted trademark rights to the line of handbags and jewellery peddled by Ivanka.

All of this has happened at remarkable speed. We have, perhaps, become inured to the lies: Trump has uttered more than 450 documented falsehoods since swearing the oath. But the abuse of power, the violation of democratic norms, remain astonishing. Not only does he refuse to release his tax returns, Trump has now made the White House visitor logs secret – even though these records are often the only way of knowing which lobbyists are getting access to power. Trump’s attack on the judiciary continues apace: in recent days, he has threatened to break up the ninth circuit court for daring to rule against him.

All of this is disturbing, but not strictly a surprise. What takes the breath away is the incompetence. Trump promised to surround himself with “the best people, the best” and it was reasonable to suppose that a billionaire tycoon would have some inkling of how to run a big operation. But he has been spectacularly useless.

His sole concrete achievement in 100 days has been the appointment of a supreme court judge. All the rest is failure, whether it’s a healthcare bill rejected by his fellow Republicans; hundreds of posts still unfilled in the federal bureaucracy, declaring that an “armada” was heading towards North Korea when it was in fact miles away and sailing in the opposite direction, or a national security adviser who had to be sacked because he was, literally, a foreign agent.

‘Nobody knew healthcare could be so complicated,” Trump said, when in fact everyone but him knew that. He’s made similar remarks about Nato and Korea, needing to be educated on the most elementary facts, even if that means America’s adversaries playing tutor. Pathetically, he now says of the job he won in November that he thought it would be “easier.”

But what of that other surprise, the one to give us cheer? It’s this: opposition can work. We’ve seen that Trump is weak, backing down when confronted – most recently by Canada and Mexico over his threat to leave Nafta. But public protest works too. The combination of courts and crowds, gathering instantly at airports across the US, halted the travel ban. Similarly, it was when citizens turned up at congressional Republicans’ town hall meetings, threatening to punish any politician who stripped away their Obamacare, that Trump lost his healthcare bill – the one that would have deprived 24m Americans of healthcare and funnelled a $600bn tax cut to the rich.

The satirists and journalists have played their part too, needling Trump and getting under his skin as well as shedding light on his spell in power. His devotees remain loyal, but thanks to those who keep insisting on telling the truth, most Americans now see Trump for what he is – which is why his poll numbers are so low.

Donald Trump is as bad as we feared: delusional, dangerous, dishonest. But there is another lesson from these 100 days. Even when faced with the greatest menace, resistance is not futile.