addedInput schema / properties / entry / dependentRequired / external_id
Added value: +[
+ "origin"
+]
changedInput schema / properties / entry / description
Previous value: -"An action_log entry. Required: action (short description), platform (google_ads / meta_ads / etc.). The ``timestamp`` is stamped by the server — do not compute it. Optional: campaign_id, ad_id, entity_type, entity_id, summary, command, metrics_at_action, observation_due, reversible_params, rollback_of, evaluation_of."New value: +"An action_log entry. Required: action (short description), platform (google_ads / meta_ads / etc.). The ``timestamp`` is stamped by the server — do not compute it. Optional: campaign_id, ad_id, entity_type, entity_id, summary, command, metrics_at_action, observation_due, reversible_params, rollback_of, evaluation_of, batch_id (normally stamped by the server — see the field), and the provenance trio origin / external_id / occurred_at for a change mureo did NOT make (see those fields)."
addedInput schema / properties / entry / properties / batch_id
Added value: +{
+ "description": "Normally OMIT this. While a batch is open (mureo_batch_begin) the server stamps the entry with it automatically, so a bulk pass groups itself. Supplying it is an explicit ASSERTION that this entry belongs to that batch, and it is validated: the id must name a declared batch that is still open. An unknown id, or one whose batch has been closed, is REFUSED — membership cannot be invented, and a closed batch's reported member count cannot be made false after the fact. To group imported or backfilled history, open a batch for the import rather than reattaching to an old one.",
+ "minLength": 1,
+ "type": "string"
+}
addedInput schema / properties / entry / properties / external_id
Added value: +{
+ "description": "The change feed's own identifier for an external change, so recording it twice is a no-op. Requires origin='external'. Namespace it with the platform key (e.g. 'tiktok_ads|<change id>'). Omit only when the feed exposes no id — the entry is then recorded, but a later pass cannot recognise it and will record it again.",
+ "minLength": 1,
+ "type": "string"
+}
addedInput schema / properties / entry / properties / occurred_at
Added value: +{
+ "description": "ISO 8601 time the PLATFORM says the change happened — history, never 'now'. Unlike ``timestamp`` (which the server always stamps) this is accepted, because the change's own date is not something the server can know. The observation window anchors on it, so a change made two weeks ago is already due for review rather than due in a fortnight.",
+ "minLength": 1,
+ "type": "string"
+}
addedInput schema / properties / entry / properties / origin
Added value: +{
+ "description": "OMIT for anything mureo did — that is what an absent origin means. Set 'external' ONLY for a change mureo did not make, which you read out of a platform's own change history (typically a hosted connector mureo cannot poll itself; native and plugin platforms are covered by mureo_external_changes_import). An external entry is permanently marked as observed rather than performed: mureo will refuse to plan a rollback for it, because it never saw the prior value. Never use it to record a change you made through mureo.",
+ "enum": [
+ "external"
+ ],
+ "type": "string"
+}