<think>
Okay, I need to implement the find_free_run function based on the given problem description. Let me start by understanding the requirements.

First, the function find_free_run takes the bitmap words, a capacity (bits), and a length. It needs to return the smallest start of a free run of the given length that is entirely below the capacity. If no such run exists, return -1. Also, there are several validation checks that need to be done.

Looking at the existing code, the _check_words function validates that all words are integers between 0 and 4294967295. The bit_at and occupy_run functions already handle some of the validations. The find_free_run function needs to perform its own validations.

The problem says that the word list must hold exactly ceil(capacity/32) words. So first, I need to check that the number of words in the input matches this. For example, if capacity is 100, then 100/32 is 3.125, so ceil is 4 words. So the words list must have exactly that number of words. If not, it's an error.

Also, the capacity must be a positive integer. So if bits is not a positive integer, that's an error. Additionally, the function must check that the capacity is such that the words list is correct. For example, if the words list has 4 words, then capacity must be 4*32 - 1, since the maximum allowed is 4*32 -1. Wait, the problem says that a set bit at or beyond the capacity is an error. So the capacity is the maximum block number allowed. So the maximum block index is capacity - 1. So the words list must be such that the total number of bits is exactly ceil(capacity / 32). So the capacity must be such that the number of words is exactly ceil(capacity / 32). So for example, if capacity is 32, then ceil(32/32) is 1, so words must have 1 word. If capacity is 33, then ceil(33/32) is 2, so words must have 2 words. So the first step is to check that the number of words is correct.

So, in the find_free_run function, first, I need to validate that the capacity is a positive integer. Then, check that the number of words is exactly ceil(capacity / 32). Also, check that the words list is valid (each word is in the correct range). Also, check that the capacity is such that the maximum block index is capacity - 1. So, for example, if the words list has 4 words, then the maximum block index is 4*32 -1. So capacity must be 4*32, but since the capacity is the maximum allowed, the capacity must be 4*32. Wait, the problem says that the word list must hold exactly ceil(capacity/32) words. So the capacity is such that the number of words is ceil(capacity / 32). So for example, if capacity is 32, then ceil(32/32) is 1, so words must have 1 word. If capacity is 33, then ceil(33/32) is 2, so words must have 2 words. So the capacity is the maximum block number allowed. So the maximum block index is capacity - 1. So the words list must be such that the total number of bits is exactly capacity. Wait, no. The words list is such that the total number