floci-io/floci · warning · AwsException
Override %s must not contain whitespace.
Error message
Override %s must not contain whitespace.
What it means
Thrown by the manual-approval wait loop when the approval action ends in the 'Failed' status; the exception message is the action's summary, which for approvals is typically set by RetryStageExecution/approval rejection or by whatever transition set status to Failed. The emulator blocks the execution thread, polling until the action leaves InProgress, then converts a Failed terminal state into ActionExecutionFailed.
Source
Thrown at src/main/java/io/github/hectorvent/floci/core/common/ReservedTags.java:173
}
return normalized;
}
private static String validateClientSecret(String overrideSecret, String name, String errorCode) {
String normalized = checkNullAndWhitespace(overrideSecret, name, errorCode);
if (normalized.chars().anyMatch(Character::isISOControl)) {
throw new AwsException(errorCode, CONTROL_CHARACTER_ERROR_MESSAGE.formatted(name), 400);
}
return normalized;
}
private static String checkNullAndWhitespace(String overrideSecret, String name, String errorCode) {
if (overrideSecret == null || overrideSecret.trim().isEmpty()) {
throw new AwsException(errorCode, "Override %s must not be blank.".formatted(name), 400);
}
String normalized = overrideSecret.trim();
if (normalized.chars().anyMatch(Character::isWhitespace)) {
throw new AwsException(errorCode, "Override %s must not contain whitespace.".formatted(name), 400);
}
return normalized;
}
private static boolean isReserved(String key) {
return key != null && key.startsWith(RESERVED_PREFIX);
}
}
View on GitHub (pinned to 62ff490619)
Solutions
- Treat this as the expected terminal outcome of a rejected approval — inspect the action's summary in GetPipelineState/execution details for who/why
- If the rejection is unexpected, re-run the pipeline execution and approve via the recorded approval token
- For automated emulator tests, either approve the token or assert the ActionExecutionFailed as the rejection signal
Defensive patterns
Strategy: try-catch
Try / catch
try {
client.startPipelineExecution(r -> r.name(name));
} catch (ActionExecutionFailedException e) {
if ("Waiting for approval.".contains(e.getMessage()) || e.getMessage().contains("approval")) {
// expected rejection path; assert summary instead of failing the test
}
} Prevention
- In automation, resolve approval tokens programmatically or exclude approval stages from emulator test pipelines
- Set distinct summaries when rejecting approvals so failures are attributable
When it happens
Trigger: An approval action rejected via the approval flow (the emulator sets the stage action to Failed with a rejection summary); approval marked failed programmatically; an external update to the action's status to Failed while waiting.
Common situations: A human or automation rejecting a deployment gate in tests; pipelines left waiting on approval that a cleanup script then fails; stop/abandon paths that record a failure summary.
Related errors
- Override %s must not contain control characters.
- Override %s must not be blank.
- MethodNotAllowedException
- TLS enabled but no certificate provided and self-signed gene
- Failed to write self-signed TLS certificate
AI-assisted analysis of floci-io/floci@62ff490619 (2026-08-14).
Data as JSON: /api/errors/f7cde2477f129f49.
Report an issue: GitHub.