strapi/strapi · error · Error
Impossible to proceed to the given step
Error message
Impossible to proceed to the given step
What it means
Thrown by createFlow's set() method when can(step) returns false — i.e., the requested step is at an index earlier than the current step (the flow only allows forward movement, with one exception: re-sending the same transfer stage is permitted). This guards the server-side transfer state machine against clients that send steps out of order or attempt to go backward.
Source
Thrown at packages/core/data-transfer/src/strapi/remote/flows/index.ts:72
const indexesDifference = findStepIndex(step) - findStepIndex(state.step);
// It's possible to send multiple time the same transfer step in a row
if (indexesDifference === 0 && step.kind === 'transfer') {
return true;
}
return indexesDifference > 0;
},
cannot(step: Step) {
return !this.can(step);
},
set(step: Step) {
const canSwitch = this.can(step);
if (!canSwitch) {
throw new Error('Impossible to proceed to the given step');
}
state.step = step;
return this;
},
get() {
return state.step;
},
};
};
View on GitHub (pinned to 4a4101264d)
Solutions
- Send transfer steps in the order defined by DEFAULT_TRANSFER_FLOW; do not resend an earlier step once the server has advanced.
- Ensure client and server run compatible Strapi versions so the flow definition matches.
- If a step failed and must be retried, restart the entire transfer (new transferID) rather than replaying an earlier step.
Example fix
// before — client sends steps out of order
flow.set({ kind: 'transfer', stage: 'init' }); // after bootstrap already ran
// after — check before setting, or start a new transfer
if (flow.can({ kind: 'transfer', stage: 'init' })) {
flow.set({ kind: 'transfer', stage: 'init' });
} Defensive patterns
Strategy: validation
Validate before calling
// Check flow.can(step) before calling set()
if (flow.can(step)) {
flow.set(step);
} else {
// step is behind current — reject the client message or start a new transfer
} Prevention
- Send transfer steps strictly in the order defined by DEFAULT_TRANSFER_FLOW.
- Never resend an earlier step after the server advanced; restart the transfer (new transferID) instead.
- Keep client and server Strapi versions aligned so the flow definition matches.
When it happens
Trigger: A client sends a transfer step that precedes the current one (e.g., requesting 'init' after 'bootstrap' already ran), or an action step that has already been executed and isn't idempotently repeatable.
Common situations: Version mismatch between client and server causing different flow definitions; a buggy/retrying client resending an earlier step after the server advanced; a custom client that doesn't follow the ordered flow (init → bootstrap → schemas → entities → links → ...).
Related errors
- Invalid action provided: "${action}"
- Expected stream queue item for "${id}"
- Asset ${id} is missing checksum in transfer end payload
- Init failed, invalid response from the server
- No websocket connection found
AI-assisted analysis of strapi/strapi@4a4101264d (2026-08-12).
Data as JSON: /api/errors/472d8f1a00fac7bc.
Report an issue: GitHub.