Synthego's CRISPR Design Tool produces records containing guide information and optional metadata. Implement a function that fills missing values using a supplied defaults map.
A value is considered missing when its field is absent from the record, set to None, or equal to the empty string "". Replace only missing values. Preserve existing values, including 0, False, and non-empty strings. The function must not mutate the input records.
Given records, a list of dictionaries, and defaults, a dictionary mapping field names to replacement values, return a new list of dictionaries. Each output record must contain every field in defaults. Fields not listed in defaults must remain unchanged. Preserve the original record order.
def fill_missing(records, defaults):