### Fixed: `CuroboPolicy` refuses an `action_horizon` outside the shared provider chunk-count domain

`action_horizon` is the slice width `_next_chunk` takes out of the cached trajectory - the same quantity the two lerobot providers accept as `actions_per_step`, for which `chunk_count_error` already exists as the shared domain, so that the same chunk count is not refused by a local checkpoint and accepted by the server serving it. This constructor tested it with a bare `action_horizon < 1`, which admits everything that comparison happens to answer `False` for and lets everything it cannot answer escape as whatever `<` or the following `int()` raised. `True` was honored as a silent horizon of one while `False` was refused - the hole `positive_count_error` documents itself as existing to close, since `bool` is an `int` subclass - and `2.7` was truncated to `2`; in both cases the policy planned a trajectory in full and then served a fraction of it per call, under a successful construction and with nothing reporting it. A numeric string, `None` or a list raised `TypeError`, `inf` raised `OverflowError`, and `nan` raised a `ValueError` naming only the `int()` conversion that read it - so a caller validating its configuration by catching the `ValueError` the class documents caught none of them.

`action_horizon` now shares `chunk_count_error`, making its refusal word-for-word the one the hardware control loop and `run_policy` already give for the same parameter, and the `int()` coercion is removed as dead. The check remains the constructor's first statement, ahead of the planner build that imports cuRobo and allocates on the CUDA device. One narrowing: an integral float such as `16.0` is now refused, which is the convergence rather than a side effect - `lerobot_local` already refuses `actions_per_step=16.0` - and no caller in the tree, the docs or the registry passes one. A structural guard asserts that every policy `__init__` accepting a chunk count routes through the shared domain, and that the scan still finds all three providers so a rename cannot empty it.
