Symptom (+2)
Symptom
Semantic validator reports NorthDirection: 0 as "extra" in modular output.
Root Cause
Builder unconditionally emits NorthDirection: 0 (default). Monolithic doesn't include it (OrcaFlex assumes 0).
Fix
Only emit when non-zero:
if sim.north_direction:
general["NorthDirection"] = sim.north_direction