diff --git a/lib/substantive_fixer.py b/lib/substantive_fixer.py index 4d6dcd5..9bc7dbc 100644 --- a/lib/substantive_fixer.py +++ b/lib/substantive_fixer.py @@ -544,6 +544,14 @@ async def substantive_fix_cycle(conn, max_workers=None) -> tuple[int, int]: try: issues = json.loads(row["eval_issues"] or "[]") except (json.JSONDecodeError, TypeError): + # Corrupt JSON in eval_issues is abnormal (post-merge column drift, + # hand-edited row, partial write during crash). WARN so ops can chase + # the upstream column-write path. Without this, the row drops out of + # both substantive_rows and skipped_no_tags — the third silent path. + logger.warning( + "PR #%d: corrupt eval_issues JSON — skipping in substantive fix cycle", + row["number"], + ) continue if set(issues) & (FIXABLE_TAGS | CONVERTIBLE_TAGS | UNFIXABLE_TAGS): substantive_rows.append(row)