From 74ad7d70110061d23766c755a0031141582832fc Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 16:15:26 +0000 Subject: [PATCH] =?UTF-8?q?Legg=20til=20fase=2026:=20epost=20=E2=80=94=20s?= =?UTF-8?q?end/motta=20via=20synops.no?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 7 oppgaver: username i auth_identities, msmtp utgående, MX-records, Postfix mottak, synops-mail CLI med "Kjære vaktmester"-filter, domene-alias (alle domener → samme bruker), utgående varsler. Co-Authored-By: Claude Opus 4.6 (1M context) --- scripts/run-next-task.sh | 1 + tasks.md | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/scripts/run-next-task.sh b/scripts/run-next-task.sh index 9fc02a1..c1d61db 100755 --- a/scripts/run-next-task.sh +++ b/scripts/run-next-task.sh @@ -43,6 +43,7 @@ declare -A PHASE_DEPS=( [23]="22" [24]="23" [25]="24" + [26]="25" ) # --- Finn blokkerte faser --- diff --git a/tasks.md b/tasks.md index 4d0689b..a7d3a6a 100644 --- a/tasks.md +++ b/tasks.md @@ -46,6 +46,7 @@ Fase 12 → Fase 22 (SpacetimeDB-migrering — fullført) Fase 22 → Fase 23 (validering — alle faser) Fase 23 → Fase 24 (orkestrering) Fase 24 → Fase 25 (web clipper) +Fase 25 → Fase 26 (epost) ``` Hvis en oppgave er `[?]` eller `[!]`, hoppes den over — og alle @@ -333,3 +334,17 @@ Readability, og oppretter innholdsnode med AI-beriking. Brukes av @bot i chat - [ ] 25.2 Node-opprettelse: `synops-clip --write` oppretter `content`-node med artikkelinnhold, `metadata.source_url`, og `tagged`-edge "clipped". AI-oppsummering via LiteLLM. `mentions`-edges til gjenkjente entiteter i kunnskapsgrafen. - [ ] 25.3 @bot-integrasjon: bruker limer inn URL i chat → boten gjenkjenner URL, kaller `synops-clip`, presenterer oppsummering i chatten, oppretter node i bakgrunnen. Ved paywall: "Denne artikkelen er bak betalingsmur. Jeg fikk med tittel og ingress — lim inn innholdet om du vil dele resten." - [ ] 25.4 Orkestrering-støtte: `synops-clip` tilgjengelig som verktøy i orkestreringer. F.eks. "Clip alle URL-er som deles i #Redaksjonen og oppsummer dem". + +## Fase 26: Epost — send og motta via synops.no + +Vaktmesteren kan sende epost (msmtp) og motta epost (Postfix → synops-mail). +Brukernavn@domene ruter til brukerens innboks. Alle domener (synops.no, +sidelinja.org, vegard.info) ruter til samme bruker basert på username. + +- [ ] 26.1 Username i auth_identities: legg til `username`-kolonne, populer fra Authentik `preferred_username` ved login. Unik constraint. Oppdater auth-callback i SvelteKit til å lagre username. +- [ ] 26.2 msmtp oppsett: konfigurer utgående epost via SMTP-relay. Avsender: `vaktmester@synops.no`. Tilgjengelig som `synops-mail --send --to --subject ` CLI-verktøy. +- [ ] 26.3 MX-records: sett opp MX for synops.no, sidelinja.org, vegard.info som peker til serveren. +- [ ] 26.4 Postfix minimal: installer Postfix som lokal MTA kun for mottak. Ingen relay, ingen kø for utgående. Pipe innkommende epost til `synops-mail --receive`. +- [ ] 26.5 `synops-mail --receive`: Rust CLI som leser raw epost fra stdin. Sjekk 1: avsender-epost matcher `auth_identities.email`? Sjekk 2: innhold starter med "Kjære vaktmester" (eller konfigurerbar frase)? Begge må matche. Opprett `content`-node i brukerens innboks med epostinnholdet. Alt annet → /dev/null, ingen bounce. +- [ ] 26.6 Domene-alias: `vegard@synops.no`, `vegard@sidelinja.org`, `vegard@vegard.info` ruter alle til samme bruker via username-oppslag i PG. Domenet er irrelevant. +- [ ] 26.7 Utgående varsler: vaktmesteren kan sende epost-varsler til brukere (ny oppgave tildelt, innsendt artikkel godkjent, etc.) via `synops-mail --send`. Konfigurerbart per bruker i metadata.preferences.