```python
def new_canvas(rows: int, cols: int) -> dict:
    """Create a new canvas with the specified dimensions."""
    for side in (rows, cols):
        if isinstance(side, bool) or not isinstance(side, int) or side < 1:
            raise ValueError("canvas dimensions must be positive integers")
    cells = [[0] * cols for _ in range(rows)]
    return {"rows": rows, "cols": cols, "cells": cells}


def stamp_rect(canvas: dict, rect: list) -> int:
    """Stamp a rectangular region onto the canvas, returning only newly inked cells."""
    if not isinstance(rect, list) or len(rect) != 4:
        raise ValueError("rect must be a list of exactly four integers")
    
    top, left, bottom, right = rect
    
    # Validate that all elements are integers (not bools)
    for val in rect:
        if isinstance(val, bool) or not isinstance(val, int):
            raise ValueError("rect elements must be integers")

    # Validate that the rect covers at least one cell
    if top >= bottom or left >= right:
        raise ValueError("rect must cover at least one cell (top < bottom and left < right)")

    # Validate that the rect is within canvas bounds
    if top < 0 or left < 0 or bottom > canvas["rows"] or right > canvas["cols"]:
        raise ValueError("rect is out of canvas bounds")

    inked = 0
    for r in range(top, bottom):
        for c in range(left, right):
            if canvas["cells"][r][c] == 0:
                canvas["cells"][r][c] = 1
                inked += 1
    return inked


def ink_total(canvas: dict) -> int:
    """Count the total number of inked cells in the canvas."""
    total = 0
    for row in canvas["cells"]:
        total += sum(row)
    return total
```