Thanks jrp, the relationship between everything makes a bit more sense now.
Do a search for quality of Pure Data filter objects. Many discussions there, since many years - the result of which in brief is: If you understand the math then use rzero etc instead of hip, lop, bp - however we can't use them as dynamically controllable objects with the OWL as long as control inputs aren't enabled
This is where I'm confused - I don't think my use case has any control connections to [czero~], yet it still fails to compile saying "[czero~] accepts only signal input. Arguments and control connections are ignored".
Thats part of rjlib's e_beequad.pd, which is like [biquad~] except with interpolation. I mean I could write a little interpolator that uses 2 [biquad~]s and crossfades between them on param change, which isnt quite the same thing but would do in my case.
My apprehension now is that writing complex patches for puredata is a bit of a minefield, and I kind of don't want to invest time into building patches when at any moment I might include something that doesn't compile, but also the fixes for the broken compilation have no clear owner or way forward without personally diving into the details. If I need to learn how a compiler works, to help fix multiple bugs, to compile a patch I wrote, to get an effect I wanted, to write a song... that's a few too many layers.
Anyway, I'm going to look into Faust in the mean time. Looks promising, it seems to have a lot of premade audio related modules, an online playground, and most importantly there are heaps of examples, which was my main draw to puredata. So far its been a bit too difficult to get my LFO > resonant low pass filter patch working with puredata.
Puredata still seems fine for simple things. I've been using my voltage controlled tremolo patch for ages now, no issues.