From df76796f7815c899f8c3928d3691ec1daa437135 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 21:16:01 +0000 Subject: [PATCH] Version Packages --- .changeset/five-jars-listen.md | 7 ------ .changeset/four-plums-invite.md | 10 -------- .changeset/silly-forks-worry.md | 9 -------- .changeset/six-eels-jump.md | 10 -------- .changeset/tame-buttons-fold.md | 14 ----------- .changeset/tame-otters-relax.md | 7 ------ CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++ package.json | 2 +- 8 files changed, 42 insertions(+), 58 deletions(-) delete mode 100644 .changeset/five-jars-listen.md delete mode 100644 .changeset/four-plums-invite.md delete mode 100644 .changeset/silly-forks-worry.md delete mode 100644 .changeset/six-eels-jump.md delete mode 100644 .changeset/tame-buttons-fold.md delete mode 100644 .changeset/tame-otters-relax.md diff --git a/.changeset/five-jars-listen.md b/.changeset/five-jars-listen.md deleted file mode 100644 index 6b4009a..0000000 --- a/.changeset/five-jars-listen.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@stackmade/gtm-as-code": patch ---- - -Fixes `ga4.streamWebsiteUrl` lookup to ignore a trailing slash, and makes its "stream not found" -error list the web stream URLs that actually exist on the property. `plan`/`apply` also now print -which GA4 settings changed, not just that some did. diff --git a/.changeset/four-plums-invite.md b/.changeset/four-plums-invite.md deleted file mode 100644 index 52492d0..0000000 --- a/.changeset/four-plums-invite.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@stackmade/gtm-as-code": minor ---- - -Adds GA4 property and stream settings as config: `ga4.dataRetention`, `ga4.googleSignals`, and -`ga4.enhancedMeasurement.{scrollsEnabled, outboundClicksEnabled, siteSearchEnabled, -videoEngagementEnabled, fileDownloadsEnabled, formInteractionsEnabled}` (the last one scoped to the -stream found via the new `ga4.streamWebsiteUrl`, which looks up an existing web data stream by URL -without creating one). These settings have no create/delete lifecycle, so `plan`/`drift`/`apply` -diff them directly against GA4's live property/stream state rather than treating them as resources. diff --git a/.changeset/silly-forks-worry.md b/.changeset/silly-forks-worry.md deleted file mode 100644 index 7994196..0000000 --- a/.changeset/silly-forks-worry.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@stackmade/gtm-as-code": minor ---- - -A tag's `trigger`/`exceptTrigger` can now reference GTM's built-in triggers ("All Pages", -"Initialization - All Pages") by name, resolved to their fixed numeric GTM ids rather than looked -up in `gtm.triggers`, since GTM never returns these from `triggers.list`. This unblocks a -`googleTag` tag firing on GTM's own initialization trigger, without pasting a numeric id into -config. diff --git a/.changeset/six-eels-jump.md b/.changeset/six-eels-jump.md deleted file mode 100644 index 91aa809..0000000 --- a/.changeset/six-eels-jump.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@stackmade/gtm-as-code": minor ---- - -Adds `ga4.audiences`: GA4 audience definitions as create/update/archive resources, with a -recursive `and`/`or`/`not`/`dimensionOrMetric`/`event` filter tree. `membershipDurationDays`, -`exclusionDurationMode`, and `filterClauses` are immutable once created; `plan` fails with an -error naming the field rather than attempting a PATCH GA4 would reject. Validation normalizes a -clause's filter into the `and`-of-`or`s shape GA4 requires at the top level, so a single condition -can be written as a bare leaf without knowing about that requirement. diff --git a/.changeset/tame-buttons-fold.md b/.changeset/tame-buttons-fold.md deleted file mode 100644 index d41d872..0000000 --- a/.changeset/tame-buttons-fold.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@stackmade/gtm-as-code": minor ---- - -Adds `ga4.eventCreateRules`/`ga4.eventEditRules`: GA4 event create/edit rules as create/update/ -delete resources, nested under the web data stream resolved from `ga4.streamWebsiteUrl`. A create -rule's config key is its `destinationEvent`; an edit rule's config key is its `displayName`. Both -support a real delete, unlike `ga4.audiences`. An edit rule's `processingOrder` is read-only -through the API and isn't part of config. - -Adds `ga4.calculatedMetrics`/`ga4.channelGroups`: GA4 calculated metrics and channel groups as -property-scoped create/update/delete resources. A calculated metric's config key is its immutable -`calculatedMetricId`; a channel group's config key is its `displayName`, like `ga4.audiences`. Both -support a real delete. diff --git a/.changeset/tame-otters-relax.md b/.changeset/tame-otters-relax.md deleted file mode 100644 index badbbd3..0000000 --- a/.changeset/tame-otters-relax.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@stackmade/gtm-as-code": patch ---- - -Adds a remediation hint for `FAILED_PRECONDITION` errors on `ga4.googleSignals`: Google Signals -must be activated on the property through the GA4 UI once before its state can be changed via -config. Documents the same requirement in the README. diff --git a/CHANGELOG.md b/CHANGELOG.md index 93e64a8..58d6c3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,46 @@ # @stackmade/gtm-as-code +## 0.7.0 + +### Minor Changes + +- 8a084f7: Adds GA4 property and stream settings as config: `ga4.dataRetention`, `ga4.googleSignals`, and + `ga4.enhancedMeasurement.{scrollsEnabled, outboundClicksEnabled, siteSearchEnabled, +videoEngagementEnabled, fileDownloadsEnabled, formInteractionsEnabled}` (the last one scoped to the + stream found via the new `ga4.streamWebsiteUrl`, which looks up an existing web data stream by URL + without creating one). These settings have no create/delete lifecycle, so `plan`/`drift`/`apply` + diff them directly against GA4's live property/stream state rather than treating them as resources. +- e3d02a2: A tag's `trigger`/`exceptTrigger` can now reference GTM's built-in triggers ("All Pages", + "Initialization - All Pages") by name, resolved to their fixed numeric GTM ids rather than looked + up in `gtm.triggers`, since GTM never returns these from `triggers.list`. This unblocks a + `googleTag` tag firing on GTM's own initialization trigger, without pasting a numeric id into + config. +- 02309d2: Adds `ga4.audiences`: GA4 audience definitions as create/update/archive resources, with a + recursive `and`/`or`/`not`/`dimensionOrMetric`/`event` filter tree. `membershipDurationDays`, + `exclusionDurationMode`, and `filterClauses` are immutable once created; `plan` fails with an + error naming the field rather than attempting a PATCH GA4 would reject. Validation normalizes a + clause's filter into the `and`-of-`or`s shape GA4 requires at the top level, so a single condition + can be written as a bare leaf without knowing about that requirement. +- 42c5fcc: Adds `ga4.eventCreateRules`/`ga4.eventEditRules`: GA4 event create/edit rules as create/update/ + delete resources, nested under the web data stream resolved from `ga4.streamWebsiteUrl`. A create + rule's config key is its `destinationEvent`; an edit rule's config key is its `displayName`. Both + support a real delete, unlike `ga4.audiences`. An edit rule's `processingOrder` is read-only + through the API and isn't part of config. + + Adds `ga4.calculatedMetrics`/`ga4.channelGroups`: GA4 calculated metrics and channel groups as + property-scoped create/update/delete resources. A calculated metric's config key is its immutable + `calculatedMetricId`; a channel group's config key is its `displayName`, like `ga4.audiences`. Both + support a real delete. + +### Patch Changes + +- 93b2393: Fixes `ga4.streamWebsiteUrl` lookup to ignore a trailing slash, and makes its "stream not found" + error list the web stream URLs that actually exist on the property. `plan`/`apply` also now print + which GA4 settings changed, not just that some did. +- a9668e7: Adds a remediation hint for `FAILED_PRECONDITION` errors on `ga4.googleSignals`: Google Signals + must be activated on the property through the GA4 UI once before its state can be changed via + config. Documents the same requirement in the README. + ## 0.6.0 ### Minor Changes diff --git a/package.json b/package.json index fc20b39..6fbf9b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stackmade/gtm-as-code", - "version": "0.6.0", + "version": "0.7.0", "description": "GTM & GA4 as code — define Google Tag Manager and Analytics 4 config in YAML, plan/apply like Terraform.", "license": "MIT", "type": "module",