Skip to content

Security: code-only password reset, evidence-first site, and production hardening - #302

Merged
thecelestialmismatch merged 2 commits into
mainfrom
manus/p0-auth-product-launch
Aug 19, 2026
Merged

Security: code-only password reset, evidence-first site, and production hardening#302
thecelestialmismatch merged 2 commits into
mainfrom
manus/p0-auth-product-launch

Conversation

@thecelestialmismatch

Copy link
Copy Markdown
Owner

Release scope

This PR promotes validated P0/P1 security remediation and product-readiness improvements from commit 44e8e1d.

Authentication hardening

  • Replaces URL-borne password-recovery artifacts with an app-owned code-entry reset flow.
  • Adds server-side reset completion, password policy enforcement, hash-only reset-code storage, atomic single-use consumption, rate limiting, and CAPTCHA escalation.
  • Makes server auth routes mandatory in production and makes CAPTCHA fail closed when its secret is absent.

Database migrations

  • 035_password_reset_codes.sql: HMAC-hashed, expiring, single-use password-reset codes.
  • 036_revoke_public_security_definer.sql: removes public execution of privileged RPCs.

Both migrations have been applied and verified in production Supabase project qifynzuyrdxmxlumpsrq.

Product and dashboard updates

  • Updates public website messaging to evidence-first control-boundary positioning.
  • Adds the authenticated-only operational-readiness panel based on actual health signals.
  • Adds release, reset-architecture, pre-deployment, and market-outreach documentation.

Validation

  • 206 test files / 2,908 tests passed.
  • TypeScript passed with build errors enabled as release-blocking.
  • Production build passed.

Required production gates before promotion

  • Configure AUTH_RESET_CODE_PEPPER in Vercel.
  • Configure TURNSTILE_SECRET_KEY and NEXT_PUBLIC_TURNSTILE_SITE_KEY in Vercel.
  • Enable leaked-password protection in the Supabase Auth dashboard.
  • Keep CRON_SECRET unset until email and outreach controls are verified.

Closes the audit P0/P1 remediation scope.

@vercel

vercel Bot commented Aug 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
compliance-firewall-agent Ready Ready Preview Aug 19, 2026 2:34am

@supabase

supabase Bot commented Aug 18, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project qifynzuyrdxmxlumpsrq because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

Brings #300..#306 onto this branch and resolves the two conflicts, both
on the homepage stat row.

Both sides rewrote the SAME tile: this branch replaced the Netskope
figure with "2 / deployment paths", while main (#301) kept the figure
and corrected its denominator. The grid is a hard `repeat(4, 1fr)`
(app/hermes.css:263), so a fifth tile orphans on its own row — it is
genuinely one or the other, not a merge both sides can win.

Resolved to main's tile, because keeping it loses nothing. <ModeBNotice>
renders IMMEDIATELY below this row and already states both deployment
paths with the honesty the NEVER-DO list requires: "CUI-safe = Mode B
(Docker on your infrastructure); the hosted trial runs on Vercel and is
not FedRAMP-authorized." The deployment distinction therefore survives
in a richer form, and it is still asserted by the Mode-B notice test.
The Netskope figure has no second home on the page, and it is the market
proof for the fastest-closing buyer.

The matching test conflict is resolved the same way: the tile assertions
follow the source, and the branch's `not.toContain('~80,000')` guard
against unverifiable statistics is kept.

Gates on the merged tree: tsc 0 · eslint 0 errors (35 pre-existing
warnings) · 2970/2970 tests pass in 211 files · production build clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ugr8hJemeERsbKeTryM5Q
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants