```python
def index_map(labels: list) -> dict:
    """
    Given a list of labels, return a mapping from each label to every position it holds,
    the positions counted from zero and given in increasing order. A label appearing once still gets a list.

    :param labels: List of string labels
    :return: Dictionary with labels as keys and lists of their positions as values
    """
    index_dict = {}
    for i, label in enumerate(labels):
        if label not in index_dict:
            index_dict[label] = [i]
        else:
            index_dict[label].append(i)
    return index_dict
```