House Republicans finally passed a bill last week to repeal and replace ObamaCare. But President Trump's Rose Garden celebration was premature.

Before the bill can become law, Republicans must still clear two almost insurmountable hurdles: First, Senate Majority Leader Mitch McConnell must repeat the House's balancing act, this time on a much thinner tightrope. Second, Congress' two chambers must ultimately agree on the same bill. And any compromise a majority of Republican senators can agree on is likely to splinter the House all over again.

TrumpCare is basically doomed.

First off, the split in the House between GOP moderates and hard-core right-wingers that sunk the first version of TrumpCare, and almost sunk the second, will appear again in the Senate. Only this time, the divide will be even deeper. On one side are ideologues like Sen. Ted Cruz (R-Texas) and Sen. Mike Lee (R-Utah), out to kill ObamaCare by hook or by crook. On the other side are moderate senators like Susan Collins (R-Maine), Lisa Murkowski (R-Alaska), and Bill Cassidy (R-La.), all painfully aware of the poisonous politics of repealing ObamaCare without an adequate replacement.

The House GOP eventually solved its dilemma by going all in on the far-right Freedom Caucus. To TrumpCare's already draconian spending cuts, they added a provision allowing states to opt out of regulations that prevent insurers from charging more for pre-existing conditions, and that require them to cover a minimum package of benefits. The bet was that, under pressure to fulfill the Republicans' multi-year promise to kill ObamaCare, the moderates would ultimately knuckle under.

It worked, but just barely: The bill squeaked by in the House on a 217-to-213 vote. No less than 20 Republicans — not to mention every last Democrat — voted "no."

The Republicans' margin for error in the upper chamber is even slimmer: With 52 seats, they can afford to lose all of two votes, with Vice President Mike Pence as the tie breaker. Any more defections, and TrumpCare is toast. And four Republican senators are already on record saying they can't support the House bill.

The shape of disagreement in the Senate will also likely be very different.

For instance, a proposal by Collins and Cassidy would actually allow states to opt out of ObamaCare's basic regulatory framework, but still keep all of ObamaCare's spending. In the House version of TrumpCare, the massive spending cuts are not optional. In particular, the bill would decimate both the funding for pre-ObamaCare Medicaid and the program's expansion under the Democrats' reform, by $880 million over a decade.

The political, as well as moral, perils of the House plan are pretty clear. It was state governments that decided whether or not to go with the Medicaid expansion, and it's state populations — not congressional districts — that senators represent. No less than 20 Senate Republicans hail from states that took advantage of the expansion. And the Congressional Budget Office (CBO) projected five million Americans would lose Medicaid coverage in 2018, and 14 million by 2026, under the original version of TrumpCare.

The House passed TrumpCare 2.0 before it could be scored by the CBO. But the agency's overall projections for the first version were even more brutal: Fourteen million people in total would lose coverage by 2018, rising to 24 million by 2026. The new score will be coming in the next few weeks, and will almost certainly be even worse. That will just add to the Senate moderates' qualms.

Now, McConnell is certainly aware of this problem: The 13-person team he's put together to craft the Senate's bill does not include a single moderate. But being a senator is very different from being a representative in the House. They're elected every six years instead of every two, and the procedural rules of their chamber give each individual senator considerable power. As politicians, they're more insulated from the political zeitgeist of the movement. They're far more likely to see themselves as individual power brokers, and to relish and defend that role. The "take one for the team" attitude that prevailed in the House is unlikely to replicate itself in Congress' upper chamber.

So the most likely outcome is that the Senate scales back the Medicaid cuts. In which case, the House ideologues could jump ship. Ryan himself is upfront that gutting Medicaid is a longstanding dream of the conservative movement. Nor does the Freedom Caucus sound understanding: "They better not change it one iota," Rep. David Brat (R-Va.) recently threatened. "If they change it, you're not going to have 218 [votes]."

Meanwhile, the House moderates should not be written off. They voted for TrumpCare knowing they weren't voting to change policy, but merely to let the Senate deal with the issue for a while. Rep. Tom Cole (R-Okla.) explicitly made this case for moderates to vote yes on the bill. If the Senate forces those representatives to finally take a vote with actual policy consequences, they may not be so accommodating.

The White House is reportedly giving McConnell wide leeway to craft the bill, confident he can bring the warring factions together. But while McConnell is by all accounts a brilliant legislative tactician, he can't repeal the basic laws of mathematics or logic. There will never be an ObamaCare replacement that both does and does not cut Medicaid, for instance.

ObamaCare's defenders certainly should not let down the guard. But because of the immutable laws of politics, TrumpCare is simply unlikely to become law.