201 lines
7.6 KiB
Markdown
201 lines
7.6 KiB
Markdown
# 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 |
|
|
|---|---|
|
|
| `<prosjekt>.oss.vauco.no` | Staging / demo |
|
|
| `<prosjekt>.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 ·*
|