```python
from typing import List, Dict

def number_sections(sections: List[Dict[str, any]]) -> List[str]:
    if not isinstance(sections, list):
        raise ValueError("outline must be a list")
    
    def _number_section(section, depth=0):
        if not isinstance(section, dict) or 'heading' not in section:
            raise ValueError("section must be a mapping with 'heading'")
        
        heading = section['heading']
        if not isinstance(heading, str) or not heading.strip():
            raise ValueError("heading must be a non-empty string")
        
        label = f"{depth + 1} {heading}"
        children = section.get('children', [])
        
        result = [label]
        for child in children:
            result.extend(_number_section(child, depth + 1))
        
        return result
    
    return _number_section(sections)

def section_count(sections: List[Dict[str, any]]) -> int:
    if not isinstance(sections, list):
        raise ValueError("outline must be a list")
    
    def _count_section(section):
        if not isinstance(section, dict) or 'heading' not in section:
            raise ValueError("section must be a mapping with 'heading'")
        
        heading = section['heading']
        if not isinstance(heading, str) or not heading.strip():
            raise ValueError("heading must be a non-empty string")
        
        count = 1
        children = section.get('children', [])
        
        for child in children:
            count += _count_section(child)
        
        return count
    
    return _count_section(sections)
```