sipeed/picoclaw · warning
Enter and confirm the new login password.
Error message
Enter and confirm the new login password.
What it means
Validation error thrown in handleSave (web/frontend/src/components/config/config-page.tsx:302, message from i18n key pages.config.dashboard_password_required) when the dashboard password fields are dirty (launcherPasswordDirty) but the trimmed password is empty. It guards the subsequent POST /api/auth/setup call, which would otherwise send an empty password. Because dirty-flag based, it fires only after the user actually edited one of the two password inputs.
Source
Thrown at web/frontend/src/components/config/config-page.tsx:302
} catch (err) {
toast.error(
err instanceof Error
? err.message
: t("pages.config.factory_reset_error"),
)
} finally {
setShowFactoryResetDialog(false)
}
}
const handleSave = async () => {
try {
setSaving(true)
const password = launcherForm.dashboardPassword.trim()
const confirm = launcherForm.dashboardPasswordConfirm.trim()
if (launcherPasswordDirty) {
if (!password) {
throw new Error(t("pages.config.dashboard_password_required"))
}
if (password !== confirm) {
throw new Error(t("pages.config.dashboard_password_mismatch"))
}
if (Array.from(password).length < 8) {
throw new Error(t("pages.config.dashboard_password_min_length"))
}
}
if (configDirty) {
const workspace = form.workspace.trim()
const dmScope = form.dmScope.trim()
if (!workspace) {
throw new Error("Workspace path is required.")
}
if (!dmScope) {
throw new Error("Session scope is required.")View on GitHub (pinned to 49183d7e8d)
Solutions
- Enter a value of at least 8 characters into both the password and confirm fields
- If you do not intend to change the password, make both fields identical to the baseline (empty and untouched) so the dirty flag clears
- Re-open the page to reset dirty state, then save without touching password fields
Defensive patterns
Strategy: validation
Validate before calling
const password = launcherForm.dashboardPassword.trim()
const confirm = launcherForm.dashboardPasswordConfirm.trim()
if (launcherPasswordDirty && (!password || !confirm)) {
setFieldError("Enter and confirm the new login password.")
return // do not call save
} Try / catch
try {
await handleSave()
} catch (err) {
// validation errors are expected user input feedback, not bugs
if (err instanceof Error) setError(err.message)
} Prevention
- Mark the confirm field required as soon as password is non-empty (and vice versa)
- Disable the save button while a dirty password field is empty
- Validate on blur so the user learns before hitting save
When it happens
Trigger: Typing into the confirm box only, typing then deleting the password, or entering only whitespace; save then proceeds to fail before any network call.
Common situations: User believes password is optional and only fills confirm; browser autofill marks the field dirty then clears it; user pastes whitespace by accident.
Related errors
- The login passwords do not match.
- Login password must be at least 8 characters.
- ${label} must be a JSON object.
- ${label}.${key} must be a string.
- Workspace path is required.
AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15).
Data as JSON: /api/errors/c00525441e451380.
Report an issue: GitHub.