Russians across the country voted this weekend, but everyone was watching city council elections in Moscow.

That’s because this summer, tens of thousands of pro-democracy protesters took to Moscow’s streets, demanding that the city council election be free and fair after election officials barred opposition candidates in July from running for the 45 seats open on the city council. That decision turned a sleepy municipal election into a huge political controversy that intensified amid police crackdowns against demonstrators and opposition figures.

Election officials didn’t reverse their decision, and the elections went ahead as planned on September 8.

But the results were pretty interesting: The ruling United Russia party, which supports Russian President Vladimir Putin, barely clung to its majority, losing about 13 seats in the city council (from the current 38 down to just 25).

Opposition parties, on the other hand, did quite well, winning 20 seats. They included the Communist Party (13 seats), the A Just Russia party (3 seats), and the liberal Yabloko party (4 seats).

There’s a catch, though: These aren’t the “real” opposition parties in Russia.

With the exception of the Yabloko party members, the opposition candidates who won are part of Russia’s “systemic opposition.” These are parties that are more or less loyal to the Kremlin and are sanctioned by the government to operate as “opposition” parties and stand for elections. In other words, they’re mostly a sham meant to provide a veneer of democracy on an undemocratic system.

But some of the real opposition figures who were disqualified from running are still claiming victory. Alexei Navalny, a prominent opposition figure who was disqualified from running against Putin in 2018, deployed a “Smart Voting” strategy, basically asking voters in the Moscow election to cast ballots for anyone who might be able to defeat a pro-government candidate.

That helped elevate the Communist Party and others that aren’t natural allies for the pro-democracy opposition, but also drew votes away from the more explicitly pro-Putin and United Russia candidates.

“We can say clearly that in Moscow this result is a triumph for Smart Voting,” Navalny said, as the results were released, according to Politico.

Just how big a triumph, though, is debatable. Turnout was low in the city of about 12 million. Just a little more than 20 percent of Moscow voters turned up at the polls, about the same percentage as in the last Moscow city council election in September 2014.

And beyond Moscow, Putin’s United Russia party still dominated in regional elections that were also held over the weekend. All 16 pro-Kremlin governors were reelected, including the governor of St. Petersburg, a Putin ally who has a reputation for being both incompetent and corrupt.

And while there were plenty of allegations of fraud, including ballot stuffing, those complaints are likely to go unchallenged.

Putin spokesperson Dmitry Peskov said the vote was “very successful for United Russia” and that the party has “demonstrated its political leadership.”

Putin’s hold on power hasn’t been directly challenged this time around. But the real opposition’s organization — and attempt to undermine Putin — can still be counted as a small victory. Even if it’s an imperfect one.

The Moscow elections may be a victory for the opposition, but that victory comes in a pretty depressing context

All 45 seats in the Moscow city council were up for reelection on September 8. The legislative body was controlled by the pro-Kremlin ruling United Russia party.

But Putin and United Russia have been slipping in popularity as more Russians become disillusioned with the state of their economy, including rising inequality and falling incomes. Declining oil prices and sanctions have squeezed the Kremlin, and the government had to push through unpopular measures last year, including increasing the retirement age.

So the Moscow United Russia candidates came up with a plan to run as independents in the city council instead.

A bunch of other candidates wanted to run as legit independents. To do so, they had to meet some pretty onerous requirements, specifically garnering 5,000 signatures each from voters.

But officials on Moscow’s electoral commission invalidated many of the signatures for these opposition candidates, claiming they were faked or had incorrect details; some opposition leaders accused election officials of altering the signatures themselves.

About 30 opposition candidates were initially disqualified from running, and many just happened to be outspoken critics of the Kremlin. None of the United Russia-candidates-turned-independents were disqualified, and critics claimed they didn’t even bother to actually collect signatures or that their applications were barely verified by election officials.

This decision to bar the true opposition from running sparked weeks of protests, including some of the largest Russia has seen in years. Opposition leaders were arrested, as were about 2,500 protesters, some of whom face harsh penalties for their participation.

Navalny and many of his supporters — once it was clear they definitely weren’t going to get on the ballot — deployed this “smart voting” strategy to deny outwardly pro-Putin candidates as many seats as possible.

The strategy seems to have worked, somewhat. Though the pro-government candidates still retain control of the Moscow city council, more opposition candidates will now join them.

But this is less impressive when, as Maksym Eristavi, a senior fellow at the Atlantic Council in Prague, told me, you remind yourself that there is no such thing as free and fair elections in Russia.

The opposition that won seats in the city council isn’t the real opposition — they may have the title, but Eristavi likened them to “window dressing.” The appearance of these parties gives the “impression that there is competition.”

And as experts told me back in July, the Russian government was never going to let these Moscow elections be seriously contested. It’s Russia’s most populous city, with more than 12 million residents, so Putin’s regime is going to be particularly attuned to what’s going on there.

“The authorities made a calculation back in the summer: that it was better to keep the actual opposition candidates — the people associated with Navalny — off the ballot and take the protests over the summer, than it would be to steal the elections in September and face protests over that,” Brian Taylor, a professor at Syracuse University and author of The Code of Putinism, told me. “And they may have calculated right on this.”

In other words, the Russian government may have weathered the worst of the protests in the summer, but it still got the outcome it desired, which was a Moscow city council that wouldn’t likely cause much trouble. (The Moscow city council doesn’t have a ton of power, but they could certainly probe corruption and look into things that might make the Kremlin a little nervous.)

Then again, there’s reason to have a little optimism. The opposition did organize, helped sustain protests, and may have at least rattled the United Russia party this weekend.

“There’s no way they can be allowed to win elections,” Eristev said of the pro-democracy opposition. “And they all understand that. So for them, it’s more making a stance for the larger Russian public.”

Taylor told me the opposition still needs to expand its reach beyond Moscow and to give Russian voters a reason to support it that isn’t just about democracy or contested elections: Opposition candidates need to show how Putin’s corrupt system plays into the economic issues that a broader set of Russians are getting nervous about. It’s too soon to say, but if the pro-democracy opposition can build on that, the Moscow elections may be the first step.