ruvnet/ruflo · error
Value did not change from ${String(initialValue)} within tim
Error message
Value did not change from ${String(initialValue)} within timeout What it means
waitUntilChanged polled getValue until timeout and the value never differed from the recorded initial value (explicitly supplied via `from` or sampled at start). The expected change in the observed state did not occur within the deadline.
Source
Thrown at v3/@claude-flow/testing/src/helpers/test-utils.ts:75
* @example
* await waitUntilChanged(() => counter.value, { from: 0 });
*/
export async function waitUntilChanged<T>(
getValue: () => T | Promise<T>,
options: WaitUntilChangedOptions<T> = {}
): Promise<T> {
const { from, timeout = 5000, interval = 50 } = options;
const initialValue = from ?? await getValue();
const startTime = Date.now();
while (true) {
const currentValue = await getValue();
if (currentValue !== initialValue) {
return currentValue;
}
if (Date.now() - startTime >= timeout) {
throw new Error(`Value did not change from ${String(initialValue)} within timeout`);
}
await sleep(interval);
}
}
/**
* Options for waitUntilChanged utility
*/
export interface WaitUntilChangedOptions<T> {
from?: T;
timeout?: number;
interval?: number;
}
/**
* Retry an operation with exponential backoff
*View on GitHub (pinned to fa13ee4ad6)
Solutions
- Verify the value is expected to change; trigger the action that mutates it.
- Increase the polling timeout or fix the getter to read the live value.
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at v3/@claude-flow/testing/src/helpers/test-utils.ts:75 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18).
Data as JSON: /api/errors/18ec8d9ecd918e11.
Report an issue: GitHub.