@nikwarke, starting a new thread here for https://clojurians.slack.com/archives/C013Y4VG20J/p1728778973225059?thread_ts=1728742333.237249&cid=C013Y4VG20J (will add more comments in a reply shortly)
This might be a good question for #reitit, though the problem might reach beyond reitit--Biff uses a couple different middlewares (ring.middleware.params, muuntaja) for setting the :params key on incoming requests. Maybe the middleware needs to be set up in some different way.
The ideal would probably be to set up a minimal example without biff, e.g. start a new project with just reitit + jetty + malli, and perhaps the middleware mentioned above, and test it with a curl command. Then someone from #reitit could hopefully tell you fairly easily what changes you'd need to make for it to work. Though that might be a decent bit of work; you could also just ask e.g. "is reitit's parameter coercion supposed to work with a form param like a[][quantity], and if so, am I supposed to have some particular middleware in place to do the parameter parsing?"
I haven't done much stuff with nested form params myself unfortunately, so I don't have any ideas off the top of my head. If it turns out that a different middleware stack is needed though, I'd be happy to tweak Biff's current default
Thank you @foo for giving detailed steps. 🙏🏼 I'll post a question though I plan to keep it low priority (for the children params, I'm going ahead without coercion in my app for now) I'll share if something solves this use case.