I have recently investigated this and from my observations, the ancestor record can include full field data, but only under specific conditions.
When you create the CKRecord to upload from system fields using CKRecord.encodeSystemFields(with:) and restore it with CKRecord.init(coder:), then fill in the fields manually, CloudKit will not populate the fields of the ancestor record in a serverRecordChanged error. You will only get the record metadata.
If instead you upload a CKRecord that was created from a full archive using CKRecord.encode(with:), or one that was fetched directly from CloudKit, the ancestor record in the conflict will contain all fields.
In short:
encodeSystemFields(with:) → ancestor has only metadata
encode(with:) or fetched record → ancestor has all fields
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags: