windmill-labs/windmill · error
Secret value looks already-encrypted; pushing it as-is. If i
Error message
Secret value looks already-encrypted; pushing it as-is. If it is a plaintext secret, re-run with --plain-secrets so it gets encrypted.
What it means
Heuristic branch in variable push: --plain-secrets was not passed and the secret's value matches the shape of workspace ciphertext (looksLikeWorkspaceCiphertext), so it is pushed verbatim as already-encrypted instead of being encrypted server-side. The warning flags the risk that a plaintext secret merely looking like ciphertext would be stored unencrypted.
Source
Thrown at cli/src/commands/variable/variable.ts:239
// A secret value in a single-file push is authored by the user and is
// therefore plaintext that must be encrypted server-side — unless it has the
// shape of workspace ciphertext (a value round-tripped from `sync pull`).
// Pushing plaintext as already-encrypted would brick the variable. An explicit
// --plain-secrets always forces the plaintext (encrypt) path.
let plainSecrets = opts.plainSecrets ?? false;
if (opts.plainSecrets === undefined && local.is_secret) {
if (!looksLikeWorkspaceCiphertext(local.value)) {
log.info(
colors.yellow(
"Secret value is not in encrypted form; pushing as plaintext to be encrypted server-side (pass --plain-secrets to silence)."
)
);
plainSecrets = true;
} else {
// The value has the shape of workspace ciphertext, so it's stored as-is.
// A plaintext secret that coincidentally looks like ciphertext (e.g. a
// base64 token) would be stored unreadable, so surface the assumption.
log.warn(
"Secret value looks already-encrypted; pushing it as-is. If it is a plaintext secret, re-run with --plain-secrets so it gets encrypted."
);
}
}
await pushVariable(
workspace.workspaceId,
remotePath,
undefined,
local,
plainSecrets,
undefined,
true // single-file push is authoritative: allow secret->non-secret downgrade
);
log.info(colors.bold.underline.green(`Variable ${remotePath} pushed`));
}
async function add(View on GitHub (pinned to e474e8803c)
Solutions
- If the value is plaintext, re-run the push with --plain-secrets so it gets encrypted
- If it genuinely is ciphertext round-tripped from `sync pull`, no action needed
- Avoid hand-writing secret values that mimic ciphertext formats
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at cli/src/commands/variable/variable.ts:239 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/eccea988ebb230f5.
Report an issue: GitHub.