Summary
Between 3.0.63 and 3.0.64, the --timeout flag on dataform run was redefined without a major version bump:
- 3.0.63: "Duration to allow project compilation to complete." — only bounded the compile phase.
- 3.0.64: "Wall-clock deadline for the entire command. When it fires, in-flight work (including any running JiT compilation worker) is cancelled." — now bounds compile and the full execution of every action in the run.
This change appears to have shipped as part of #2211 ("Integrate JiT compilation into CLI runtime"), which introduced the new per-model --jit-timeout flag alongside a silent redefinition of the pre-existing --timeout flag.
Any project that was passing --timeout to dataform run under the old (compile-only) semantics — a very reasonable thing to do, since a short timeout is sensible for compilation but not for execution — now has that same value applied as a hard deadline for the whole run. Once it fires, in-flight actions are cancelled and all not-yet-started actions are marked "skipped", with no error message printed at all: no exception, no stack trace, just a silent early exit (exit code 1) partway through the action graph.
Impact
- Runs that used to complete now stop partway through with zero explanation, unless you already know to compare the last completed action against elapsed wall-clock time.
- This can affect production runs equally — a scheduled
dataform run --timeout 30s (fine when --timeout was compile-only) will now truncate any real run that takes longer than 30s end-to-end, silently dropping tables/assertions that were never
reached.
- No deprecation warning, no changelog entry we could find calling out this behavior change, and no major version bump despite it being a breaking change in flag semantics.
Steps to reproduce
- On 3.0.63, run a project with
dataform run --timeout 30s where full execution (compile + all BigQuery jobs) takes longer than 30 seconds. Run completes successfully.
- Upgrade to 3.0.64 only (no other changes). Run the exact same command.
- Once 30s of wall-clock time elapses, the run stops: the in-flight action is dropped, all remaining pending actions are logged as
Skipping dataset creation / Skipping assertion execution, and the process exits with code 1 — with no error, warning, or timeout message printed anywhere in the output.
Expected behavior
- This should have been called out explicitly as a breaking change (changelog + version bump), since it changes what a previously-passed flag value does to already-shipped automation.
- When the wall-clock deadline fires and cancels in-flight/pending work, the CLI should print a clear message (e.g.
Run cancelled: --timeout of 30s exceeded) rather than exiting silently with skipped actions and no explanation. Right now nothing in run.ts's cancellation path surfaces this to the console — it looks like the parent CLI simply doesn't log anything when CANCEL_EVENT/onCancel fires the way it does when an action genuinely fails.
Version
Summary
Between 3.0.63 and 3.0.64, the
--timeoutflag ondataform runwas redefined without a major version bump:This change appears to have shipped as part of #2211 ("Integrate JiT compilation into CLI runtime"), which introduced the new per-model
--jit-timeoutflag alongside a silent redefinition of the pre-existing--timeoutflag.Any project that was passing
--timeouttodataform rununder the old (compile-only) semantics — a very reasonable thing to do, since a short timeout is sensible for compilation but not for execution — now has that same value applied as a hard deadline for the whole run. Once it fires, in-flight actions are cancelled and all not-yet-started actions are marked "skipped", with no error message printed at all: no exception, no stack trace, just a silent early exit (exit code 1) partway through the action graph.Impact
dataform run --timeout 30s(fine when--timeoutwas compile-only) will now truncate any real run that takes longer than 30s end-to-end, silently dropping tables/assertions that were neverreached.
Steps to reproduce
dataform run --timeout 30swhere full execution (compile + all BigQuery jobs) takes longer than 30 seconds. Run completes successfully.Skipping dataset creation/Skipping assertion execution, and the process exits with code 1 — with no error, warning, or timeout message printed anywhere in the output.Expected behavior
Run cancelled: --timeout of 30s exceeded) rather than exiting silently with skipped actions and no explanation. Right now nothing inrun.ts's cancellation path surfaces this to the console — it looks like the parent CLI simply doesn't log anything whenCANCEL_EVENT/onCancelfires the way it does when an action genuinely fails.Version