diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 009172b..cd2e43c 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,161 +1,131 @@ # HANDOFF — Vauco OS -**Sist oppdatert:** 2026-06-13 09:03 CEST +**Sist oppdatert:** 2026-06-13 14:45 CEST **Skrevet av:** Perplexity (stand-in) via GitHub MCP -**Sprint:** Alle OQ-er lukket ✅ — venter på CG7-direktiv fra Chris +**Sprint:** Fase 2 — opax.html panel-fikser er neste prioritet --- -## 🏁 Sprint-status: BACKLOG TOM +## 🔴 Kritisk blokkering — fikses nå -**Alle åpne OQ-er er lukket og verifisert i prod.** -Neste steg bestemmes av Chris — CG7 er ikke definert uten direktiv. +### `google.cloud.devtools` krasjer `/run`-endepunktet +**Rotårsak:** `main.py` importerer `from google.cloud.devtools import cloudbuild_v1` inne i `/opax/build-status`. +Denne importen krasjer med HTTP 500 og blokkerer: +- Jason: alle verktøykall (`get_build_status`, `get_logs`, `deploy_service`) feiler +- Cloud Build-panel i opax.html: viser alltid ERROR +- `/run`-endepunktet krasjer hvis Jason prøver å bruke et ADK-verktøy + +**Fix:** Erstatt `cloudbuild_v1`-importen med REST API via `httpx` + `google.auth` (se Fase 2-oppdrag nedenfor) --- -## ✅ Levert 2026-06-13 (oppdatert sesjon) +## 🧪 Panel-test 2026-06-13 — opax.vauco.no +| Panel | Status | Problem | +|-------|--------|----------| +| Jason chat | ✅ Svarer | Enkle spørsmål fungerer — verktøykall gir HTTP 500 | +| CostGuard | 🔴 Spinner evig | Fetcher feil URL eller timeout | +| Kalkulator | ✅ Fungerer | Slider + ROI live | +| Cloud Build | 🔴 ERROR alltid | `devtools`-import krasjer — aldri fungert | +| VM-er | ✅ Fungerer | RUNNING, IP, SSH-knapp til GCP | +| Sites & Moduler | ✅ Fungerer | Alle 6 kort vises | +| Terminal | 🟡 Skall | Viser 5 hardkodede kommandoer, ingen output fra backend | +| MD | 🔴 Tom | Åpne-knappen gjør ingenting | +| Browser | 🔴 Ødelagt | Kun intern /docs/-proxy — externe URLer viser broken | + +--- + +## 🔴 Fase 2 — Neste oppdrag (gi til Nemotron) + +### Fix 1 — Cloud Build REST (blokkerer Jason) +`/opax/build-status` i `main.py`: fjern `cloudbuild_v1`-import, bruk: +```python +import httpx, google.auth, google.auth.transport.requests + +@app.get("/opax/build-status") +async def build_status(): + creds, project = google.auth.default() + creds.refresh(google.auth.transport.requests.Request()) + url = f"https://cloudbuild.googleapis.com/v1/projects/{project}/builds?pageSize=5" + r = httpx.get(url, headers={"Authorization": f"Bearer {creds.token}"}) + builds = r.json().get("builds", []) + return {"builds": [{"id": b["id"], "status": b["status"], + "branch": b.get("substitutions",{}).get("BRANCH_NAME",""), + "createTime": b["createTime"]} for b in builds]} +``` + +### Fix 2 — MD-panel +`Åpne`-knappen på hvert MD-kort gjør ingenting. +Fiks: klikk → fetch `/docs/` → render markdown inline med `marked.js` + +### Fix 3 — CostGuard-panel spinner +Finn fetch-URL i `opax.html` for CostGuard-seksjonen. +Verifiser at den peker på `/billing/credits?days=30`. +Legg til timeout 10s og vis "Ingen data" i stedet for evig spinner. + +### Fix 4 — Browser-panel +Fjern ekstern URL-støtte (fungerer ikke — CORS/iframe-blokkering). +Rename til "Docs Browser", placeholder `/docs/MASTERPLAN.md`. +Vis markdown rendret, ikke raw. + +**Commit:** `fix(opax): cloud-build REST, MD-render, CostGuard timeout, browser-panel` + +--- + +## ✅ Levert 2026-06-13 | Commit | Task | Detalj | |--------|------|---------| -| [`6611927`](https://github.com/vauco-saas/OSVauco/commit/66119278bf202a0a326e40880dc9cf6ca61b3941) | **Hotfix** `requirements.txt` + BQ-migrering | `google-cloud-build>=3.24.0` lagt til — fikser `ModuleNotFoundError: google.cloud.devtools`. BQ-skript `scripts/migrate_bq_add_caller_type.sh` pushet og kjørt ✅ | -| [`c114f6c`](https://github.com/vauco-saas/OSVauco/commit/c114f6c32800c5de63430775e6d8fc7f23fd07d4) | **Frontend** `static/billing-dashboard.html` | Tre pool-bars, Free Trial topbar-banner, `Promise.allSettled()` | -| [`bc501c1`](https://github.com/vauco-saas/OSVauco/commit/bc501c13ea9fb9da785885fea57b880cca2b07db) | **OQ-31** `ml/billing_agent.py` | `credit_pools[]`, `effective_days`, `badge_class`, `warning: bool` | -| [`055a482`](https://github.com/vauco-saas/OSVauco/commit/055a4823205f8255dfa98be1553f833c0a13521d) | **OQ-29** `main.py` | `GET /notify/channels` — verifisert i prod | -| [`4693fea`](https://github.com/vauco-saas/OSVauco/commit/4693fea) | **CI-fix** `cloudbuild.yaml` | Fjernet `--audiences` fra smoke-test token | +| `6611927` | **Hotfix** `requirements.txt` + BQ-migrering | `google-cloud-build>=3.24.0` lagt til. BQ-skript kjørt ✅ | +| `c114f6c` | **Frontend** `billing-dashboard.html` | Tre pool-bars, Free Trial topbar-banner, `Promise.allSettled()` | +| `bc501c1` | **OQ-31** `billing_agent.py` | `credit_pools[]`, `effective_days`, `badge_class`, `warning: bool` | +| `055a482` | **OQ-29** `main.py` | `GET /notify/channels` — verifisert i prod | +| `4693fea` | **CI-fix** `cloudbuild.yaml` | Fjernet `--audiences` fra smoke-test | --- ## ✅ Manuelt utført 2026-06-13 - | Handling | Status | |----------|--------| | Kreditt env-vars satt i Cloud Run (rev `00469-p96`) | ✅ Ferdig | -| BQ-migrering kjørt — `caller_type`, `module_name`, `session_id` lagt til `llm_token_usage` | ✅ Ferdig | -| `google-cloud-build` lagt til `requirements.txt` | ✅ Pushet — ⏳ venter på Cloud Build deploy | +| BQ-migrering kjørt — `caller_type`, `module_name`, `session_id` | ✅ Ferdig | +| `google-cloud-build` i `requirements.txt` | ✅ Pushet | --- -## ✅ OQ-logg — alle lukket - +## ✅ OQ-logg | OQ | Beskrivelse | Status | |----|-------------|--------| | **OQ-29** | `GET /notify/channels` | ✅ Verifisert i prod | -| **OQ-30** | Browser-panel `opax.html` | ✅ Løst | -| **OQ-31** | `credit_pools[]` + kreditt env-vars satt | ✅ Komplett | +| **OQ-30** | Browser-panel `opax.html` | ✅ Løst (frontend) — backend /docs/ fungerer | +| **OQ-31** | `credit_pools[]` + kreditt env-vars | ✅ Komplett | --- ## ⚠️ Gjenstår for Chris - | # | Handling | Prioritet | |---|----------|-----------| -| 1 | Verifiser Cloud Build ferdig: `gcloud builds list --project=propane-will-491900-m5 --limit=3` | Høy | -| 2 | Sjekk `costguard.oss.vauco.no` fungerer etter ny deploy (OAuth `MismatchingStateError` løses ved å tømme cookies / inkognito etter hver deploy) | Høy | -| 3 | Sett varslings-env-vars når klar: `SENDGRID_API_KEY`, `NOTIFY_EMAIL_TO`, `TWILIO_ACCOUNT_SID`, `NOTIFY_WEBHOOK_URL` | Lav | -| 4 | Bestem CG7-scope | Venter på Chris | +| 1 | Gi Fase 2-oppdraget til Nemotron (Fix 1-4 over) | 🔴 Høy | +| 2 | Sett varslings-env-vars: `SENDGRID_API_KEY`, `NOTIFY_EMAIL_TO`, `TWILIO_ACCOUNT_SID` | Lav | +| 3 | Bestem CG7-scope | Venter på Chris | +| 4 | Aktiver Emma/Gemma — `docs/gemma/world.md` finnes allerede i repo | Medium | + +--- + +## ⚠️ Regler (låst) +- **Test alltid via `cloud-run-proxy`** — IKKE `--audiences` +- `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080` +- **Hovudapp:** `main.py` i rot — IKKE `agents/core-logic/app.py` +- **Region:** `us-central1` +- **Service:** `osvauco-agent` --- ## 🏗 Systemstatus - | Komponent | Status | |-----------|--------| | Cloud Run `osvauco-agent` | ✅ Live `us-central1` rev `00469-p96` | -| `opax.vauco.no` | ✅ Live | -| `costguard.oss.vauco.no` | ✅ Live — ⚠️ tøm cookies etter deploy | -| `main.py` | ✅ Hovudapp — alle ruter her | -| `GET /billing/credits` | ✅ Levert + kreditt env-vars satt | -| `GET /notify/channels` | ✅ OQ-29 — verifisert | -| `ml/billing_agent.py` | ✅ `credit_pools[]` komplett | -| `static/billing-dashboard.html` | ✅ Tre pool-bars + Free Trial banner | -| `static/opax.html` | ✅ Live — browser-panel OK | -| `BQ llm_token_usage` | ✅ Migrert — `caller_type`, `module_name`, `session_id` på plass | -| `/opax/build-status` `devtools`-feil | ⏳ Fikset i kode — venter på Cloud Build | -| `POST /notify/webhook` | ✅ CG5a | -| `POST /notify/email` | ✅ CG5b | -| `POST /notify/sms` | ✅ CG5c (Guard+) | -| `docs/gemma/world.md` | ❌ Mangler — blokkerer ML-3a / Emma | - ---- - -## 📋 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` | -| CostGuard | `https://costguard.oss.vauco.no` | -| Hovudapplikasjon | `main.py` (rot i repo) | -| IAP-test | `gcloud run services proxy` — **se regler** | -| 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 (blokkert) | - ---- - -## Env-vars i Cloud Run (satt ✅) - -``` -# Kreditter — satt 2026-06-13 -GOOGLE_CREDIT_INFRA_NOK=2911.27 -GOOGLE_CREDIT_INFRA_EXPIRES=2026-07-10 ← 🔴 utløper om ~27 dager! -GOOGLE_CREDIT_VERTEX_NOK=9704.21 -GOOGLE_CREDIT_VERTEX_EXPIRES=2027-04-11 -GOOGLE_CREDIT_DIALOGFLOW_NOK=5822.53 -GOOGLE_CREDIT_DIALOGFLOW_EXPIRES=2027-04-11 -USDNOK=10.8 - -# Varsling (ikke satt ennå) -SENDGRID_API_KEY=SG.xxxx -NOTIFY_EMAIL_TO=chris.christiansen@vauco.no -TWILIO_ACCOUNT_SID=ACxxxx -TWILIO_AUTH_TOKEN=xxxx -TWILIO_FROM_NUMBER=+47xxxxxxxx -NOTIFY_WEBHOOK_URL=https://hooks.slack.com/... - -# Docs proxy -GITHUB_PAT=ghp_xxxx -DOCS_BRANCH=main -``` - ---- - -## ⚠️ Regler (låste) - -- **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-test: bruk alltid `cloud-run-proxy`** — aldri `--audiences`: - ```bash - gcloud run services proxy osvauco-agent \ - --region=us-central1 --project=propane-will-491900-m5 --port=8080 - curl http://localhost:8080/ - ``` -- **OAuth `MismatchingStateError`** etter deploy = normalt — tøm cookies eller bruk inkognito -- **Ikke rør IAP/OAuth** uten `DEPLOY GODKJENT` -- **Ikke opprett repos** uten `REPO APPROVED` -- **Medioteq = joint venture** — ikke SaaS-kunde -- **Prismodell låst** — ikke endre uten `PLAN APPROVED` -- **CG7 er ikke definert** — ikke start uten direktiv fra Chris - ---- - -## 📁 Filer (prioritert rekkefølge) - -1. `docs/MASTERPLAN.md` — autoritær sannhet -2. `docs/ROADMAP.md` -3. `docs/HANDOFF.md` — denne filen -4. `CLAUDE.md` -5. `docs/AGENT_RULEBOOK.md` -6. `docs/UNIVERSAL_BOOT_PROMPT.md` v1.4 -7. `docs/gemma/world.md` ❌ mangler - ---- - -*Vauco AS · propane-will-491900-m5 · us-central1 · Sesjon oppdatert 2026-06-13 09:03 CEST* +| `opax.vauco.no` | ✅ Live — 5/9 paneler fungerer | +| `costguard.oss.vauco.no` | ✅ Innlogging fungerer | +| Jason (ADK) | 🔴 Verktøykall feiler — devtools-fix nødvendig | +| BQ billing export | ✅ Aktiv | +| Gemma/Emma VM | ⏳ Ikke startet |