<think>
Okay, I need to implement the stall_turns function. Let's see the problem statement again. The market stall serves customers in order, and each turn, the stall can give at most a fixed number of items. Each customer takes turns as needed if they need more than the limit. A customer with zero items takes no turn. The function should return the total number of turns needed.

First, I need to think about how to model this. The key is to process each customer in order and calculate how many turns they require based on the limit. For each customer, if their count is zero, no turn. Otherwise, it's the ceiling of count divided by limit. But wait, the problem says that a customer wanting more than the limit takes as many turns as needed. So for example, if the limit is 3 and a customer has 4 items, they need 2 turns (3 and 1). So the formula is (count + limit - 1) // limit. That's the way to calculate the number of turns per customer.

So the approach is: iterate through each customer in the counts list, calculate the turns for each, and sum them all. But wait, the problem says that the stall serves customers in order, so the order matters. But since we're processing each customer in sequence, the order is already considered by processing them in the list's order.

So the steps are:

1. Initialize a total_turns variable to 0.
2. For each count in counts:
   a. If count is 0, skip (no turn).
   b. Else, compute (count + limit - 1) // limit and add to total_turns.
3. Return total_turns.

But wait, what if the limit is zero or below? The problem says that the limit is a fixed number. But the problem statement doesn't mention what to do if the limit is zero or negative. The user's note says that if the stall should do something when the limit is zero or below is not stated, then we need to block. But the user's instruction says to implement the function, so perhaps we need to handle that case. However, the problem says that the stall can't have a turn shared between customers, but if the limit is zero or negative, perhaps it's invalid. But the problem says that the limit is a fixed number. So maybe the function should raise an error if the limit is zero or negative. Because if the limit is zero, the stall can't give any items, but the problem says that a customer with zero items takes no turn. But if the limit is zero, then even a customer with one item would need (1 + 0 -1)/0 which is division by zero. So the function needs to handle that.

So the function should first check if the limit is zero or negative. If so, raise a ValueError. Because the problem says that the limit is a fixed number, and if it's zero or negative, it's invalid. So in the function, first check if limit <= 0, then raise ValueError with a message.

So the code steps:

- Check if limit is less than or equal to zero. If yes, raise ValueError.
- Then, for each count in counts:
   if count is zero, skip.
   else, compute (count + limit -1) // limit and add to total.

So the code would be:

def stall_turns(counts: list, limit: int) -> int:
    if limit <= 0:
        raise ValueError("Limit must be positive")
    total = 0
    for count in counts:
        if count == 0:
            continue
        total += (count + limit - 1) // limit
   