How do I limit the temperature setpoint on a thermostat?

This makes no sense. You’re creating a thermostat entity using your thermostat entity. In the end of the day, it will be the same thing. And if the knob limits it, why do you even care? This is the way you’d limit your range, to the user it would make no difference.

Are you sure? The generic thermostat documentation tells me the heater needs to be a toggle device, and explains that HA will decide to turn it on if setpoint smaller than current temp, and vice versa. I am not sure how I would configure this component with my knobs that take a setpoint as input instead of a on/off.
Are you suggesting I make a dummy switch that sends “setpoint 28 degrees” when turned on, and “setpoint 8 degrees” when turned off, and use that as the heater in the generic thermostat?

Furthermore, the knob doesn’t “limit it”, as it will simply ignore a “setpoint 35” command send by HA, instead of interpreting that as “setpoint 28” which is the max for the knob.

The settings are coming from your hardware. So your hardware through zwave is giving those values. This is why it’s not implemented for zwave. There’s no reason to implement it if the hardware reports the correct values.

That is not what I am interpretting from the config, below is what is in my (unaltered) zwave config xml, you can see that the knob correctly reports min/max values. My issue is that home assistant seems to ignore these and creates a thermostat with a range of 7-35, and pulling the thermostat up to e.g. 32 doesn’t do anything as the knob ignores the command.

<CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" innif="true" base="0">
<Value type="decimal" genre="user" instance="1" index="1" label="Heat" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="8" max="28" value="10.0" />

That’s about the best you can do seeing that you’re unwilling to use the tools at hand that limit it in the backend.

I am not unwilling, I just don’t see how. What you are saying sounds logical, but I don’t seem to understand how to put that to action as the documentation seems to contradict parts of your statements.
I appreciate your help, and would love for you to explain in a bit more detail.