| is the ChangeEvent type name, not the source object name | The Metadata API binds the member to a ChangeEvent entity — passing directly fails with "invalid event in selectedEntity". |
| Member fullName uses single underscore: | The double-underscore form () is parsed as and rejected: "Cannot create a new component with the namespace: Account". |
| Default channel value is exactly — no path prefix | Older fixtures and some docs show ; the deploy returns "Unable to find the specified channel" for that value. |
| Enrichment field names are single-hop API names on the source entity | Standard (), custom lookup (), and custom non-relationship () all validate. Traversals like are rejected: "The selected field, X.Y, isn't valid". |
| body has no keyword | Deploy returns "filter expression has syntax errors: unexpected token: 'WHERE'". |
| Filter cannot reference or do relationship traversal () | Deploy rejects with "field is invalid". |
| DateTime fields support only equality in filters (, ) — not / | Deploy returns "Only equality operators are supported for this field type or value". Use a named date literal: . |
| Filter RHS must be a literal — no field-to-field comparison | BillingCity = ShippingCity
returns "unexpected token: 'ShippingCity'". |
| Compound fields (e.g. ) require dotted component access in filter | BillingAddress.City = 'X'
deploys; flat is rejected as "field is invalid"; raw is rejected as "has to be used with a component field". Note this is the OPPOSITE of , which uses flat names. |
| Custom channel filename ends with before the meta-xml suffix | Salesforce's MDAPI naming convention; mismatch causes deploy ambiguity. |
Custom channel XML must include <channelType>data</channelType>
| Without , the channel is rejected for CDC (other types exist for streaming/event channels). |
| Source custom objects must already exist (or be deployed in the same transaction) | The ChangeEvent entity for doesn't exist until does; member deploy fails otherwise. |
| Never generate a file for the default channel | The default channel is system-provided. Reference it via <eventChannel>ChangeEvents</eventChannel>
on members, but only custom () channels need a channel-meta file. |
PlatformEventChannelMember
accepts ONLY four elements: , , , | Adding , , , or any other element fails XML schema validation: "Element {...} invalid at this location". Stick to the four documented elements. |
| accepts ONLY two elements: and | Adding , , etc. produces "Element {...}masterLabel invalid at this location in type PlatformEventChannel". Use , not . |
| Generated metadata files only — never run from this skill | This skill produces artifacts; deployment is a separate lifecycle concern. |