Context
Each source emits different schemas. Before timeline aggregation is possible, each source must be projected onto the common SecurityEvent schema.
Goal
Implement Normalize(raw interface{}, source EventSource) (SecurityEvent, error) for each source adapter.
Sources
Acceptance criteria
- All fields populated where source provides them
- Fields absent in source set to zero value (not nil pointer unless optional)
Source field always set
- Round-trip test: normalize → serialize → deserialize → equal
Context
Each source emits different schemas. Before timeline aggregation is possible, each source must be projected onto the common
SecurityEventschema.Goal
Implement
Normalize(raw interface{}, source EventSource) (SecurityEvent, error)for each source adapter.Sources
Acceptance criteria
Sourcefield always set