fix(auth): gate registration rate limit to production only #224

Closed
Claude-Run wants to merge 549 commits from fix/bunyip-197-registration-rate-limit-nonprod into main
Member

The per-IP registration cap (3/hour) is an anti-abuse control for the public production deployment. bunyip's e2e suite runs against a deployed staging instance and self-provisions disposable accounts via registerDisposable() from the single CI runner egress IP; registrations accumulate across serial runs inside the one-hour window and trip a spurious 429 RATE_LIMITED, failing the change-email, magic-link, and password-reset specs.

There is no test-side workaround: each disposable account needs a fresh unique email, so the accounts cannot be pre-seeded or reused the way the shared login account is. Apply the cap only when config.is_production(); staging/dev register unthrottled. Production keeps the existing 3/hour/IP limit unchanged.

#BUNYIP-197

The per-IP registration cap (3/hour) is an anti-abuse control for the public production deployment. bunyip's e2e suite runs against a deployed staging instance and self-provisions disposable accounts via registerDisposable() from the single CI runner egress IP; registrations accumulate across serial runs inside the one-hour window and trip a spurious 429 RATE_LIMITED, failing the change-email, magic-link, and password-reset specs. There is no test-side workaround: each disposable account needs a fresh unique email, so the accounts cannot be pre-seeded or reused the way the shared login account is. Apply the cap only when config.is_production(); staging/dev register unthrottled. Production keeps the existing 3/hour/IP limit unchanged. #BUNYIP-197
fix(auth): gate registration rate limit to production only
Some checks failed
E2E / Playwright against deployment (pull_request) Failing after 19s
Check / fmt + clippy + build + tests (pull_request) Successful in 2m19s
Create release / Create release from merged PR (pull_request) Has been skipped
6158416a4c
The per-IP registration cap (3/hour) is an anti-abuse control for the public production deployment. bunyip's e2e suite runs against a deployed staging instance and self-provisions disposable accounts via registerDisposable() from the single CI runner egress IP; registrations accumulate across serial runs inside the one-hour window and trip a spurious 429 RATE_LIMITED, failing the change-email, magic-link, and password-reset specs.

There is no test-side workaround: each disposable account needs a fresh unique email, so the accounts cannot be pre-seeded or reused the way the shared login account is. Apply the cap only when config.is_production(); staging/dev register unthrottled. Production keeps the existing 3/hour/IP limit unchanged.

#BUNYIP-197
nrupard closed this pull request 2026-06-25 16:39:55 +02:00
David deleted branch fix/bunyip-197-registration-rate-limit-nonprod 2026-06-28 23:06:34 +02:00
Some checks failed
E2E / Playwright against deployment (pull_request) Failing after 19s
Required
Details
Check / fmt + clippy + build + tests (pull_request) Successful in 2m19s
Required
Details
Create release / Create release from merged PR (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/bunyip!224
No description provided.