sipeed/picoclaw · warning

The login passwords do not match.

Error message

The login passwords do not match.

What it means

Validation error thrown in handleSave (web/frontend/src/components/config/config-page.tsx:305, message from i18n key pages.config.dashboard_password_mismatch) when the trimmed password and confirm strings differ while the password fields are dirty. Standard double-entry confirmation for POST /api/auth/setup; it is purely client-side and fires before any request.

Source

Thrown at web/frontend/src/components/config/config-page.tsx:305

          ? 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.")
        }

        if (

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Re-enter the same password in both fields and save again
  2. Check for a trailing/leading space in one field — trim is applied, so an internal-only difference such as capitalization is the cause
  3. Use a password manager paste rather than manual typing to avoid typos
Defensive patterns

Strategy: validation

Validate before calling

if (launcherPasswordDirty && password !== confirm) {
  setFieldError("The login passwords do not match.")
  return
}

Try / catch

try {
  await handleSave()
} catch (err) {
  if (err instanceof Error) setError(err.message) // show next to confirm field
}

Prevention

When it happens

Trigger: Typing different values in dashboardPassword vs dashboardPasswordConfirm, trailing/leading whitespace in exactly one field (both are trimmed before comparison), or paste errors.

Common situations: Caps Lock on for one field, autocomplete filling only one input, user re-types password differently, or invisible trailing space pasted into one field.

Related errors


AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15). Data as JSON: /api/errors/19e0e2acd014bdc5. Report an issue: GitHub.