v2.9.3 — Safety audit null-handling fix
Bug fix
The V2 Publisher's Full Platinum Mandate Audit spammed hundreds of Invalid isoformat string: 'N/A' warnings and then aborted entirely with 'NoneType' object has no attribute 'lower'.
Fixed (src/safety_guard.py)
- MVQ compliance:
gh_pushedofN/A/null/empty is now skipped instead of being parsed as an ISO date;gh_stars/starsnull values are coalesced before the star-impact math (no moreNone * int). - Linguistic tagging: a null
languagefield no longer triggersNone.lower()(was aborting the whole report). - Audit runner: each mandate now runs in isolation — one bad inventory entry can no longer kill the entire audit; per-mandate failures are logged.
Note: the colon in the old log lines (...for <url>: <error>) was the log separator, not part of the URLs — the links themselves were never malformed.
🤖 Generated with Claude Code