# HANDOFF — Vauco OS **Sist oppdatert:** 2026-06-05 **Skrevet av:** Jason Vauger (via Perplexity) på vegne av Chris Christiansen **Status:** Plan for OQ-15 (CostGuard BQ-integrasjon) er klar. Implementering er parkert i påvente av `PLAN APPROVED`. --- ## 🟡 OQ-15: Plan for CostGuard BigQuery-integrasjon (Klar til implementering) - **Analyse fullført:** Koden for `/billing/summary` i `ml/billing_agent.py` er lokalisert. - **SQL-spørring designet og verifisert:** Følgende SQL er testet mot BigQuery og returnerer korrekte data: ```sql SELECT DATE(usage_start_time) AS usage_date, project.id AS project_id, service.description AS service, SUM(cost) AS daily_cost FROM `propane-will-491900-m5.billing_export.gcp_billing_export_v1_0171F6_057E6B_A260BA` WHERE _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) GROUP BY usage_date, project_id, service ORDER BY usage_date DESC, daily_cost DESC LIMIT 100 ``` - **Python-utkast forberedt:** Følgende funksjon er klar til å erstatte den eksisterende `get_summary`-metoden i `ml/billing_agent.py`: ```python def get_summary(self): """ Retrieves the daily billing summary per project and service for the last 30 days. """ query = f""" SELECT DATE(usage_start_time) AS usage_date, project.id AS project_id, service.description AS service, SUM(cost) AS daily_cost FROM `{self.billing_table}` WHERE _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) GROUP BY usage_date, project_id, service ORDER BY usage_date DESC, daily_cost DESC LIMIT 100 """ query_job = self.bq_client.query(query) results = query_job.result() summary = [] for row in results: summary.append({ "usage_date": str(row.usage_date), "project_id": row.project_id, "service": row.service, "daily_cost": row.daily_cost }) if not summary: return { "onboarding_status": { "state": "awaiting_data", "message": "Fakturaeksport er aktiv, men inneholder ingen data for de siste 30 dagene ennå." } } return {"summary": summary} ``` --- ## 🎯 NESTE OPPGAVE (les denne først) **Etter `PLAN APPROVED` for OQ-15:** 1. Erstatt `get_summary`-metoden i `ml/billing_agent.py` med utkastet over. 2. Commit og deploy endringen til Cloud Run. 3. Verifiser `/billing/summary`-endepunktet live med `curl`. --- ## ✅ CostGuard Auth-fix (Fullført i forrige økt) - **Auth-ruter lagt til:** /auth/login, /auth/callback, /auth/me, /auth/logout. - **Container-startfeil løst:** `NameError` på `@require_auth` er fikset. - **Konklusjon:** Auth-laget for CostGuard er operativt. --- ## 🏗 Hva er dette prosjektet? Se `docs/MASTERPLAN.md` for full sannhet. Kortversjonen: ``` Vauco OS (plattform) └── OPAX (kommandosenter + salgsmodul-bygger, Cloud Run us-central1) ├── CostGuard (Modul #1 — live på costguard.oss.vauco.no) ├── Threadstone (Modul #2 — Q3 2026) └── [Modul #3+] ``` **OPAX = kommandosenter for ALLE prosjekter** (et prosjekt = en klient — samme ting). OPAX bygger, iscenesetter og publiserer prosjekter. OPAX er ikke bundet til noe enkelt prosjekts region. **Branding-konvensjon for prosjekter:** | Subdomene | Type | |---|---| | `.oss.vauco.no` | Staging / demo | | `.os.vauco.no` | Live produksjon | (Klient kan videresende eget domene, men kanonisk merkevare-label er alltid `*.vauco.no`.) Første betalende produkt: **CostGuard** (GCP-kostnadsanalyse via AI). --- ## ✅ Hva er faktisk ferdig (ikke spør om dette igjen) | Komponent | Status | |---|---| | Cloud Run `osvauco-agent` | ✅ Live, `us-central1` | | `opax.vauco.no` (LB + SSL) | ✅ Live, IP `34.98.77.173` | | IAP (`@vauco.no` only) | ✅ Aktivert | | PR #15 IAP /health-fix | ✅ Merget til main (commit 7a09871) | | CI/CD Cloud Build → Cloud Run | ⚠️ IKKE operativt — ingen trigger, siste builds FAILURE. Deploy MANUELT. | | RAG corpus `osvauco-corpus` | ✅ Populert, `europe-west1` | | OAuth2 (Google) | ✅ I Secret Manager | | AI-modell | ✅ `gemini-2.5-pro` via Vertex AI (us-central1) | | `costguard.oss.vauco.no` | ✅ Live (Cloudflare Pages) | --- ## 📋 Nøkkelinformasjon | Nøkkel | Verdi | |---|---| | GCP Project | `propane-will-491900-m5` | | Region (OPAX, LÅST) | `us-central1` | | Vertex AI endpoint | `us-central1` (kjører `GOOGLE_CLOUD_LOCATION=global` i praksis) | | Artifact Registry | `us-central1-docker.pkg.dev/propane-will-491900-m5/osvauco-repo` | | Cloud Run service | `osvauco-agent` | | Cloud Run URL (direkte) | `https://osvauco-agent-357036551735.us-central1.run.app` | | Public URL | `https://opax.vauco.no` | | LB IP | `34.98.77.173` | | AI-modell | `gemini-2.5-pro` | | Repo | `vauco-saas/OSVauco` | | Eier / Operatør | Chris Christiansen — `chris.christiansen@vauco.no` | | Agent-konto | `jason.vauger@vauco.no` | --- ## 🩺 Medisinsk prosjekt (Medioteq) — SEPARAT, IKKE OPAX Det medisinske prosjektet er et **eget, fremtidig prosjekt** som **ikke er opprettet ennå** og **ikke er prioritert**. Det påvirker IKKE OPAX sin region eller arkitektur. Når det opprettes, velges region (EU eller US) der og da, uavhengig av OPAX. Alle kliniske/`europe-north1`-regler gjelder KUN det prosjektet — ikke OPAX. --- ## ⚠️ Vanlige feil — ikke gjør disse - **Ikke opprett nye HANDOFF_YYYYMMDD-filer.** Det er kun denne. Overskriv den. - **Ikke re-merge PR #15** — allerede merget. - **Ikke sett opp CI/CD-triggere** — deploy manuelt. - **Ikke bytt til Claude før kvote er bekreftet** + `MODEL APPROVED` fra Chris. - **Ikke migrere fra us-central1** — regionen er låst for OPAX. - **Ikke rør IAP, OAuth, eller Secret Manager** uten eksplisitt `DEPLOY GODKJENT`. - **Ikke oppdater OAuth-klient redirect URIs uten domeneavklaring** — se Issue #16. - **Ikke hopp over HITL gates.** --- ## 📁 Viktige filer å lese (i denne rekkefølgen) 1. `docs/MASTERPLAN.md` — autoritativ sannhet 2. `docs/ROADMAP.md` — hva som skjer akkurat nå 3. `docs/HANDOFF.md` — denne filen 4. `docs/AGENT_RULEBOOK.md` — regler for hvordan agenter oppfører seg 5. `agents/jason-vauger.md` — Jason Vauger agentprofil 6. `AGENTS.md` — oversikt over alle agenter i ML-laget 7. `.gemini/GEMINI.md` — locked definitions og boot-protokoll 8. `docs/ARCHITECTURE.md` — teknisk arkitektur 9. `docs/OSVAUCO_OPAX_SESSION_LOG.md` — append-only sesjonshistorikk --- ## ⚠️ Vanlige feil — ikke gjør disse - **Ikke opprett nye HANDOFF_YYYYMMDD-filer.** Det er kun denne. Overskriv den. - **Ikke gjenopplive `VAUCO_OS_ROADMAP.md`.** Den er slettet 2026-05-31. Bruk `ROADMAP.md`. - **Ikke bytt til Claude før kvote er bekreftet** av Google Cloud-team + `MODEL APPROVED` fra Chris. - **Ikke migrere fra us-central1** — regionen er låst. - **Ikke rør IAP, OAuth, eller Secret Manager** uten eksplisitt `DEPLOY GODKJENT` fra Chris. - **Ikke opprett nye repos.** Vurder mappe i `OSVauco` først. Krever `REPO APPROVED`. - **Ikke hopp over HITL gates** — hver fase avsluttes med et godkjenningssignal. - **Ikke oppdater OAuth-klient redirect URIs uten domeneavklaring** — se Issue #16. --- *Vauco AS · propane-will-491900-m5 · `us-central1` · Powered by Jason, Crafted by Vauco ·*