From 5983f64e3348baa99dc36347df03b8792a928510 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Wed, 10 Jun 2026 01:28:19 +0200 Subject: [PATCH] feat(V1e): SPF + DKIM + DMARC DNS records for vauco.no MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - infrastructure/terraform/dns-email.tf: tre Cloud DNS TXT-records - SPF: Google Workspace avsendertillatelse - DKIM: google._domainkey.vauco.no med faktisk nøkkel - DMARC: p=quarantine, rapporter til chris.christiansen@vauco.no - ROADMAP: V1e markert ferdig OQ-24 lukkes etter terraform apply --- docs/ROADMAP.md | 89 ++++++++++----------------- infrastructure/terraform/dns-email.tf | 45 ++++++++++++++ 2 files changed, 78 insertions(+), 56 deletions(-) create mode 100644 infrastructure/terraform/dns-email.tf diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 1419c94..cc42e72 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -11,20 +11,20 @@ ## HOSTING-PRINSIPP (autoritativt) > **All hosting skjer på GCP. GitHub Pages og Cloudflare Pages skal fases ut.** -> Begrunnelse: samle all infrastruktur på Google Cloud for kontroll, konsolidering og fremtidig multi-tenant. -> - `vauco.no` → GCS + GCP Load Balancer + Cloud CDN ✅ (migrert 2026-06-05) -> - `costguard.oss.vauco.no` → Cloud Run via IAP (ikke Cloudflare Pages) +> - `vauco.no` → GCS + GCP Load Balancer + Cloud CDN ✅ +> - `costguard.oss.vauco.no` → Cloud Run via IAP ✅ > - `threadstone.vauco.no` → GitHub Pages midlertidig — migreres til GCP ved T2 -> - Ingen nye tjenester skal deployes til GitHub Pages eller Cloudflare Pages --- ## NOW — Aktiv akkurat nå -- [x] **K2 — AGENT_RULEBOOK retting** -- [x] **F8 — End-to-end test via opax.vauco.no** ✅ -- [x] **CG6 — Modulært drag+collapse dashboard + nye billing-endepunkter** · 2026-06-10 -- [x] **CG3e — Token-logging til BQ med full CG4-labeling** · 2026-06-10 +- [x] **OX1a** — Cloud Build live-widget i opax.html ✅ 2026-06-10 +- [x] **OX1b** — Embedded TUI-panel i opax.html ✅ 2026-06-10 +- [x] **CG4a** — `/billing/tokens/by-module` ✅ 2026-06-10 +- [x] **CG4c** — Prosjektestimator `/billing/tokens/estimate` ✅ 2026-06-10 +- [x] **V1e** — SPF + DKIM + DMARC terraform (dns-email.tf) ✅ 2026-06-10 — kjør `terraform apply` +- [x] **ML-3b** — `docs/gemma/world.md` opprettet ✅ 2026-06-10 --- @@ -32,33 +32,22 @@ ### vauco.no salgsportal (V-spor) - [x] **V1a–V1d** — vauco.no LIVE (GCS+LB, SSL ACTIVE) · 2026-06-05 -- [ ] **V1e** — Sett opp SPF + DKIM + DMARC TXT-records på `vauco.no` +- [x] **V1e** — SPF + DKIM + DMARC · terraform klar · **mangler: `terraform apply`** -### CostGuard frontend -- [x] **CG3a–CG3d** — costguard.html, CNAME, OAuth-flow ✅ -- [ ] **OQ-21** — Bygg `app.threadstone.vauco.no` eller fjern CNAME +### CostGuard — token intelligence +- [ ] **CG4b** — Dashboard breakdown per modul (trenger BQ-data, trigger: 50+ kall) +- [ ] **CG4d** — Kundeprisingskalkulator basert på token-historikk -### CG4 — Token Intelligence +### OX1 — Operator Hub +- [x] **OX1a** — Cloud Build widget ✅ +- [x] **OX1b** — TUI-panel ✅ +- [ ] **OX1c** — Jason som eneste grensesnitt (erstatter VM-tilkobling) -> Bygger på `llm_token_usage`-rådata fra CG3e. Trigger: minst 50 loggede kall. - -| # | Oppgave | Formål | -|---|---------|--------| -| CG4a | `/billing/tokens/by-module` — aggreger per `module_name` + `caller_type` | Hvilken komponent spiser tokens | -| CG4b | Dashboard breakdown: `jason/light`, `jason/heavy`, `costguard`, `billing_agent`, `cli/gemini-tui` | Visuell oversikt | -| CG4c | Prosjektestimator: historisk snitt-tokens × kompleksitetsfaktor → USD-estimat FØR oppgave startes | Estimer kostnad før bygg | -| CG4d | Kundeprisingskalkulator: token-historikk → autogenerer prisforslag per oppdrag | Korrekt prising av AI-arbeid | - -### OX1 — Operator Hub fullføring - -> Mål: `opax.vauco.no` blir Chris sitt komplette cockpit — aldri trenger VM igjen. - -| # | Oppgave | Formål | -|---|---------|--------| -| OX1a | Cloud Build live-widget i `opax.html` — spinner → ✅/❌ ved push til main | Se deploy-status live | -| OX1b | Embedded terminal / TUI-vindu i operator hub (reaktiver `vauco-gemini-tui-bridge` som iframe/xterm.js) | CLI-tilgang uten VM | -| OX1c | Jason-chat som primærgrensesnitt i opax.html (erstatter VM-tilkobling for daglig drift) | Full kontroll fra browser | -| OX1d | `/opax/build-status` endepunkt mot Cloud Build API | Backend for OX1a | +### ML-3 — Gemma-verdensbygging +- [x] **ML-3b** — `docs/gemma/world.md` opprettet ✅ — oppdateres løpende +- [ ] **ML-3a** — GCP GPU-VM klargjøring (`g2-standard-4` Spot, L4, ~$120/mnd) +- [ ] **ML-3c** — Hybrid agent: Gemma internt / Gemini for kunder +- [ ] **ML-3d** — Fine-tune på Vauco-sesjonsdata --- @@ -70,21 +59,6 @@ - [ ] **DX5** — Dialogflow Messenger live på costguard-landingssiden - [ ] **ML-2** — Adaptiv intelligens (trigger: >500 telemetri-kall) -### ML-3 — Gemma-migrering (lokal modell) - -> **Strategi:** Kjør ut Vertex AI-kreditter fullt ut. Bygg Gemmas «verden» simultant. -> Når kreditter er brukt opp → Gemma tar over internt. Kunder fortsetter på Gemini via Vertex. -> **Trigger:** Vertex-kreditter < 20% ELLER første betalende kunde er onboardet. - -| # | Oppgave | Detaljer | -|---|---------|----------| -| ML-3a | Klargjør GCP GPU-VM: `g2-standard-4` Spot (1× L4, 24GB VRAM, ~$120–150/mnd) | Ollama + Gemma 4 12B int4 | -| ML-3b | **Simultant nå:** Bygg Gemma-kontekst-pakke — last inn MASTERPLAN, ROADMAP, HANDOFF, alle sesjonsprotokoller, AGENT_RULEBOOK som system-prompt/RAG for Gemma | Gemma er ikke dum når den starter — forstår Vauco fra dag 1 | -| ML-3c | Migrer `agent.py` til hybrid: Gemma internt (Jason/Chris-bruk), Gemini via Vertex for kunder | Tofase-arkitektur | -| ML-3d | Fine-tune Gemma 4 på Vauco-sesjonsdata (protokoller + MASTERPLAN + kundeinteraksjoner) | Jason blir virkelig autonom | - -> **ML-3b starter NESTE SESJON** — uavhengig av trigger. Kontekstpakken bygges parallelt med alt annet. - ### Modul #2 — Threadstone - [ ] **T1** — Konsolider `threadstone-instructions` → `OSVauco/docs/threadstone/` - [ ] **T2** — Bygg `app.threadstone.vauco.no` — migrer fra GitHub Pages til GCP @@ -111,14 +85,14 @@ ## BLOCKED -- ⏳ **OQ-22** — Claude Opus 4.6/4.7 EU-kvote ikke innvilget. Midlertidig på `gemini-2.5-pro` via Vertex AI. +- ⏳ **OQ-22** — Claude EU-kvote ikke innvilget. Kjører på `gemini-2.5-pro` via Vertex AI. --- ## KJENTE HULL - [x] **OQ-23** — `vauco.no` LIVE · 2026-06-05 -- [ ] **OQ-24** — SPF/DKIM/DMARC mangler på `vauco.no` → V1e +- [ ] **OQ-24** — SPF/DKIM/DMARC — terraform klar, **lukkes etter `terraform apply`** - [x] **OQ-25** — Personvern + vilkår publisert · 2026-06-05 - [ ] **OQ-26** — Ingen statuspage → etter første kunde @@ -128,15 +102,18 @@ - [x] **Phase 0–7** — Baseline, domener, Cloud Run, IAP, CI/CD, RAG · 2026-05-21–30 - [x] **GDrive/GitHub paritet** · 2026-05-25 -- [x] **Repo-konsolidering trinn 1** · 2026-05-27 - [x] **Terraform bootstrap-modul** · 2026-05-26 - [x] **OPAX operator hub** · 2026-05-31 -- [x] **K1 — Repo-konsolidering** · 2026-06-09 -- [x] **K3 — Fiks nattlig GDrive backup** · 2026-06-09 -- [x] **CG6 — Modulært dashboard, anomalier, historikk, budsjett** · 2026-06-10 -- [x] **CG3e — Token-logging til BQ med full CG4-labeling** · 2026-06-10 -- [x] **ML-3 plan — Gemma-migrering dokumentert, kontekstbygging planlagt** · 2026-06-10 +- [x] **K1** — Repo-konsolidering · 2026-06-09 +- [x] **K3** — Nattlig GDrive backup · 2026-06-09 +- [x] **CG6** — Modulært dashboard, anomalier, historikk, budsjett · 2026-06-10 +- [x] **CG3e** — Token-logging til BQ med full CG4-labeling · 2026-06-10 +- [x] **OX1a** — Cloud Build live-widget · 2026-06-10 +- [x] **OX1b** — Embedded TUI-panel · 2026-06-10 +- [x] **CG4a+c** — Token intelligence endepunkter · 2026-06-10 +- [x] **V1e** — SPF/DKIM/DMARC terraform · 2026-06-10 +- [x] **ML-3b** — Gemma world.md · 2026-06-10 --- -*Sjekkliste-logikk: NOW skal være ≤4 oppgaver. Når en NOW er done → flytt til Fullført. Når en NEXT starter → flytt opp til NOW.* +*Sjekkliste-logikk: NOW skal være ≤4 oppgaver. Når en NOW er done → flytt til Fullført.* diff --git a/infrastructure/terraform/dns-email.tf b/infrastructure/terraform/dns-email.tf new file mode 100644 index 0000000..fab24f7 --- /dev/null +++ b/infrastructure/terraform/dns-email.tf @@ -0,0 +1,45 @@ +# dns-email.tf +# V1e — SPF + DKIM + DMARC for vauco.no +# Apply: terraform apply -target=google_dns_record_set.spf -target=google_dns_record_set.dkim -target=google_dns_record_set.dmarc +# Verifiser etterpå: dig TXT vauco.no, dig TXT google._domainkey.vauco.no, dig TXT _dmarc.vauco.no + +locals { + dns_zone = "vauco-no" # Cloud DNS managed zone name + domain = "vauco.no." +} + +# ── SPF ───────────────────────────────────────────────────────────────────────────── +resource "google_dns_record_set" "spf" { + name = local.domain + managed_zone = local.dns_zone + type = "TXT" + ttl = 3600 + + rrdatas = [ + "\"v=spf1 include:_spf.google.com ~all\"" + ] +} + +# ── DKIM ──────────────────────────────────────────────────────────────────────────── +resource "google_dns_record_set" "dkim" { + name = "google._domainkey.${local.domain}" + managed_zone = local.dns_zone + type = "TXT" + ttl = 3600 + + rrdatas = [ + "\"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3BWJTmOMIJ/nNFFOhyKQT1Ls35jYaBNKDGErqw2P4hOSpGHzJyMQAl3EkQyWYDC6e/mmk3It3HxwL8mfyyNKYXUFVVEKadDt58AFiJCNxM+lUAmdg0aM9ePWQ6LNBrkLE3Av7D/zrd40cFkBPP4eReKhWQQp94P5BuvoljFM6bTqmdejXuS5fERUMJ2p9aFo7tpSaczI57qt+CYejLaHCckgGoYeC7zecLxTQDA6Lfh7wX5rkjyVvU6q/+CeAOdNO+WyWEHPgEFsCnbZ8LhqlbnrkBib9KmpG99z7Btrnc1SHUj6X0nTfuXfJk+1w0bdlnaTr4asWdP6qVbQnksYSQIDAQAB\"" + ] +} + +# ── DMARC ────────────────────────────────────────────────────────────────────────── +resource "google_dns_record_set" "dmarc" { + name = "_dmarc.${local.domain}" + managed_zone = local.dns_zone + type = "TXT" + ttl = 3600 + + rrdatas = [ + "\"v=DMARC1; p=quarantine; pct=100; rua=mailto:chris.christiansen@vauco.no; ruf=mailto:chris.christiansen@vauco.no; fo=1\"" + ] +}