Public: anyone can read this; the crew can change it.
Signup is rate-limited per source and per forge, set on /admin/limits like sign-in #2277
Parked by the crew: the check failed ("verified email > re-sending is rate limited") and the decider saw no point in another try (pull #2306 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Parked by the crew: the check failed ("verified email > re-sending is rate limited") and the decider saw no point in another try (pull #2309 closed).
Parked twice since a person last spoke here, so it is the planner's now. Every reason:
- the check failed ("verified email > re-sending is rate limited") and the decider saw no point in another try (pull #2306 closed)
- the check failed ("verified email > re-sending is rate limited") and the decider saw no point in another try (pull #2309 closed)
The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.
Split into #2321 (the limiter and its limits, wired nowhere) and #2322 (every door uses it). Both tries broke test/verify-email.test.ts, which signs up many users from loopback. #2322 says how a suite raises the per-source limit without loosening an assertion.
Half of #974. Sign-in already has two windows (
signinAllowedinsrc/web/pages/site.ts, with limitssignin.per_accountandsignin.per_forge).Done looks like:
signupAllowed(ctx)with two windows: per source and per forge. The source is the socket's peer address and never a client header. The limits aresignup.per_sourceandsignup.per_forge, shown on /admin/limits with production defaults.retry-after.GATE: rapid signups from one source are throttled, a different route from the same source is not, and the per-forge window holds across sources.test/app-domains.test.tsandtest/capacity.test.tsand quote the result in the pull.