The OP is using
clean as a language figure. He attacks the idea of
clean code but not as the hygiene of the writing but as in removing what he thought to be
unnecessary repetitiveness only to later come to the conclusion that it was adequate yet somehow repetitive.
Why repetition is the opposite of cleaneness in the first place?
What he calls here clean code (and dirty code) is modelling that piece of software with or without repetition and not legibility (which would be a more reasonable opposite concept of "clean code").
He reflects on one thing right tho, the idea that he jumped into abstractions too soon, hence he refactored removing repetitions but injecting a model that was inadequately modelling what was needed in the project in the first place. And worst, he did that without discussing design in advance with any colleague first (that was the biggest mistake IMHO) loosing time and efforts for all involved parts.
So the real underlying issue was that code repetition blinded him of design priorities. Nothing to do with the ability to do abstractions and write clean code on top those abstractions. If you do clean code in the wrong abstractions cleanness (or its opposite) will be irrelevant.
But a huge problem is that he again (with his article itself), jumps too soon into the wrong conclusions: attacking the skill to do abstractions and the skill to write clean code. Readers will be induced to confuse the real thing for the language figures he is forcing with that text.
The skill of imagining good abstractions for general concepts and writting well are things that go way beyond writing software code (all professions needs these), hence attacking them makes no sense at all and a successful attack on them would only promote some degree of general confusion (including areas beyond those directly affecting the professional career).
Back to the anecdote, what would have been good?
1. Prioritize where you want the flexibility and power of the design first and care about luxury details like "code repetition" later.
2. Discuss with colleagues in advance (specially those who will review your merge requests) to agree on what's to be done and what's going to change.
3. Actually implement the changes and open MR.
PS: in favor of the OP, he was generous in sharing his experience so others can learn from it.