Från app/:
npm ci
npm run validate
validate omfattar:
cd app
npm run dev
Använd lokal runtime för request- och API-förändringar innan produktion berörs.
Migrationerna ligger i infra/migrations/.
Produktionsmigration:
cd app
npm run migrate:production
Före migration:
npm run validate.För migration 0003_generalize_public_contacts.sql var ordningen migration först, därefter Worker-deploy. Den skapade legacy-vyer för politicians och politician_assignments samt en begränsad compatibility-trigger för cutover. Current Worker och kontaktverktyg använder nu canonical public_contacts / public_contact_assignments. Migration 0005_drop_public_contact_legacy_views.sql tar därför bort endast de tre temporära D1-objekten. Verifiera före production migration att current Worker-versionen är deployad och efter migration att canonical tabellerna finns kvar samt att legacyobjekten saknas.
Vid leveransproblem, kontrollera i ordning:
CredentialRateLimiter och credentialgräns;Manuell återkörning ska inte vara första åtgärd eftersom persistent state och queue-state måste vara konsistenta.
Felsök ett lagrat SMTP-konto i den här ordningen:
Det sparade SMTP-lösenordet kan inte dekrypteras betyder att den lagrade credentialen inte kan läsas med aktuell MAIL_CRED_KEY. Rotera inte MAIL_CRED_KEY som felsökningsåtgärd; använd Uppdatera lösenord för att testa och kryptera credentialen på nytt.535 betyder att SMTP-servern avvisade credentialen. För iCloud används smtp.mail.me.com:587 med STARTTLS och ett appspecifikt lösenord.Uppdatera lösenord autentiserar det inmatade värdet mot den befintliga SMTP-host/user/from-konfigurationen innan encrypted_password och verified_at skrivs. Ett misslyckat test ändrar alltså inte den lagrade credentialen.
Verifiera binding, objektkey och metadatarelation innan objekt raderas eller skrivs om. Objektinnehåll ska inte användas som generell debugdump.
Kontrollera:
Lös inte authfel genom att göra privata routes publika.
Produktion driftsätts från en renderad kopia med dina egna värden, se avsnittet om Cloudflare i README.md. I den renderade app/-katalogen:
npm run validatenpm run migrate:productionnpm run deploynpm run verify:productionCI på GitHub kör tester, Docker-bygge och CodeQL vid varje push till main. Det finns ingen förhandsmiljö. Kontaktdata, inklusive akademiker, uppdateras separat av kvartalskörningen i kontakter/, inte vid driftsättning.
Persistent logs/traces använder sampling och query-string-redaction. Lägg inte credentials, tokens, mailinnehåll eller privata API-payloads i loggar.
Scripts under kontakter/scraper/ är operativa verktyg, inte alternativa sources of truth. Verifiera target/config före D1-relaterade operationer och dokumentera nya underhållsflöden här.
Repot innehåller inga kontaktlistor och inga källkataloger. Skriptens källor (kommuner och regioner, redaktioner, akademiska kontakter, kyrkans sidor) ligger i JSON-filer i en egen katalog utanför repot som CONTACT_SOURCES_DIR pekar ut; format och exempel finns i kontakter/sources.example/. quarterly_refresh.sh stoppar om variabeln saknas.
quarterly_refresh.sh uppdaterar även akademiska yrkeskontakter via fetch_academics.py. Endast e-postadresser som lärosätena själva publicerar används, adressen måste höra till samma lärosäte som källsidan, och officiell source_url sparas per post. --dry-run visar urvalet utan D1-skrivningar.