The WIP branch at https://github.com/tlyu/tor/tree/ticket30007 now has a Coccinelle script that I ran to migrate existing code to using the new abstractions. It's almost ready to review. Once Nick rebases the #30091 (moved) branch I based it on, I'll probably make a WIP pull request to check Coveralls.
There are a few places that still explicitly use connection_write_str_to_buf() and connection_buf_add() to send replies to the control port, but they're somewhat more difficult to change. I'm tempted to defer them to a later ticket.
In particular, these could benefit from additional refactoring that includes helper functions that collect a list of strings (or key-value pairs, etc.) to write and automatically takes care of the 250-some_text vs 250 some_text, etc. distinction.
FWIW, I am happy to merge_ready this once the control-cmd branch is merge-readied. I want to do a final fine-grained review, but the broad strokes of this branch look great.
I noticed it needs a changes file and a WIP notation deleted from a commit message. I also should rebase it after #30091 (moved) is merged and verify the Coccinelle output again.