normalize_tool_status(
raw_status: object,
tool_name: str,
) -> ToolStatusMap a raw ToolMessage.status to the two-value hook domain, fail-closed.
"error" and "success" pass through. Any other present value — a future
provider status, an explicit None, or a typo — is unexpected and treated as
"error" (and logged), so an audit or notification hook is never told a
non-successful tool succeeded. Callers pass
getattr(message, "status", "success"), so a missing status arrives as
"success" and is not warned about.