Lessons learned:
Check conditions first: Don't run Hierholzer without verifying even degrees and connectivity.
Handle undirected edges carefully: Mark both directions when using an edge.
Edge indexing: Using edge indices makes it easy to mark edges as used.
Connectivity check: A graph with isolated vertices can still have an Euler circuit among the connected vertices, but you must start from a vertex with edges.
This is the canonical Euler circuit problem. The pattern appears in many variations.