Yeah, I'll add a note about that.
(def good-login (user pw ip)
(let record (list (seconds) ip user pw)
(if (and user pw (aand (shash pw) (is it (hpasswords* user))))
(do (unless (user->cookie* user) (cook-user user))
(enq-limit record good-logins*)
user)
(do (enq-limit record bad-logins*)
nil))))
It might be good to pull the pw out of the record list: ...
(let record (list (seconds) ip user)
...