0302694f9a
TemplateEngine-011: ResolvedNativeAlarmSource bindings were absent from the flattened-config revision hash, so edits to a native alarm source binding (source reference, connection, condition filter, locked state) went undetected by staleness detection. Add a HashableNativeAlarmSource record and fold the sorted, null-when-empty NativeAlarmSources collection into HashableConfiguration in its alphabetical slot. WhenWritingNull keeps every native-source-free config byte-identical to its pre-migration hash (pinned literal test proves it), so the migration is surgical: only native-source-bearing instances flip stale once after upgrade; redeploy clears it — deliberate. Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj