t2-p1-04authored4–7h

Authentication with hashed passwords and JWT

requires: t2-p1-03

Email and password signup and login, with passwords stored using bcrypt or argon2, JWT issuance on login, and middleware attaching the authenticated user and org to every request.

Password storage is the one thing here where getting it wrong is catastrophic and silent - a plaintext or unsalted-hash column works perfectly until the day it is catastrophic. Note what the verifier can and cannot see: storage form is not observable over HTTP, so it proves the credential never comes back, that a wrong password is rejected identically to an unknown account, and that the token is genuinely signed - then checks separately that a real hashing library is present. Those two together are the honest maximum from outside the process.

No result yet. Run `learn verify t2-p1-04` locally, or push to trigger CI.

contractcontract: t2_p1_04_auth
unrun
reporepo: file_exists
unrun