Yellow Theme

Next start · November 2026

Notes / Engineering note

Part of the yellow theme method · stage 1

2026-10-03

The password form is ours

Native password stays on our login form. The hosted login page is only for Google handoff — do not rebuild hosted as a password form.

Thesis: Password and MFA belong on the app form we control. Hosted authorize is the Google (federated) door. Posting a password to hosted is the wrong shape.

What we shipped first

We collected email on our login page, then for native users advanced to a password step. An earlier path still treated hosted login as the place to finish password sign-in. That mixed two doors: our form and the hosted authorize URL.

The fix kept password (and MFA) on our form via the app-origin sign-in path. Google alone opens hosted authorize. We did not rebuild the hosted page into a password form.

The working shape

After email continue: Google → hosted authorize with the identity provider. Password → stay on our form and submit there only. Never POST the password to the hosted authorize URL.

// Password stays on our form. Hosted login is Google handoff only.
async function continueWithEmail(email, lookup) {
  if (lookup.identityProvider === "Google") {
    return authorizeHosted({ identityProvider: "Google" }); // hosted UI
  }
  return showPasswordStep(email); // our form — USER_SRP_AUTH
}

// Do not POST the password to the hosted authorize URL.

Checklist

Try the lab

Observe the hosted password failure, name the wrong door, choose “password on our form / hosted for Google,” then prove. Commands: observe · why · fix · prove.

Full page: Open this lab · All labs

Related: hosted login cannot carry the full legal footer. How we deliver: methodology · readiness.

Engineering commentary only — not audit, legal, or certification advice.