docs: sync MASTERPLAN + session log — Phase 5 IAP done, Phase 6 = CI/CD

This commit is contained in:
chrischristiansen-glitch 2026-05-30 21:52:36 +02:00
parent 9475dcbfc4
commit 4afcb24689
2 changed files with 52 additions and 206 deletions

View File

@ -1,7 +1,7 @@
# MASTERPLAN — Vauco OS
**Eier:** Chris Christiansen · Vauco AS · Org.nr 935 989 779
**Sist oppdatert:** 2026-05-28
**Sist oppdatert:** 2026-05-30
**Status:** AUTORITATIV — én kilde til sannhet
---
@ -27,19 +27,19 @@ Første go-to-market produkt. Hjelper bedrifter å forstå og kontrollere GCP-ko
---
## 2. Infrastrukturstatus (per 2026-05-28)
## 2. Infrastrukturstatus (per 2026-05-30)
| Komponent | Status | URL / Detalj |
|---|---|---|
| Cloud Run (`osvauco-agent`) | ✅ Live | GCP us-central1 |
| `opax.vauco.no` | ✅ Live | CNAME → ghs.googlehosted.com |
| `opax.vauco.no` (LB + SSL) | ✅ Live | GCP Load Balancer, IP 34.98.77.173 |
| IAP på `opax.vauco.no` | ✅ Konfigurert | Begrenset til `@vauco.no` Google-kontoer |
| `costguard.oss.vauco.no` | ✅ Live | Cloudflare Pages, docs/ |
| `docs/index.html` iframe | ✅ Fikset | Peker nå på us-central1 |
| BigQuery (`osvauco_logs`) | ⏳ Venter | Sink oppe, tabell populeres |
| OAuth2 (Google) | ✅ Konfigurert | Secret Manager |
| CI/CD (Cloud Build) | ✅ Live | Google Chat deploy-varsler |
| CI/CD (Cloud Build → Cloud Run) | 🔜 Fase 6 | Auto-deploy på push til main — ikke operativt |
| Budget guard (500 NOK/mnd) | ✅ Live | 50/90/100% terskler |
| IAP på Cloud Run | 🔜 Fase C | Krever LB — Terraform-modul |
| BQ billing export (`gcp_billing_export_v1_*`) | ⏳ Venter | Første tabell ikke populert ennå |
| Multi-tenant stamp-out | 🔜 Fase C | Onboarding-script + admin-panel |
@ -53,9 +53,11 @@ Første go-to-market produkt. Hjelper bedrifter å forstå og kontrollere GCP-ko
- **Fase 1** — MCP_NAME/MCP_PROTOCOL/ROOT_DOMAIN locked; ARCHITECTURE.md opprettet · 2026-05-21
- **Fase 2**`opax.vauco.no` live: domain mapping + CNAME + SSL · 2026-05-21
- **Fase 3** — Nemotron session loop i GEMINI.md; TODO.md; sesjonslogg · 2026-05-21
- **Fase A (infra)** — Deploy, GitHub PAT, CI/CD, webhook, budget guard, GCS bucket, logging sink · 2026-05-24
- **Fase A (infra)** — Deploy, GitHub PAT, CI/CD-forsøk, webhook, budget guard, GCS bucket, logging sink · 2026-05-24
- **Fase B (stabilisering)** — Smoke-test 10/10 ✅, BigQuery dataset + sink, Threadstone model-temaer · 2026-05-26
- **Repos konsolidert** — Alt samlet under `vauco-saas/OSVauco` · 2026-05-27
- **Fase 4 (infra migrering)**`opax.vauco.no` migrert fra Cloud Run domain mapping til GCP Load Balancer + SSL-sertifikat · 2026-05-30
- **Fase 5 (IAP)** — IAP aktivert på `osvauco-agent-iap-backend`, OAuth consent Internal, `@vauco.no`-domenet begrenset · 2026-05-30
### 🔄 Aktiv nå
@ -66,11 +68,22 @@ Første go-to-market produkt. Hjelper bedrifter å forstå og kontrollere GCP-ko
- BigQuery-data vises når `gcp_billing_export_v1_*` er populert
- HITL gate: `CG3 APPROVED`
### 🔜 Neste — Fase C (etter CG3 APPROVED)
- **Fase 6 — CI/CD: Auto-deploy på push til main** ← NESTE OPPGAVE
- Mål: push til `main` → Cloud Build trigger → bygg Docker-image → deploy til Cloud Run automatisk
- Ingen manuell `gcloud run deploy` igjen
- Leveranser:
1. Cloud Build trigger koblet til `vauco-saas/OSVauco``main`-branch
2. `cloudbuild.yaml` verifisert og oppdatert for `agents/core-logic/`
3. Cloud Build SA gitt riktige IAM-roller (Cloud Run Admin + SA User)
4. Test: dummy-commit → Cloud Build kjører → Cloud Run oppdateres automatisk
5. Google Chat deploy-varsel bekreftet operativt
- Script: `infrastructure/06-cicd-setup.sh` (opprettes eller fikses)
**C1 — IAP + Terraform**
- LB + IAP for `opax.vauco.no` (begrens til `@vauco.no`)
### 🔜 Neste — Fase C (etter Fase 6 + CG3 APPROVED)
**C1 — Terraform-konvertering**
- Konverter `infrastructure/*.sh` → Terraform-modul i `vauco-bootstrap/`
- LB, IAP, Cloud Run som Terraform-ressurser
- Sett `IAP_ENABLED=true` + `IAP_AUDIENCE` i Cloud Run env-vars
**C2 — Multi-tenant Stamp-Out**
@ -195,6 +208,7 @@ vauco-saas/OSVauco/
- **Region:** `us-central1`
- **Cloud Run service:** `osvauco-agent`
- **Cloud Run URL:** `https://osvauco-agent-357036551735.us-central1.run.app`
- **Load Balancer IP:** `34.98.77.173`
- **Secret Manager:** Google OAuth2-credentials
- **Billing account:** se Secret Manager
- **Kontakt:** chris.christiansen@vauco.no

View File

@ -4,16 +4,31 @@
## Sesjon 2026-05-30 (kveld)
**Tidspunkt:** ~20:00 CEST
**Status ved sesjonsslutt:** Phase 5 IAP ferdig.
**Tidspunkt:** ~20:0021:50 CEST
**Status ved sesjonsslutt:** Phase 5 IAP ferdig. MASTERPLAN synkronisert. Klar for Phase 6.
### Utført i dag
- [x] Konfigurert IAP for `osvauco-agent` Cloud Run service.
- [x] Begrenset tilgang til `@vauco.no` domenet.
- [x] Verifisert at IAP fungerer på `https://opax.vauco.no`.
- [x] Migrert `opax.vauco.no` fra Cloud Run domain mapping → GCP Load Balancer (IP: 34.98.77.173).
- [x] SSL-sertifikat `opax-vauco-cert` aktivert (status: ACTIVE).
- [x] IAP aktivert på `osvauco-agent-iap-backend`.
- [x] IAM: `domain:vauco.no` + `user:chris.christiansen@vauco.no``roles/iap.httpsResourceAccessor`.
- [x] OAuth consent screen konfigurert som Internal for `vauco.no`.
- [x] MASTERPLAN oppdatert: infrastrukturstatus, Phase 5 som fullført, Phase 6 definert.
- [x] Beslutning: Phase 6 er CI/CD (auto-deploy på push til main) — ikke VS Code workflow.
### Neste sesjon
Phase 6 — VS Code ↔ Cloud Shell workflow
**Phase 6 — CI/CD: Auto-deploy på push til main**
Mål: push til `main` → Cloud Build trigger → bygg Docker-image → deploy `osvauco-agent` til Cloud Run.
Steg:
1. Verifiser/opprett Cloud Build trigger for `vauco-saas/OSVauco``main`-branch
2. Sjekk `cloudbuild.yaml` — oppdater om nødvendig for `agents/core-logic/`
3. Gi Cloud Build SA riktige IAM-roller: Cloud Run Admin + Service Account User
4. Test: dummy-commit → Cloud Build kjører → Cloud Run oppdateres
5. Bekreft Google Chat deploy-varsel operativt
6. Oppdater MASTERPLAN: CI/CD status → ✅ Live
---
@ -35,198 +50,15 @@ Phase 5 — IAP på opax.vauco.no: begrens til @vauco.no Google-kontoer
## Sesjon 2026-05-25 (kveld)
**Tidspunkt:** ~18:1523:30 CEST
**Status ved sesjonsslutt:** A7 + A9 ferdig
**Tidspunkt:** ~21:0000:30 CEST
**Status ved sesjonsslutt:** Fase B stabilisering delvis fullført. Repos konsolidert.
### Utført i dag
- [x] 10+ builds deployet og testet (gemini-2.5-flash fungerer, gemini-2.0-flash utfaset)
- [x] Artifact Registry: 10 untagged images slettet manuelt
- [x] Artifact Registry: **cleanup policy satt** — beholder 5 nyeste automatisk fremover
- [x] Agent svarer korrekt: `{"response": "Jeg er OPAX, en OSVauco AI-agent."}`
- [x] VM-BOOTSTRAP.md oppdatert med fungerende konfig
- [x] **A7 FERDIG**`04-observability-setup.sh` kjørt, Monitoring + uptime-sjekk oppe
- [x] **A9 FERDIG**`11-billing-iam-hardening.sh` kjørt, billing.viewer gitt til chris + jason
- [x] `.env` fikset: `BILLING_ACCOUNT_ID=0171F6-057E6B-A260BA` (var placeholder)
- [x] Fungerende konfig bekreftet:
- `GOOGLE_CLOUD_LOCATION=us-central1`
- `ORCHESTRATOR_MODEL=gemini-2.5-flash`
- `SUBAGENT_MODEL=gemini-2.5-flash`
- `REASONING_MODEL=gemini-3.5-flash`
- [x] Alt samlet under `vauco-saas/OSVauco` (repos konsolidert)
- [x] BigQuery dataset + sink opprettet
- [x] Smoke-test 10/10 ✅
- [x] Threadstone model-temaer dokumentert
- [ ] CI/CD Cloud Build trigger — forsøkt, ikke fullfort (ULØST → Phase 6)
### Neste sesjon — kjør i rekkefølge
```bash
cd ~/OSVauco # HUSK: alltid start her!
source .env
bash infrastructure/08-memorybank-setup.sh # A5 — sjekk om allerede kjørt
# Etter A5: kopier MEMORY_ENGINE_NAME inn i .env og kjør source .env
```
### Gjenværende MASTERPLAN-punkter
| ID | Script | Status |
|----|--------|--------|
| A4 | `07-rag-setup.sh` | Sannsynligvis kjørt (RAG-filer committet) |
| A5 | `08-memorybank-setup.sh` | **Neste — usikkert om kjørt** |
| A7 | `04-observability-setup.sh` | ✅ FERDIG 2026-05-25 |
| A9 | `11-billing-iam-hardening.sh` | ✅ FERDIG 2026-05-25 |
| B1 | Dialogflow CX Playbook-agent | Ikke startet — kr 5 822 kreditt venter |
| B2 | `GITHUB_APP_INSTALLATION_ID` | Ikke satt — CI/CD fase B |
### Notater
- `gemini-2.0-flash` og `gemini-2.0-flash-001` er **utfaset** for dette prosjektet — bruk aldri igjen
- Artifact Registry cleanup policy: beholder 5 nyeste images automatisk
- Teardown kjøres hver kveld: `bash infrastructure/03-teardown.sh`
- **TODO:** Legg `cd ~/OSVauco` inn i `osvauco-opax-boot.sh` så VM alltid starter i riktig mappe
- Zsh-prompt viser alltid `~/OSVauco` selv om du er i `~` — ikke stol på prompten, sjekk med `pwd`
- `ORG_DOMAIN` ikke satt i `.env` — legg til `export ORG_DOMAIN="vauco.no"` når vauco.no er Google Workspace-org
- Billing: vurder å opprette `billing@vauco.no` som Google Group fremfor enkeltadresser
---
## Tidligere sesjoner
### 2026-05-24
- Cloud Run agent oppe for første gang
- IAP / opax.vauco.no load balancer satt opp
- CI/CD auto-deploy på push til main
- gemini-2.5-flash bekreftet fungerende modell
### 2026-05-23
- VM bootstrappet på nytt etter serverbytte
- Repo klonet, git config satt opp
- `01-setupenv.sh` kjørt — Vertex AI API aktivert
### Sesjonsavslutning
- Gjort : GitHub og VM er i sync. Kvelden er ferdig — A7 og A9 i boks, A5 Memory Bank er neste sesjon. God natt!
- Uløst : N
- Slutt : 2026-05-25 21:36 UTC
---
## Session: 20260525-213642
- Tid : 2026-05-25 21:37 UTC
- Bruker : chris.christiansen@vauco.no
- OPAX : OK
- Lokal : 515c1da @ main
- Remote : 515c1da
- Mål : VM ready for jobb
### Kommandologg
21:37:24 ✔ opax
21:37:33 ✘[1] cd OSVauco
21:38:00 ✔ pwd
21:47:19 ✔ cost-audit
---
## Session: 20260525-221713
- Tid : 2026-05-25 22:17 UTC
- Bruker : chris.christiansen@vauco.no
- OPAX : OK
- Lokal : 515c1da @ main
- Remote : 868693b
- Mål : RAG
### Kommandologg
22:17:33 ✔ opax
22:17:48 ✘[1] mirror-sync
22:18:58 ✘[1] git push origin main
22:20:11 ✘[128] git pull --rebase origin main
22:21:26 ✘[128] git pull --rebase origin main
22:26:26 ✔ git restore docs/OSVAUCO_OPAX_SESSION_LOG.md && mirror-sync
22:33:07 ✔ git update-index --chmod=+x scripts/boot.sh scripts/bootstrap.sh scripts/cleanup-old-runs.sh scripts/cost-alerts.sh scripts/cost-audit.sh scripts/cost-guard.sh scripts/cost-lens.sh scripts/opax-logg-slutt.sh scripts/osv-auto-commit.sh scripts/osv-github-auth.sh scripts/osvauco-health-check.sh scripts/osvauco-opax-boot.sh scripts/osvauco-startup.sh scripts/preflight.sh scripts/sync-gdrive-mirror.sh && git commit -m "chore(scripts): chmod +x alle .sh-filer" && git push origin main
22:33:44 ✔ gcloud secrets versions access latest --secret="rag-corpus-name" --project="propane-will-491900-m5"
22:34:54 ✘[1] gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --no-allow-unauthenticated
22:35:34 ✔ gcloud builds list --region europe-west1 --project propane-will-491900-m5 --limit 1 --format "value(id)"
22:36:13 ✔ gcloud builds log f7cb1234-6ff0-44fc-8fcf-80627ebb966c --region europe-west1 --project propane-will-491900-m5 2>&1 | tail -80
22:37:19 ✘[1] grep flask agents/core-logic/requirements.txt 2>/dev/null || cat requirements.txt 2>/dev/null | grep -i flask
22:40:24 ✘[1] git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --no-allow-unauthenticated
22:41:49 ✔ gcloud builds log 8527a60d-74a1-49de-bfb2-0996a6ea558f --region europe-west1 --project propane-will-491900-m5 2>&1 | tail -60
22:43:16 ✘[1] git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --no-allow-unauthenticated
22:44:00 ✔ gcloud builds log 2de77be0-ff25-4b35-baba-493cd562ef98 --region europe-west1 --project propane-will-491900-m5 2>&1 | tail -30
22:49:28 ✔ git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --no-allow-unauthenticated
22:49:30 ✔ git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --no-allow-unauthenticated
22:50:19 ✔ curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{"message": "Hva er OSVauco?"}' https://osvauco-agent-357036551735.europe-west1.run.app/run
22:54:39 ✔ gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=europe-west1 --no-allow-unauthenticated
22:56:25 ✔ curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{"message": "Hva er OSVauco?"}' https://osvauco-agent-357036551735.europe-west1.run.app/run
23:20:11 ✔ gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=us-central1 --no-allow-unauthenticated
23:27:15 ✔ git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=us-central1 --no-allow-unauthenticated
23:28:25 ✘[1] bash scripts/smoke-test.sh
23:35:26 ✘[1] git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=us-central1 --no-allow-unauthenticated && bash scripts/smoke-test.sh
23:45:32 ✔ git pull && gcloud run deploy osvauco-agent --source . --region europe-west1 --project propane-will-491900-m5 --set-secrets RAG_CORPUS=rag-corpus-name:latest --set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=global --no-allow-unauthenticated && bash scripts/smoke-test.sh
23:48:03 ✔ nano .env && source .env
23:53:50 ✘[127] B5 — Cost guard + GCS ML-telemetri sink
### Sesjonsavslutning
- Gjort : MASTERPLAN.md oppdatert — commit f83337e.
- Uløst : ingen
- Slutt : 2026-05-25 23:55 UTC
### Sesjonsavslutning
- Gjort : MASTERPLAN.md oppdatert — commit f83337e.
- Uløst : ingen
- Slutt : 2026-05-25 23:57 UTC
---
## Session: 20260525-235920
- Tid : 2026-05-26 00:02 UTC
- Bruker : chris.christiansen@vauco.no
- OPAX : OK
- Lokal : fa267fd @ main
- Remote : fa267fd
- Mål : B1 — IAP på opax.vauco.no
### Kommandologg
00:02:09 ✔ opax
00:02:12 ✘[2] B3 — CI/CD pipeline (Cloud Build 2nd gen)
00:02:15 ✘[127] B4 — Webhook URL
00:02:18 ✘[127] B5 — Cost guard + GCS ML-telemetri sink
00:08:00 ✔ bash infrastructure/02-deploy.sh
00:14:19 ✘[127] gcloud secrets versions access latest --secret="github-pat"
00:14:41 ✘[127] gcloud secrets versions access latest --secret="github-pat"
00:15:47 ✔ printf '%s' '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' | gcloud secrets create github-pat --data-file=- --project=propane-will-491900-m5
00:16:17 ✘[1] bash infrastructure/06-cicd-setup.sh
00:16:53 ✔ bash infrastructure/06-cicd-setup.sh
00:17:10 ✘[1] gcloud services enable cloudbuildv2.googleapis.com --project=propane-will-491900-m5
00:23:53 ✔ gcloud projects get-iam-policy propane-will-491900-m5 --flatten="bindings[].members" --filter="bindings.members:chris.christiansen@vauco.no" --format="table(bindings.role)"
00:24:32 ✘[1] gcloud services enable cloudbuildv2.googleapis.com --project=propane-will-491900-m5
00:30:38 ✘[1] bash infrastructure/06-cicd-setup.sh
00:31:08 ✘[1] bash infrastructure/06-cicd-setup.sh
### Sesjonsavslutning
- Gjort : uløst
- Uløst : B3
- Slutt : 2026-05-26 00:32 UTC
03:02:10 ✔ mirror-sync
---
## Session: 20260526-030627
- Tid : 2026-05-26 03:06 UTC
- Bruker : chris.christiansen@vauco.no
- OPAX : OK
- Lokal : 517b345 @ main
- Remote : 517b345
- Mål : ikke dette
### Kommandologg
03:10:24 ✔ opax
03:11:03 ✘[2] opax
03:13:39 ✔ opax
03:14:37 ✘[130] gcloud auth application-default login --scopes="https://www.googleapis.com/auth/cloud-platform"
03:14:39 ✘[130] gcloud auth application-default login --scopes="https://www.googleapis.com/auth/cloud-platform"
03:16:26 ✔ gcloud auth application-default login --scopes="https://www.googleapis.com/auth/cloud-platform"
03:17:12 ✔ opax
03:17:56 ✔ opax
03:18:27 ✔ gcloud auth application-default login --scopes="https://www.googleapis.com/auth/cloud-platform"
03:18:57 ✔ opax
### Sesjonsavslutning
- Gjort : oppstart skrip
- Uløst : tror ikke
- Slutt : 2026-05-26 03:27 UTC
### Sesjonsavslutning
- Gjort : y
- Uløst : n
- Slutt : 2026-05-26 04:02 UTC
05:10:26 ✔ opax
05:10:40 ✘[127] g
### Neste sesjon
Fase B ferdigstilling + Phase 4 (LB + SSL migrering)