agent loop detected: re-running failed dbt tests with no changes
Stops agents from re-running failing dbt tests without changes: the tests are deterministic, so the loop is pure waste. Use when an agent re-runs the same failing tests repeatedly. Not for tests re-run after a fix.
TL;DR
dbt tests are deterministic: same data, same test, same result. Re-running a failing test without changing the data or the test cannot pass. Stop the loop, read the failure, fix the data or the expectation, then run once. Test re-runs are for verifying fixes, not for wishing.
agent loop detected: re-running failed dbt tests with no changesUse this when
- An agent re-runs failing dbt tests with no intervening change.
- The failures are identical across runs.
- The agent's plan is stuck on make the tests pass by repetition.
Not for this skill when
- The data or test changed between runs. That is iteration, not a loop.
- Tests are flaky. That is a different problem.
Steps
- Confirm nothing changed between runs: same code, same data, same command. Note the sameness. Verify: the loop is proven pointless
- Stop re-running. Note the halt. Verify: the loop breaks
- Read the test failure output: which rows violate which expectation. Note the violation. Verify: the failure is understood
- Fix the data upstream or correct the test expectation. Note the change. Verify: something actually changes
- Run the tests once and confirm they pass. Note the green run. Verify: the fix is verified with one run
Variant phrasings
agent rerunning dbt tests loop
The paraphrase.
dbt test deterministic failure
The concept phrasing.
Compatibility: dbt Core test execution. Determinism holds for tests on stable data; streaming sources need care.
Why it happens
Tests encode expectations about data, and neither the data nor the expectation changes between identical runs. Re-running is magical thinking with a compute bill. Agents fall into it because re-run is the available action and diagnosis feels harder, but the failure output already contains the diagnosis: the violating rows are listed. The loop breaks the moment the agent reads instead of reruns.
Edge cases / pitfalls
- Tests on streaming or frequently-updated sources can legitimately change between runs. Verify the data is stable before calling it a loop.
- A test that fails on timing (freshness) rather than content can pass on re-run honestly. Distinguish content failures from timing failures.
- Re-running the full test suite to verify one fix is fine. Re-running the same failing test with no fix is the loop.
- If the agent cannot fix the data or the test, escalate with the violation listed. Do not loop while waiting for permission.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst5syRXNEgN7wk9m8LKKHbg