From 0631d4e22aa48b4d5c0e410ea40f4ae6c4503a5d Mon Sep 17 00:00:00 2001 From: Jeremy Cohen Date: Thu, 5 Sep 2024 13:37:50 +0200 Subject: [PATCH 1/7] Update docs on behavior changes --- ...egacy-behaviors.md => behavior-changes.md} | 29 ++++++++++++++++--- website/sidebars.js | 2 +- website/vercel.json | 5 ++++ 3 files changed, 31 insertions(+), 5 deletions(-) rename website/docs/reference/global-configs/{legacy-behaviors.md => behavior-changes.md} (75%) diff --git a/website/docs/reference/global-configs/legacy-behaviors.md b/website/docs/reference/global-configs/behavior-changes.md similarity index 75% rename from website/docs/reference/global-configs/legacy-behaviors.md rename to website/docs/reference/global-configs/behavior-changes.md index 1450fda1459..ef6cdb694b9 100644 --- a/website/docs/reference/global-configs/legacy-behaviors.md +++ b/website/docs/reference/global-configs/behavior-changes.md @@ -1,7 +1,7 @@ --- -title: "Legacy behaviors" -id: "legacy-behaviors" -sidebar: "Legacy behaviors" +title: "Behavior changes" +id: "behavior-changes" +sidebar: "Behavior changes" --- Most flags exist to configure runtime behaviors with multiple valid choices. The right choice may vary based on the environment, user preference, or the specific invocation. @@ -12,10 +12,31 @@ Another category of flags provides existing projects with a migration window for - Providing maintainability of dbt software. Every fork in behavior requires additional testing & cognitive overhead that slows future development. These flags exist to facilitate migration from "current" to "better," not to stick around forever. These flags go through three phases of development: -1. **Introduction (disabled by default):** dbt adds logic to support both 'old' + 'new' behaviors. The 'new' behavior is gated behind a flag, disabled by default, preserving the old behavior. +1. **Introduction (disabled by default):** dbt adds logic to support both 'old' and 'new' behaviors. The 'new' behavior is gated behind a flag, disabled by default, preserving the old behavior. 2. **Maturity (enabled by default):** The default value of the flag is switched, from `false` to `true`, enabling the new behavior by default. Users can preserve the 'old' behavior and opt out of the 'new' behavior by setting the flag to `false` in their projects. They may see deprecation warnings when they do so. 3. **Removal (generally enabled):** After marking the flag for deprecation, we remove it along with the 'old' behavior it supported from the dbt codebases. We aim to support most flags indefinitely, but we're not committed to supporting them forever. If we choose to remove a flag, we'll offer significant advance notice. +## What is a behavior change? + +> The same dbt project code and same dbt commands return one result before the behavior change, and they would return a different result after the behavior change. + +Examples of behavior changes: +- dbt begins raising a validation _error_ that it didn't previously. +- dbt changes the signature of a built-in macro. Your project has a custom reimplementation of that macro. This could lead to errors, because your custom reimplementation will be passed arguments it cannot accept. +- A dbt adapter renames or removes a method that was previously available on the `{{ adapter }}` object in the dbt-Jinja context. +- dbt makes a breaking change to contracted metadata artifacts by deleting a required field, changing the name or type of an existing field, or removing the default value of an existing field ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#breaking-changes)) +- dbt removes one of the fields from [structured logs](/reference/events-logging#structured-logging) + +The following are **not** behavior changes: +- Fixing a bug where the previous behavior was defective, undesirable, or undocumented. +- dbt begins raising a _warning_ that it didn't previously. +- dbt updates the language of human-friendly messages in log events. +- dbt makes a non-breaking change to contracted metadata artifacts by adding a new field with a default, or deleting a field with a default ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#non-breaking-changes)) + +The vast majority of changes are not behavior changes. Because introducing these changes does not require any action on the part of users, they are included in continuous releases of dbt Cloud and patch releases of dbt Core. + +By contrast, behavior change migrations happen slowly, over the course of months, facilitated by behavior change flags. The flags are loosely coupled to the specific dbt runtime version. By setting flags, users have control over opting in (and later opting out) of these changes. + ## Behavior change flags These flags _must_ be set in the `flags` dictionary in `dbt_project.yml`. They configure behaviors closely tied to project code, which means they should be defined in version control and modified through pull or merge requests, with the same testing and peer review. diff --git a/website/sidebars.js b/website/sidebars.js index b3b752990dd..69ba286228d 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -1073,6 +1073,7 @@ const sidebarSettings = { }, items: [ "reference/global-configs/about-global-configs", + "reference/global-configs/behavior-changes", { type: "category", label: "Setting flags", @@ -1091,7 +1092,6 @@ const sidebarSettings = { "reference/global-configs/failing-fast", "reference/global-configs/indirect-selection", "reference/global-configs/json-artifacts", - "reference/global-configs/legacy-behaviors", "reference/global-configs/parsing", "reference/global-configs/print-output", "reference/global-configs/record-timing-info", diff --git a/website/vercel.json b/website/vercel.json index 8fdf311e72f..f79fc959187 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -599,6 +599,11 @@ "destination": "/reference/global-configs/command-line-options", "permanent": true }, + { + "source": "/reference/global-configs/legacy-behaviors", + "destination": "/reference/global-configs/behavior-changes", + "permanent": true + }, { "source": "/reference/global-configs/yaml-configurations", "destination": "/reference/global-configs/project-flags", From ac261d2778e8d0efb13b37f0de5228e642a459e8 Mon Sep 17 00:00:00 2001 From: Jeremy Cohen Date: Thu, 5 Sep 2024 14:46:38 +0200 Subject: [PATCH 2/7] Fix broken links --- .../dbt-versions/core-upgrade/07-upgrading-to-v1.8.md | 8 ++++---- website/docs/docs/dbt-versions/release-notes.md | 6 +++--- .../docs/reference/global-configs/about-global-configs.md | 6 +++--- website/docs/reference/global-configs/project-flags.md | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md index dd22329668c..92e47374d6f 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md +++ b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md @@ -98,13 +98,13 @@ The ability for installed packages to override built-in materializations without ### Managing changes to legacy behaviors -dbt Core v1.8 has introduced flags for [managing changes to legacy behaviors](/reference/global-configs/legacy-behaviors). You may opt into recently introduced changes (disabled by default), or opt out of mature changes (enabled by default), by setting `True` / `False` values, respectively, for `flags` in `dbt_project.yml`. +dbt Core v1.8 has introduced flags for [managing changes to legacy behaviors](/reference/global-configs/behavior-changes). You may opt into recently introduced changes (disabled by default), or opt out of mature changes (enabled by default), by setting `True` / `False` values, respectively, for `flags` in `dbt_project.yml`. You can read more about each of these behavior changes in the following links: -- (Mature, enabled by default) [Require explicit package overrides for builtin materializations](/reference/global-configs/legacy-behaviors#require_explicit_package_overrides_for_builtin_materializations) -- (Introduced, disabled by default) [Require resource names without spaces](https://docs.getdbt.com/reference/global-configs/legacy-behaviors#require_resource_names_without_spaces) -- (Introduced, disabled by default) [Run project hooks (`on-run-*`) in the `dbt source freshness` command](/reference/global-configs/legacy-behaviors#source_freshness_run_project_hooks) +- (Mature, enabled by default) [Require explicit package overrides for builtin materializations](/reference/global-configs/behavior-changes#require_explicit_package_overrides_for_builtin_materializations) +- (Introduced, disabled by default) [Require resource names without spaces](https://docs.getdbt.com/reference/global-configs/behavior-changes#require_resource_names_without_spaces) +- (Introduced, disabled by default) [Run project hooks (`on-run-*`) in the `dbt source freshness` command](/reference/global-configs/behavior-changes#source_freshness_run_project_hooks) ## Quick hits diff --git a/website/docs/docs/dbt-versions/release-notes.md b/website/docs/docs/dbt-versions/release-notes.md index 57aadba284d..1ab09b3839c 100644 --- a/website/docs/docs/dbt-versions/release-notes.md +++ b/website/docs/docs/dbt-versions/release-notes.md @@ -148,7 +148,7 @@ The following features are new or enhanced as part of our [dbt Cloud Launch Show -- **Behavior change:** Introduced the `require_resource_names_without_spaces` flag, opt-in and disabled by default. If set to `True`, dbt will raise an exception if it finds a resource name containing a space in your project or an installed package. This will become the default in a future version of dbt. Read [No spaces in resource names](/reference/global-configs/legacy-behaviors#no-spaces-in-resource-names) for more information. +- **Behavior change:** Introduced the `require_resource_names_without_spaces` flag, opt-in and disabled by default. If set to `True`, dbt will raise an exception if it finds a resource name containing a space in your project or an installed package. This will become the default in a future version of dbt. Read [No spaces in resource names](/reference/global-configs/behavior-changes#no-spaces-in-resource-names) for more information. ## April 2024 @@ -160,7 +160,7 @@ The following features are new or enhanced as part of our [dbt Cloud Launch Show -- **Behavior change:** Introduced the `require_explicit_package_overrides_for_builtin_materializations` flag, opt-in and disabled by default. If set to `True`, dbt will only use built-in materializations defined in the root project or within dbt, rather than implementations in packages. This will become the default in May 2024 (dbt Core v1.8 and "Versionless" dbt Cloud). Read [Package override for built-in materialization](/reference/global-configs/legacy-behaviors#package-override-for-built-in-materialization) for more information. +- **Behavior change:** Introduced the `require_explicit_package_overrides_for_builtin_materializations` flag, opt-in and disabled by default. If set to `True`, dbt will only use built-in materializations defined in the root project or within dbt, rather than implementations in packages. This will become the default in May 2024 (dbt Core v1.8 and "Versionless" dbt Cloud). Read [Package override for built-in materialization](/reference/global-configs/behavior-changes#package-override-for-built-in-materialization) for more information. **dbt Semantic Layer** - **New**: Use Saved selections to [save your query selections](/docs/cloud-integrations/semantic-layer/gsheets#using-saved-selections) within the [Google Sheets application](/docs/cloud-integrations/semantic-layer/gsheets). They can be made private or public and refresh upon loading. @@ -182,7 +182,7 @@ The following features are new or enhanced as part of our [dbt Cloud Launch Show - **Fix:** `dbt parse` no longer shows an error when you use a list of filters (instead of just a string filter) on a metric. - **Fix:** `join_to_timespine` now properly gets applied to conversion metric input measures. - **Fix:** Fixed an issue where exports in Redshift were not always committing to the DWH, which also had the side-effect of leaving table locks open. -- **Behavior change:** Introduced the `source_freshness_run_project_hooks` flag, opt-in and disabled by default. If set to `True`, dbt will include `on-run-*` project hooks in the `source freshness` command. This will become the default in a future version of dbt. Read [Project hooks with source freshness](/reference/global-configs/legacy-behaviors#project-hooks-with-source-freshness) for more information. +- **Behavior change:** Introduced the `source_freshness_run_project_hooks` flag, opt-in and disabled by default. If set to `True`, dbt will include `on-run-*` project hooks in the `source freshness` command. This will become the default in a future version of dbt. Read [Project hooks with source freshness](/reference/global-configs/behavior-changes#project-hooks-with-source-freshness) for more information. ## February 2024 diff --git a/website/docs/reference/global-configs/about-global-configs.md b/website/docs/reference/global-configs/about-global-configs.md index bbbe63ac439..3708b8c96be 100644 --- a/website/docs/reference/global-configs/about-global-configs.md +++ b/website/docs/reference/global-configs/about-global-configs.md @@ -16,7 +16,7 @@ There is a significant overlap between dbt's flags and dbt's command line option ### Setting flags There are multiple ways of setting flags, which depend on the use case: -- **[Project-level `flags` in `dbt_project.yml`](/reference/global-configs/project-flags):** Define version-controlled defaults for everyone running this project. Preserve [legacy behaviors](/reference/global-configs/legacy-behaviors) until their slated deprecation. +- **[Project-level `flags` in `dbt_project.yml`](/reference/global-configs/project-flags):** Define version-controlled defaults for everyone running this project. Also, opt in or opt out of [behavior changes](/reference/global-configs/behavior-changes) to manage your migration off legacy functionality. - **[Environment variables](/reference/global-configs/environment-variable-configs):** Define different behavior in different runtime environments (development vs. production vs. [continuous integration](/docs/deploy/continuous-integration), or different behavior for different users in development (based on personal preferences). - **[CLI options](/reference/global-configs/command-line-options):** Define behavior specific to _this invocation_. Supported for all dbt commands. @@ -41,7 +41,7 @@ dbt run --no-fail-fast # set to False There are two categories of exceptions: 1. **Flags setting file paths:** Flags for file paths that are relevant to runtime execution (for example, `--log-path` or `--state`) cannot be set in `dbt_project.yml`. To override defaults, pass CLI options or set environment variables (`DBT_LOG_PATH`, `DBT_STATE`). Flags that tell dbt where to find project resources (for example, `model-paths`) are set in `dbt_project.yml`, but as a top-level key, outside the `flags` dictionary; these configs are expected to be fully static and never vary based on the command or execution environment. -2. **Opt-in flags:** Flags opting into [legacy dbt behaviors](/reference/global-configs/legacy-behaviors) can _only_ be defined in `dbt_project.yml`. These are intended to be set in version control and migrated via pull/merge request. Their values should not diverge indefinitely across invocations, environments, or users. +2. **Opt-in flags:** Flags opting in or out of [behavior changes](/reference/global-configs/behavior-changes) can _only_ be defined in `dbt_project.yml`. These are intended to be set in version control and migrated via pull/merge request. Their values should not diverge indefinitely across invocations, environments, or users. ### Accessing flags @@ -84,7 +84,7 @@ Because the values of `flags` can differ across invocations, we strongly advise | [quiet](/reference/global-configs/logs#suppress-non-error-logs-in-output) | boolean | False | ❌ | `DBT_QUIET` | `--quiet` | ✅ | | [resource-type](/reference/global-configs/resource-type) (v1.8+) | string | None | ❌ | `DBT_RESOURCE_TYPES`

`DBT_EXCLUDE_RESOURCE_TYPES` | `--resource-type`

`--exclude-resource-type` | ✅ | | [send_anonymous_usage_stats](/reference/global-configs/usage-stats) | boolean | True | ✅ | `DBT_SEND_ANONYMOUS_USAGE_STATS` | `--send-anonymous-usage-stats`, `--no-send-anonymous-usage-stats` | ❌ | -| [source_freshness_run_project_hooks](/reference/global-configs/legacy-behaviors#source_freshness_run_project_hooks) | boolean | False | ✅ | ❌ | ❌ | ❌ | +| [source_freshness_run_project_hooks](/reference/global-configs/behavior-changes#source_freshness_run_project_hooks) | boolean | False | ✅ | ❌ | ❌ | ❌ | | [state](/reference/node-selection/defer) | path | none | ❌ | `DBT_STATE`, `DBT_DEFER_STATE` | `--state`, `--defer-state` | ❌ | | [static_parser](/reference/global-configs/parsing#static-parser) | boolean | True | ✅ | `DBT_STATIC_PARSER` | `--static-parser`, `--no-static-parser` | ❌ | | [store_failures](/reference/resource-configs/store_failures) | boolean | False | ✅ (as resource config) | `DBT_STORE_FAILURES` | `--store-failures`, `--no-store-failures` | ✅ | diff --git a/website/docs/reference/global-configs/project-flags.md b/website/docs/reference/global-configs/project-flags.md index 896276d9735..cdbe3463b14 100644 --- a/website/docs/reference/global-configs/project-flags.md +++ b/website/docs/reference/global-configs/project-flags.md @@ -17,7 +17,7 @@ flags: Reference the [table of all flags](/reference/global-configs/about-global-configs#available-flags) to see which global configs are available for setting in [`dbt_project.yml`](/reference/dbt_project.yml). -The `flags` dictionary is the _only_ place you can opt out of [behavior changes](/reference/global-configs/legacy-behaviors), while the legacy behavior is still supported. +The `flags` dictionary is the _only_ place you can opt out of [behavior changes](/reference/global-configs/behavior-changes), while the legacy behavior is still supported. From 65e0b3c639169b14308c548f2f0b8ca38efc4d5f Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:43:35 +0100 Subject: [PATCH 3/7] Update website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md --- .../docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md index 92e47374d6f..9163047e7e0 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md +++ b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.8.md @@ -103,7 +103,7 @@ dbt Core v1.8 has introduced flags for [managing changes to legacy behaviors](/r You can read more about each of these behavior changes in the following links: - (Mature, enabled by default) [Require explicit package overrides for builtin materializations](/reference/global-configs/behavior-changes#require_explicit_package_overrides_for_builtin_materializations) -- (Introduced, disabled by default) [Require resource names without spaces](https://docs.getdbt.com/reference/global-configs/behavior-changes#require_resource_names_without_spaces) +- (Introduced, disabled by default) [Require resource names without spaces](/reference/global-configs/behavior-changes#require_resource_names_without_spaces) - (Introduced, disabled by default) [Run project hooks (`on-run-*`) in the `dbt source freshness` command](/reference/global-configs/behavior-changes#source_freshness_run_project_hooks) ## Quick hits From 742cf4e863c451a5c37a2f7ba6bbbd0b8ac8aabc Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:04:44 +0100 Subject: [PATCH 4/7] Update website/docs/reference/global-configs/behavior-changes.md --- website/docs/reference/global-configs/behavior-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/global-configs/behavior-changes.md b/website/docs/reference/global-configs/behavior-changes.md index ef6cdb694b9..662d6503c7d 100644 --- a/website/docs/reference/global-configs/behavior-changes.md +++ b/website/docs/reference/global-configs/behavior-changes.md @@ -24,7 +24,7 @@ Examples of behavior changes: - dbt begins raising a validation _error_ that it didn't previously. - dbt changes the signature of a built-in macro. Your project has a custom reimplementation of that macro. This could lead to errors, because your custom reimplementation will be passed arguments it cannot accept. - A dbt adapter renames or removes a method that was previously available on the `{{ adapter }}` object in the dbt-Jinja context. -- dbt makes a breaking change to contracted metadata artifacts by deleting a required field, changing the name or type of an existing field, or removing the default value of an existing field ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#breaking-changes)) +- dbt makes a breaking change to contracted metadata artifacts by deleting a required field, changing the name or type of an existing field, or removing the default value of an existing field ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#breaking-changes)). - dbt removes one of the fields from [structured logs](/reference/events-logging#structured-logging) The following are **not** behavior changes: From e147e8c2bec3e794cbdcc60e9c40f4619e978e37 Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:05:46 +0100 Subject: [PATCH 5/7] Update website/docs/reference/global-configs/behavior-changes.md --- website/docs/reference/global-configs/behavior-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/global-configs/behavior-changes.md b/website/docs/reference/global-configs/behavior-changes.md index 662d6503c7d..b5b722f0654 100644 --- a/website/docs/reference/global-configs/behavior-changes.md +++ b/website/docs/reference/global-configs/behavior-changes.md @@ -25,7 +25,7 @@ Examples of behavior changes: - dbt changes the signature of a built-in macro. Your project has a custom reimplementation of that macro. This could lead to errors, because your custom reimplementation will be passed arguments it cannot accept. - A dbt adapter renames or removes a method that was previously available on the `{{ adapter }}` object in the dbt-Jinja context. - dbt makes a breaking change to contracted metadata artifacts by deleting a required field, changing the name or type of an existing field, or removing the default value of an existing field ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#breaking-changes)). -- dbt removes one of the fields from [structured logs](/reference/events-logging#structured-logging) +- dbt removes one of the fields from [structured logs](/reference/events-logging#structured-logging). The following are **not** behavior changes: - Fixing a bug where the previous behavior was defective, undesirable, or undocumented. From eda2642d85e759dd8f2f6813f06c10839d2b7074 Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:06:47 +0100 Subject: [PATCH 6/7] Update website/docs/reference/global-configs/behavior-changes.md --- website/docs/reference/global-configs/behavior-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/global-configs/behavior-changes.md b/website/docs/reference/global-configs/behavior-changes.md index b5b722f0654..6b254e95e44 100644 --- a/website/docs/reference/global-configs/behavior-changes.md +++ b/website/docs/reference/global-configs/behavior-changes.md @@ -31,7 +31,7 @@ The following are **not** behavior changes: - Fixing a bug where the previous behavior was defective, undesirable, or undocumented. - dbt begins raising a _warning_ that it didn't previously. - dbt updates the language of human-friendly messages in log events. -- dbt makes a non-breaking change to contracted metadata artifacts by adding a new field with a default, or deleting a field with a default ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#non-breaking-changes)) +- dbt makes a non-breaking change to contracted metadata artifacts by adding a new field with a default, or deleting a field with a default ([README](https://github.com/dbt-labs/dbt-core/blob/37d382c8e768d1e72acd767e0afdcb1f0dc5e9c5/core/dbt/artifacts/README.md#non-breaking-changes)). The vast majority of changes are not behavior changes. Because introducing these changes does not require any action on the part of users, they are included in continuous releases of dbt Cloud and patch releases of dbt Core. From 7d63ea653fb93407908e76b89e2dc416689cfcbf Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:21:08 -0400 Subject: [PATCH 7/7] Update website/docs/reference/global-configs/behavior-changes.md --- website/docs/reference/global-configs/behavior-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/global-configs/behavior-changes.md b/website/docs/reference/global-configs/behavior-changes.md index 6b254e95e44..20f5722b944 100644 --- a/website/docs/reference/global-configs/behavior-changes.md +++ b/website/docs/reference/global-configs/behavior-changes.md @@ -18,7 +18,7 @@ These flags go through three phases of development: ## What is a behavior change? -> The same dbt project code and same dbt commands return one result before the behavior change, and they would return a different result after the behavior change. +The same dbt project code and the same dbt commands return one result before the behavior change, and they return a different result after the behavior change. Examples of behavior changes: - dbt begins raising a validation _error_ that it didn't previously.