```python
def changed_cells(cells: dict[str, str], name: str, replacement: str) -> list[str]:
    if name not in cells:
        raise ValueError(f"unknown cell {name}")
    
    def evaluate(cell: str) -> int:
        if cell.startswith("="):
            refs = [part.strip() for part in cell[1:].split("+")]
            return sum(evaluate(ref) for ref in refs)
        else:
            try:
                return int(cell)
            except ValueError:
                raise ValueError(f"invalid literal {cell}")
    
    original_value = evaluate(cells[name])
    cells[name] = replacement
    new_value = evaluate(cells[name])
    
    if original_value == new_value:
        return []
    
    changed = [name]
    for cell, raw in cells.items():
        if not raw.startswith("="):
            continue
        refs = {part.strip() for part in raw[1:].split("+")}
        if name in refs:
            changed.append(cell)
    
    return sorted(changed)
```