```python
def number_sections(sections: list) -> list:
    if not isinstance(sections, list):
        raise ValueError("Outline must be a list")

    def _number_sections(section_list, parent_number=1):
        numbered_sections = []
        for i, section in enumerate(section_list, start=1):
            if not isinstance(section, dict):
                raise ValueError("Section must be a mapping")
            if 'children' not in section or not isinstance(section['children'], list):
                raise ValueError("Section's children must be a list")
            if not isinstance(section['heading'], str) or not section['heading']:
                raise ValueError("Section heading must be a non-empty string")

            number = f"{parent_number}.{i}"
            numbered_sections.append(f"{number} {section['heading']}")
            numbered_sections.extend(_number_sections(section['children'], parent_number=number))
        return numbered_sections

    return _number_sections(sections)


def section_count(sections: list) -> int:
    if not isinstance(sections, list):
        raise ValueError("Outline must be a list")

    def _section_count(section_list, depth=1):
        count = len(section_list)
        for section in section_list:
            if 'children' in section and section['children']:
                count += _section_count(section['children'], depth + 1)
        return count

    return _section_count(sections)
```