196 lines
7.0 KiB
Markdown
196 lines
7.0 KiB
Markdown
# HANDOFF — Vauco OS
|
|
|
|
**Sist oppdatert:** 2026-06-13 06:46 CEST
|
|
**Skrevet av:** Perplexity (stand-in) via GitHub MCP
|
|
**Sprint:** CG4-credits — credits-panel levert, IAP-test blokkert
|
|
|
|
---
|
|
|
|
## ✅ Gjort denne sesjonen (2026-06-13 — morgen)
|
|
|
|
| Commit | Task | Detalj |
|
|
|--------|------|--------|
|
|
| [`f58ec09`](https://github.com/vauco-saas/OSVauco/commit/f58ec09d4c076b6e552eb06593e919c385673492) | **CG4-credits** `static/billing-dashboard.html` | Credits-panel lagt til: 4 KPI-kort (brukt/gjenstår/burn/runway), animert progress-bar, advarselsbanner, kreditter-per-type liste. Auto-poll hvert 5 min via `fetchCredits()` i `fetchAll()`. |
|
|
| Eksisterende | **CG4-credits** `ml/billing_agent.py` | `get_credits_status(days=90)` allerede implementert — 4 BQ-queries, runway-beregning, `GOOGLE_CREDIT_TOTAL_USD` env-var støtte. |
|
|
| Eksisterende | **CG4-credits** `main.py` | `GET /billing/credits` rute allerede registrert og koblet til `BillingAgent.get_credits_status()`. |
|
|
|
|
---
|
|
|
|
## 🔴 Blokkert — `GET /billing/credits` ikke testet i prod
|
|
|
|
### Problem 1: `cloud-run-proxy` ikke installert på dev-VM
|
|
|
|
```
|
|
gcloud run services proxy ... → krever cloud-run-proxy component
|
|
```
|
|
|
|
**Fix:**
|
|
```bash
|
|
gcloud components install cloud-run-proxy
|
|
|
|
gcloud run services proxy osvauco-agent \
|
|
--region=us-central1 \
|
|
--project=propane-will-491900-m5 \
|
|
--port=8080
|
|
# (kjør i Terminal 1 — ikke bakgrunn)
|
|
|
|
# Terminal 2:
|
|
curl -s "http://localhost:8080/billing/credits?days=90" | python3 -m json.tool
|
|
```
|
|
|
|
### Problem 2: `https://opax.vauco.no/billing/credits` returnerer tom respons
|
|
|
|
IAP-token er gyldig, men Cloud Run returnerer HTML-feilside i stedet for JSON.
|
|
Sannsynlig årsak: `user:chris.christiansen@vauco.no` mangler `roles/run.invoker`.
|
|
|
|
**Diagnose:**
|
|
```bash
|
|
curl -sv -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
|
|
"https://opax.vauco.no/billing/credits" 2>&1 | head -30
|
|
```
|
|
|
|
**Fix hvis 403:**
|
|
```bash
|
|
gcloud run services add-iam-policy-binding osvauco-agent \
|
|
--region=us-central1 \
|
|
--project=propane-will-491900-m5 \
|
|
--member="user:chris.christiansen@vauco.no" \
|
|
--role="roles/run.invoker"
|
|
```
|
|
|
|
### Problem 3: `GOOGLE_CREDIT_TOTAL_USD` ikke satt
|
|
|
|
Inntil denne er satt returnerer `/billing/credits` `"credit_runway_days": null`.
|
|
|
|
**Fix (enklest — vanlig env-var er nok for et tall):**
|
|
```
|
|
GCP Console → Cloud Run → osvauco-agent → Edit & Deploy
|
|
→ Variables & Secrets → Add Variable
|
|
→ GOOGLE_CREDIT_TOTAL_USD = 300
|
|
```
|
|
|
|
---
|
|
|
|
## 🔴 NESTE OPPGAVE — for Nemotron
|
|
|
|
**Jobb:** Verifiser `GET /billing/credits` end-to-end i prod.
|
|
|
|
```
|
|
STEG 1 — Installer proxy
|
|
gcloud components install cloud-run-proxy
|
|
|
|
STEG 2 — Test via proxy (ingen IAP-styr)
|
|
gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080
|
|
curl -s http://localhost:8080/billing/credits?days=90 | python3 -m json.tool
|
|
|
|
STEG 3 — Sjekk om kreditter faktisk finnes i BQ
|
|
bq query --use_legacy_sql=false \
|
|
'SELECT credit_type, SUM(amount) FROM `propane-will-491900-m5.billing_export.gcp_billing_export_v1_*`, UNNEST(credits) AS credit_type, amount GROUP BY 1 LIMIT 10'
|
|
|
|
STEG 4 — Sett GOOGLE_CREDIT_TOTAL_USD i Cloud Run env
|
|
|
|
STEG 5 — Verifiser runway vises i billing-dashboard.html
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Gjort forrige sesjon (2026-06-12 — kveld)
|
|
|
|
| Commit | Task | Detalj |
|
|
|--------|------|--------|
|
|
| [`a773ec2`](https://github.com/vauco-saas/OSVauco/commit/a773ec26fcedb2540dc5a04acdf71269d704dc63) | **DOCS PROXY** `main.py` | `GET /docs/{path}` — henter MD-filer fra privat repo via `GITHUB_PAT` |
|
|
|
|
## ✅ Gjort 2026-06-12 — formiddag
|
|
|
|
| Commit | Task |
|
|
|--------|------|
|
|
| [`50490b0`](https://github.com/vauco-saas/OSVauco/commit/50490b071d5b80252ea32e8db3226064ac9c80c0) | **CG5-onboard** `static/onboard.html` |
|
|
| [`c3357d3`](https://github.com/vauco-saas/OSVauco/commit/c3357d38aa71f13dd06726800a2c57425d6bd1ac) | **CG5-onboard** `main.py` — `GET /onboard` + `POST /onboard/complete` |
|
|
| [`5270166`](https://github.com/vauco-saas/OSVauco/commit/5270166ce13bdbea9e6009e5d1ce3529001afba6) | **CG6** `static/costguard-dashboard.html` |
|
|
| [`f7e64fc`](https://github.com/vauco-saas/OSVauco/commit/f7e64fcea07ea2b1f0c3c898bf798da49a7e2993) | **CG5c** `POST /notify/sms` — Twilio |
|
|
| [`4a1e23e`](https://github.com/vauco-saas/OSVauco/commit/4a1e23e077f2bcb508854c41c47a4d26f82f0124) | **CG5a+CG5b** `POST /notify/webhook` + `POST /notify/email` |
|
|
|
|
---
|
|
|
|
## 🔴 Kjente OQ-er
|
|
|
|
| ID | Beskrivelse | Prioritet |
|
|
|----|-------------|-----------|
|
|
| **OQ-29** | `GET /notify/channels` mangler | Lav |
|
|
| **OQ-30** | `opax.html` browser-panel ikke pushet | Høy |
|
|
| **OQ-31** | `GOOGLE_CREDIT_TOTAL_USD` ikke satt i Cloud Run | Høy — blokkerer runway |
|
|
| **ML-3a** | `docs/gemma/world.md` mangler — blokkerer Emma | Blokkert |
|
|
|
|
---
|
|
|
|
## 🏗 Systemstatus
|
|
|
|
| Komponent | Status |
|
|
|-----------|--------|
|
|
| Cloud Run `osvauco-agent` | ✅ Live `us-central1` |
|
|
| `opax.vauco.no` | ✅ Live |
|
|
| `main.py` | ✅ Hovudapp — alle ruter her |
|
|
| `GET /billing/credits` | ✅ Rute finnes — ⚠️ IKKE testet i prod |
|
|
| `ml/billing_agent.py` `get_credits_status()` | ✅ Implementert |
|
|
| `static/billing-dashboard.html` | ✅ Credits-panel live (CG4-credits) |
|
|
| `static/costguard-dashboard.html` | ✅ Live — CG6 |
|
|
| `static/opax.html` | ✅ Live — browser-panel MANGLER |
|
|
| `POST /notify/webhook` | ✅ CG5a |
|
|
| `POST /notify/email` | ✅ CG5b |
|
|
| `POST /notify/sms` | ✅ CG5c (Guard+) |
|
|
| `GET /notify/channels` | 🔴 OQ-29 |
|
|
| `docs/gemma/world.md` | ❌ Mangler — blokkerer ML-3a |
|
|
| `GOOGLE_CREDIT_TOTAL_USD` | 🔴 Ikke satt — runway vises ikke |
|
|
|
|
---
|
|
|
|
## 📋 Nøkkelinformasjon
|
|
|
|
| Nøkkel | Verdi |
|
|
|--------|-------|
|
|
| GCP Project | `propane-will-491900-m5` |
|
|
| Region (LÅST) | `us-central1` |
|
|
| Cloud Run service | `osvauco-agent` |
|
|
| Direct URL | `https://osvauco-agent-zjbqp3prqq-uc.a.run.app` |
|
|
| Public URL | `https://opax.vauco.no` |
|
|
| Hovudapplikasjon | `main.py` (rot i repo) |
|
|
| MCP-server | `opax-mcp/` |
|
|
| Static filer | `static/` |
|
|
| IAP curl | `gcloud auth print-identity-token` — **ingen `--audiences`** |
|
|
| LB IP | `34.98.77.173` |
|
|
| Repo | `vauco-saas/OSVauco` |
|
|
| Eier | `chris.christiansen@vauco.no` |
|
|
| Jason | `jason.vauger@vauco.no` · `gemini-2.5-flash` |
|
|
| Emma | `emma.vauger@vauco.no` — 🔮 ML-3a |
|
|
|
|
---
|
|
|
|
## Env-vars påkrevd
|
|
|
|
```
|
|
GOOGLE_CREDIT_TOTAL_USD=300 # 🔴 MANGLER — sett i Cloud Run env
|
|
TWILIO_ACCOUNT_SID=ACxxxx
|
|
TWILIO_AUTH_TOKEN=xxxx
|
|
TWILIO_FROM_NUMBER=+47xxxxxxxx
|
|
GITHUB_PAT=ghp_xxxx
|
|
DOCS_BRANCH=main
|
|
```
|
|
|
|
---
|
|
|
|
## ⚠️ Regler (uendret)
|
|
|
|
- **Hovudapp er `main.py`** — ikke `agents/core-logic/app.py`
|
|
- **MCP-server er `opax-mcp/`** — ikke `agents/mcp_server/`
|
|
- **Absolutte stier i Python** — `Path(__file__).parent / "..."`
|
|
- **Ikke migrer fra us-central1**
|
|
- **IAP curl: ingen `--audiences`** — bare `gcloud auth print-identity-token`
|
|
- **Ikke rør IAP/OAuth** uten `DEPLOY GODKJENT`
|
|
- **Ikke opprett repos** uten `REPO APPROVED`
|
|
- **Medioteq = joint venture** — ikke SaaS-kunde
|
|
- **CG7 er ikke definert** — ikke start uten direktiv fra Chris
|
|
|
|
---
|
|
|
|
*Vauco AS · propane-will-491900-m5 · us-central1 · Sesjon avsluttet 2026-06-13 06:46 CEST*
|