Washington • President Trump leaned heavily on the stories of American heroes in his State of the Union address Tuesday night because he didn’t have much else to say. From the Coast Guard, the fire departments, the shop floor and many other quarters they came, providing structural support for a flabby speech that was one of the least adventurous and forward-looking efforts of its kind. Without the heroes, there would hardly have been any speech at all.

And while Trump opened his speech by calling on Americans “to set aside our differences, to seek out common ground,” he kept coming back to the most divisive themes of his presidency — from “chain migration” and highlighting the role of immigrants in criminality to his calls for all to stand for the flag. Trump did not so much ask his domestic adversaries to set aside their differences as to abandon their own views. Nothing in this speech will inspire his critics with new hope that Trump is serious about negotiating anything.

Trump bragged, of course, about his tax cuts, the economy, the stock market and slashing regulations. At moments, he even sounded as though he believed in activist government, calling on the country to “invest in job training,” “open great vocational schools” and support “paid family leave.” But there were no specifics, no sense of how budgets, strained by the very tax cuts he extolled, would actually support these objectives. Words without concrete programs are words without deeds.

Similarly, he asked Congress “to produce a bill that generates at least $1.5 trillion for the new infrastructure investment our country so desperately needs.” Notice the squirrely wording — “that generates.” He didn’t say that the plan his administration has been working on would put up only $200 billion of that big number and rely on either state and local governments or private investors to provide the rest.

And as Paul Waldman noted on The Washington Post’s Plum Line blog, the focus on private investment would “naturally privilege projects that can generate a profit for private companies, which probably won’t be the most sorely needed upgrades.” The Trump plan would do little for the hurting parts of the country that supported Trump in 2016. Again, words without deeds.

There was one passage that did suggest a real change that Trump would seek, and it was an alarming idea.

“All Americans deserve accountability and respect. And that’s what we are giving to our wonderful heroes our veterans,” Trump said. “So tonight, I call on Congress to empower every Cabinet secretary with the authority to reward good workers and to remove federal employees who undermine the public trust or fail the American people.”

This sounded like an attack on the entire civil service system. It sounded like a demand by Trump that he and those who work for him have the right to fire federal employees whenever he or they feel like it. Perhaps this idea will come with safeguards, perhaps not. Trump didn’t say.

And the alarm this idea inspired among all who are not sold on Trump reflected the fundamental failure of the address. Trump rose before Congress in the shadow of an investigation into Russian collusion in our elections that he and his allies in Congress are doing all in their power to attack, discredit and obstruct.

This call to broaden Trump’s right to fire brought to mind what the president did to then-FBI Director James Comey and might do to special counsel Robert Mueller. Nothing in this speech transformed the public conversation in a way that lessened the burden of scandal. Nothing suggested any change in Trump’s behavior that might lead him to govern less divisively.

Yes, we cheered the heroes. They remind us of what is good in our country. Alas, their selflessness stands in stark contrast to our politics in the Trump era.

E.J. Dionne