No description
Bygget: ny app/email.py (send_magic_link_email, kjører smtplib via asyncio.to_thread siden det er synkront, håndterer både implisitt TLS (port 465) og STARTTLS dynamisk siden jeg bevisst ikke leste TEECUP_SMTP_PORT-verdien). app/config.py fikk nye, valgfrie innstillinger — SMTP_CONFIGURED er IKKE _required, så scratch-/dev-testing fortsatt fungerer uendret uten SMTP satt opp. Sikkerhetsdesign: en driftsfeil i selve utsendingen (feil passord, SMTP nede, eller ingenting konfigurert) logges kun server-side og endrer aldri klientresponsen — bevarer request-link sitt anti-enumereringsvern. Verifisert i to trinn: Dev-log-flyten uendret uten SMTP satt (regresjonstest). Én ekte test-e-post sendt til hei@erol.no, med credentials videreført fra .env til scratch-containeren uten at jeg noensinne leste verdiene — du bekreftet mottak. Dette er første gang noe i prosjektet er bevist ved ekte, ekstern levering fremfor bare curl/scratch-container. CLAUDE.md/FEATURE_BACKLOG.md oppdatert. |
||
|---|---|---|
| .claude | ||
| __pycache__ | ||
| app | ||
| .gitignore | ||
| 001_initial_schema.sql | ||
| 002_roles_and_grants.sql | ||
| 003_scoring_and_blinddraw.sql | ||
| 004_auth.sql | ||
| 005_rls_null_guard.sql | ||
| ARCHITECTURE_DECISIONS.md | ||
| CLAUDE.md | ||
| FEATURE_BACKLOG.md | ||
| handicap_engine.py | ||
| test_handicap_engine.py | ||
| test_isolation.sql | ||