What happens when HIBP, email, or native bot controls are unavailable?
HIBP sends only a five-character SHA-1 prefix, uses a 60-second prefix-only cache, and bounds misses at two seconds. Initial login fails open on HIBP error; new-password confirmation fails closed. Cloudflare Email Service is the approved provider.
Success criteria / proof
Only breached valid logins enter remediation.The edge requires both the breach result and authoritative origin credential validation before creating pending state.
No session is issued on remediation.Browser responses redirect to the remediation page; API responses return the password-change-required response without an app session.
Clean logins remain normal.A clean, valid login passes through the normal origin authentication path without pending remediation.
OTP mutation order is enforced.Both mutation routes require CSRF, then Turnstile, before OTP state changes, email, validation, or reset.
Secrets stay out of edge storage.The edge stores only pending metadata and OTP hashes; login and new-password material is not persisted or logged.
Provider and native controls remain separate.Cloudflare Email Service handles delivery, while native Bot Management does not replace Worker-level CSRF and Turnstile checks.
These are intentionally public, synthetic PoC accounts seeded by the S6 origin. They are not real credentials. Use them to reproduce the before/after behavior:
Fixture
Email
Password
Expected on capability
Operator-approved breached + valid credential
alice@thecompany-lab.com
password
Remediation, no session
Operator-approved clean + valid credential
bob@thecompany-lab.com
Str0ng-Unique-Passphrase!2026
Normal login success
The breached fixture is intentionally known to HIBP. The origin persists password resets, so use an isolated deployment for the full remediation flow.
Run a read-only validation. Each row names the action, expected result, observed result, and status; no account or origin state is changed.
Not run yet.
3. Command-line verification (copy and run)
Run these steps in one terminal. Set the fixture variables in your shell using the seeded values above; do not put credential values directly into the commands.
Step 1 — Observe the before login
The direct origin handles the login normally and may issue an application session.
: "${S6_EMAIL:?Set S6_EMAIL in your shell}"
: "${S6_PASSWORD:?Set S6_PASSWORD in your shell}"
: "${S6_CLEAN_EMAIL:?Set S6_CLEAN_EMAIL in your shell}"
: "${S6_CLEAN_PASSWORD:?Set S6_CLEAN_PASSWORD in your shell}"
curl -sS -D - -X POST https://s6-origin.thecompany-lab.com/login -H 'Content-Type: application/json' -H 'Accept: application/json' -d "{"email":"${S6_EMAIL}","password":"${S6_PASSWORD}"}"
Step 2 — Verify the intercepted API response
The same breached-valid fixture through the capability should return the password-change-required response without an app session.