# VAUCO OS — GDRIVE MIRROR BOOT > **CONNECTOR-PRIORITET:** > ``` > GITHUB > GOOGLE DRIVE > ``` > GitHub (`OSVauco/main/docs/AGENT_RULEBOOK.md`) er **alltid** ground truth. > Denne filen er auto-generert av `sync-gdrive-mirror.sh`. > Ved enhver konflikt: stol på GitHub. Oppdater ved å kjøre scriptet på nytt. --- ## ⚠️ STALENESS-VARSEL — LES DETTE FØRST ``` ╔══════════════════════════════════════════════════════════════╗ ║ SIST SYNKRONISERT: 2026-05-26T03:02 UTC ║ ║ HEAD: 5479a5f ║ ║ Kilde: OSVauco/main · Synkronisert av: sync-gdrive-mirror.sh ║ ╠══════════════════════════════════════════════════════════════╣ ║ ⚠️ TERSKEL: 12 TIMER (aktiv dev-runde) ║ ║ HVIS MER ENN 12T HAR GÅTT: STOPP og verifiser mot GitHub ║ ╠══════════════════════════════════════════════════════════════╣ ║ VERIFISER: https://github.com/chrischristiansen-glitch/ ║ ║ OSVauco/blob/main/docs/AGENT_RULEBOOK.md ║ ╚══════════════════════════════════════════════════════════════╝ ``` --- ## PROSJEKTINDEKS — AUTO-GENERERT 2026-05-26T03:02 UTC · HEAD 5479a5f --- ## TODO # OSVauco / OPAX — TODO > Managed by PLAN thread. Update when phases move between sections. Last updated: 2026-05-25T14:37 CEST --- ## NOW - [ ] **⚠️ HASTER** — Roter OAuth client secret `Vauco OS Web App` i [Google Auth Platform](https://console.cloud.google.com/auth/clients/357036551735-ka7t2fv9ue2jp01bs826hpdctlvispuo.apps.googleusercontent.com?project=propane-will-491900-m5) — eksponert i chat 2026-05-25. - [ ] Vurder om `jason.vauger@vauco.no` skal beholde `roles/run.invoker` på `osvauco-agent`. - [ ] Kjør `git update-index --chmod=+x` på alle scripts + commit — hindrer Permission denied etter GitHub web-edit. - [ ] Verifiser første nattlige GDrive backup — kl 03:00 UTC (Actions-logg). --- ## NEXT - [ ] **Phase 6** — LEARNING-010 append: Cloud Run domain mapping støtter ikke load balancer IAP. - [ ] `opax-mcp/` restruktureres som ordentlig modul-subtree. - [ ] Full boot cycle acceptance test (automatisert). - [ ] VS Code ↔ Cloud Shell workflow — preflight-script for lokal utvikling. - [ ] **Gemini TUI-output logging** — `gemini-log` alias, append siste 50 linjer til session log. - [ ] GDrive nightly workflow — verifiser schedule-trigger fungerer. --- ## DONE ✅ - [x] **Phase 0** — Baseline: repo, `.gemini/`-struktur, boot-script, sesjonslogg. - [x] **Phase 1** — Domain/protocol locking, `ARCHITECTURE.md`, `VAUCO_OS_ROADMAP.md`. - [x] **Phase 2** — `opax.vauco.no` LIVE: Cloud Run, CNAME, SSL. - [x] **Phase 3** — Nemotron session loop, `docs/TODO.md`, Phase 1+2 rapport. - [x] **Phase 4** — Docs hardening: LEARNINGS 007-009, SECRETS-SETUP, IAP-SETUP kartlegging. (2026-05-25) - [x] **Phase 5** — Cloud Run IAM-autentisering på `osvauco-agent`: kun `chris.christiansen@vauco.no` + `jason.vauger@vauco.no`. DNS urørt. (2026-05-25) - [x] **GDrive/GitHub paritet** — mirror-script, nattlig backup, PS1 prompt, IAM/Secrets, opax-logg-slutt auto-push. (2026-05-25) - [x] **GDrive backup IAM** — SA opprettet, JSON-nøkkel, mapper delt. (2026-05-25) - [x] **GitHub Secrets** — `RCLONE_GDRIVE_SA_JSON` + `GDRIVE_BACKUP_FOLDER_ID` satt. (2026-05-25) - [x] **Første mirror-sync** — `.gdrive-mirror-state` opprettet, `GDRIVE_MIRROR_BOOT.md` lastet opp. (2026-05-25) - [x] **PS1 gul-bug** — state-fil skrives nå ETTER push, prompt grønn umiddelbart. (2026-05-25) --- ## SESJONSLOGG # Sessions Index | Dato | Emne | Fil | |------|------|-----| | 2026-05-21 | OSVauco/OPAX platform bootstrap — naming, domenekonvensjon, Nemotron TODO | [2026-05-21_osvauco-opax-platform-naming-domains.md](./2026-05-21_osvauco-opax-platform-naming-domains.md) | | 2026-05-22 | osv-startup.ps1 — banner design, farger, prompt og gcloud-fix | [2026-05-22_osv-startup-banner-styling.md](./2026-05-22_osv-startup-banner-styling.md) | | 2026-05-24 | OPAX heavy mode + LLM-ruting + RAG re-indeksering | [2026-05-24_opax-heavy-mode-llm-ruting-rag.md](./2026-05-24_opax-heavy-mode-llm-ruting-rag.md) | | 2026-05-24 | RAG corpus setup — Vertex AI serverless debugging | [2026-05-24_rag-corpus-setup-vertexai.md](./2026-05-24_rag-corpus-setup-vertexai.md) | | 2026-05-24 | RAG restriction + operator suite heavy lifts + docs hardening | [2026-05-24_osvauco-rag-operator-suite.md](./2026-05-24_osvauco-rag-operator-suite.md) | | 2026-05-25 | GDrive/GitHub mirror + backup, PS1 prompt, opax-logg-slutt fix, IAM setup | [2026-05-25_gdrive-mirror-sync.md](./2026-05-25_gdrive-mirror-sync.md) | | 2026-05-25 | GitHub boot + prosjektstatus-lesing + GDrive-review fra handoff | [2026-05-25_github-boot-status-gdrive-review.md](./2026-05-25_github-boot-status-gdrive-review.md) | | 2026-05-25 | Phase 7 RAG corpus opprettet — sesjonsstatus-diff og handoff | [2026-05-25_phase7-rag-corpus-handoff.md](./2026-05-25_phase7-rag-corpus-handoff.md) | | 2026-05-26 | RAG corpus kobling til osvauco-agent — boot, snapshot-sti-avklaring, index-oppdatering | [2026-05-26_rag-corpus-kobling-agent.md](./2026-05-26_rag-corpus-kobling-agent.md) | | 2026-05-26 | Deploy + CI/CD handoff — B2/B3/B4/B5 gjestår, teardown-påminnelse | [2026-05-26_deploy-cicd-handoff.md](./2026-05-26_deploy-cicd-handoff.md) | | 2026-05-26 | B2 + B3 fullført — Secret Manager verifisert, Cloud Build 2nd gen pipeline oppe | [2026-05-26_b2-b3-cicd-ferdig.md](./2026-05-26_b2-b3-cicd-ferdig.md) | | 2026-05-26 | B3 trigger-test SUCCESS — revisjon 00065-z7t | [2026-05-26_b3-trigger-test-ok.md](./2026-05-26_b3-trigger-test-ok.md) | | 2026-05-26 | Google Chat webhook + cloudbuild.yaml bash-fix — CI/CD komplett | [2026-05-26_google-chat-webhook-ferdig.md](./2026-05-26_google-chat-webhook-ferdig.md) | | 2026-05-26 | B5 fullført — budget alert 500 NOK, GCS telemetri-bucket, logg-sink aktiv | [2026-05-26_b5-cost-guard-telemetri-ferdig.md](./2026-05-26_b5-cost-guard-telemetri-ferdig.md) | | 2026-05-26 | B1-IAP fullført — opax.vauco.no live, CNAME ghs.googlehosted.com, IAM invoker satt | [2026-05-26_b1-iap-cname-ferdig.md](./2026-05-26_b1-iap-cname-ferdig.md) | --- ## ROADMAP # VAUCO OS — ROADMAP.md # Eier: PLAN-Claude-Architect # Sist oppdatert: 2026-05-22 CEST # Godkjent av: Chris Christiansen --- ## NOW — Aktiv nå - [ ] **Phase 4** — Docs hardening - Owner: OPS / Gemini TUI - HITL gate: `MERGE APPROVED` - Filer: `LEARNINGS.md`, `SECRETS-SETUP.md`, `IAP-SETUP.md` — oppdater med nåværende state - Done: alle tre filer har seksjon `## Status 2026-05-22` med verifisert info --- ## NEXT — Neste opp - [ ] **Phase 5** — IAP på `opax.vauco.no` - Begrens til `@vauco.no` Google-kontoer - Owner: EXEC-Gemini / Chris - HITL gate: `DEPLOY GODKJENT` - Done: uautentiserte requests → 403, `chris.christiansen@vauco.no` → 200 - [ ] **Phase 6** — VS Code ↔ Cloud Shell workflow - Preflight-script + dokumentasjon for lokal utvikling mot OSVauco-repoet - Owner: OPS - HITL gate: `MERGE APPROVED` --- ## LATER — Backlog - [ ] `opax-mcp/` restruktureres som ordentlig modul-subtree - [ ] Full boot cycle acceptance test (automatisert) - [ ] OPS agent + BigQuery live logging - [ ] Multi-klient onboard-mønster - [ ] **Medioteq** — kun idéfase, ingenting implementeres før OPAX er fullt operasjonelt --- ## BLOCKED *(ingen blokkerte punkter)* --- ## ✅ Fullførte faser - [x] **Phase 0** — Baseline: `opax-mcp-core` live, OSVauco repo, `.gemini/` grunnmur, boot-script, sessionslogg - [x] **Phase 1** — MCP_NAME/MCP_PROTOCOL/ROOT_DOMAIN locked; ARCHITECTURE.md + ROADMAP.md opprettet · `6ae1a25` `4a971dd` `c4149e7` · 2026-05-21 - [x] **Phase 2** — `opax.vauco.no` LIVE: domain mapping + CNAME + SSL + HUB_URL locked · `f3bf419` · 2026-05-21 - [x] **Phase 3** — Nemotron session loop i GEMINI.md; docs/TODO.md; Phase 1+2 SLUTTRAPPORT i session log · `77ed501` · 2026-05-21 --- EOF v2.0 — 2026-05-22 — synkronisert med faktisk repo-state --- ## AGENT_RULEBOOK # VAUCO OS — AGENTRLEBOOK.md # Eier: OPS-Computer-Hub # Sist oppdatert: 2026-05-21 CEST # Godkjent av: Chris Christiansen --- ## Hensikt Immutable regler for alle 4 tråder. Ingen tråd kan overstyre disse. Endringer krever eksplisitt godkjenning fra Chris. --- ## LOCK LIST — ALDRI ENDRE | Parameter | Verdi | |-------------------|-----------------------------------------------------------------------| | GCP Account | chris.christiansen@vauco.no | | Forbudte kontoer | tinius.vauger, ccv, jason.vauger | | GCP Project | propane-will-491900-m5 (Jason-v1) | | Billing | 0171F6-057E6B-A260BA | | Org | vauco.no / 155051211891 | | Region | us-central1 — ALDRI us-west1 | | SDK | `from google import genai` — ALDRI `vertexai.generative_models` | | Agent-rammeverk | Google ADK (tillatt) — andre må eksplisitt `ADK_GODKJENT` av Chris | | GitHub user | chrischristiansen-glitch | | Canonical repo | OSVauco | | Canonical branch | main | | MCP_NAME | OPAX-MCP | | MCP_PROTOCOL | OPAX Protocol | | MCP_SERVICE | opax-mcp-core (Cloud Run, us-central1) | | ROOT_DOMAIN | vauco.no | | HUB_URL | https://opax.vauco.no ✅ LIVE 2026-05-21 | --- ## DOMENEKONVENSJON — LOCKED | Subdomain | Type | Formål | |-------------------------|----------|-----------------------------------------------------| | `opax.vauco.no` | Hub/MCP | OPAX-MCP operator hub — kun Vauco internt | | `-os.vauco.no` | Prod OS | Kundens live produksjonssystem | | `-oss.vauco.no` | Stage OS | Kundens staging/demo-system (pre-go-live) | > `-os` = produksjon. `-oss` = staging. Aldri omvendt. **Auth-strategi:** - Nå: Google OAuth på alle miljøer - Senere: BankID på `-os`-domener for kliniske kunder (Medioteq først) **Kjente/planlagte domener:** | Domene | Status | Cloud Run-tjeneste | |---------------------------|------------------|-----------------------| | `opax.vauco.no` | ✅ LIVE | `opax-mcp-core` | | `medioteq-oss.vauco.no` | Planlagt | `medioteq-oss-core` | | `medioteq-os.vauco.no` | Planlagt | `medioteq-os-core` | --- ## HITL-GATES — STOPP OG SPØR ALLTID 1. `DEPLOY GODKJENT` — før deploy til Cloud Run 2. `MERGE APPROVED` — før merge til main 3. `DEEP DREAM GODKJENT` — før strategisk vokabular eksponeres 4. `COST GODKJENT` — før endringer som påvirker billing 5. `IAM_GODKJENT` — før IAM-endringer eller ny service account 6. `NEWREPO` — før opprettelse av ny repo --- ## BOOT-PROTOKOLL — kjøres av ALLE tråder ved oppstart 1. Branch-discovery: list alle branches, finn mest aktiv (ahead av default) - Hvis 1+ branch er 10+ commits ahead: STOPP og spør Chris - Standard: OSVauco/main er canonical for dette prosjektet 2. Les eid fil + MASTER_HANDOFF_v2 + ROADMAP fra riktig branch 3. Bekreft i én linje: `Boot OK — branch X, HEAD Y, oppgave Z` --- ## VOCABULARY FIREWALL | Type | Ord | Regel | |---|---|---| | Offentlig (OK overalt) | Token Ledger, VVN, Provenance, File signature, Client identity record, Cognitive contribution, The system | Fritt bruk | | Strategisk (KUN internt) | Pregeverdi, Deep Dream, Vauco-arv, Pregesignatur, T-konto, Work of Living, Pregeverk | KUN i `deep-dream/`-mappe | --- ## KOST-DISIPLIN - $3/dag hard cap per tråd - `gemini-2.5-flash` for enkle steg, `pro` for komplekse - ALDRI rekursive modell-loops - Hvis tråden bruker $1 på én oppgave: STOPP, rapporter, spør - 80%/95%/100% quota stops aktive --- ## FRICTION-REGLER (kodifisert lærdom) ### TASK-FRICTION-001: Branch-discovery-before-read Preflight må advare hvis non-default branch er 10+ commits ahead. Implementer i: `scripts/preflight-check.sh` ### TASK-FRICTION-002: SYSTEM_STATE_AGENT_BOOT autogenerering Boot-script skriver fersk state-fil ved hver tråd-oppstart. Implementer i: `scripts/boot-state.sh` (EXEC eier) ### TASK-FRICTION-003: Eierskap-matrise håndhevet i pre-commit Pre-commit hook avviser commit hvis fil endres av feil tråd. Implementer i: `.githooks/pre-commit` (OPS eier) --- ## KORREKSJONS-REGEL Ground truth wins always. 1. Innrøm direkte i én setning 2. Oppdater eid fil med korreksjon 3. Fortsett ALDRI forsvar gamle posisjoner. --- ## KOMMUNIKASJON MELLOM TRÅDER - ML-TRÅD: Chris kopierer melding over - Filer flyter via GitHub (`OSVauco` + tjeneste-repoer) - Aldri direkte tråd-til-tråd — alt via committed MD eller Chris --- ## EIERSKAP-MATRISE | Fil | Eier | Andre kan | |---|---|---| | VAUCO_OS_MASTER_HANDOFF_v2.md | OPS | lese | | VAUCO_OS_ROADMAP.md | PLAN | lese, foreslå patch via PR | | SYSTEM_STATE_AGENT_BOOT.md | EXEC | lese | | docs/AGENTRLEBOOK.md | OPS | lese | | docs/ARCHITECTURE.md | PLAN | lese, foreslå patch via PR | | docs/LEARNINGS.md | OPS | lese, foreslå append | | docs/RISKREGISTER.md | AUDIT | lese | | docs/PLANBOARD.md | AUDIT | lese | | CHANGELOG.md | OPS | lese | | TODO.md | EXEC | lese | Regel: én fil — én eier. Andre foreslår via PR, eier merger. --- EOF v1.2 — 2026-05-21 — OPS-Computer-Hub (Phase 2: HUB_URL locked LIVE, domain status updated) --- ## LEARNINGS — siste oppføringer Regel: Før ny plan: verifiser alle premisser eksplisitt. Ground truth wins always. Innrøm direkte, oppdater eid fil, fortsett. Implementert i: `docs/AGENTRLEBOOK.md` — KORREKSJONS-REGEL --- ### LEARNING-004: Pre-commit hook kan ikke skille regel-definisjon fra regelbrudd Dato: 2026-05-18 Kontekst: `.githooks/pre-commit` bruker innholdsbasert regex-gate. Fanger `vertexai.generative_models` overalt — inkludert i NEVER-lister og kommentarer. Lærdom: Semantisk korrekt bypass (`--no-verify` eller `git config --unset core.hooksPath`) er riktig for commits som inneholder regel-definisjoner, ikke regelbrudd. Regel: Hook v2 må implementere Argument C: kun match uncommented lines i .py/.sh, og kun utenfor NEVER/blocked/forbid-kontekst i .md. Implementert i: TASK-FRICTION-003 — hook v2 (Day 2) --- ### LEARNING-005: Verdivurdering før commit — tråden kan absorbere korreksjon raskt Dato: 2026-05-18 Kontekst: Doc-konsolidering ble nødvendig (LEARNINGS.md, AGENTRLEBOOK.md). Ground-truth-vinner-alltid-prinsippet fungerte raskt i praksis. Lærdom: Kjør verdivurdering ved slutten av hver økt: hva produserte vi, hva er nyttig vs dødt, hvilken læring overlever? Regel: Før tråd-økt avsluttes: oppdater LEARNINGS.md (append), og friction → TASK-FRICTION-NNN i ROADMAP. Implementert i: `docs/AGENTRLEBOOK.md` — FRICTION-REGLER --- EOF — append videre under denne linjen --- ### LEARNING-006: gcloud-CLI deler quota med system-prosesser (32555940559) Dato: 2026-05-18 Kontekst: gcloud CLI bruker shared project 32555940559 for cloudresourcemanager API. Loop-scripts trigget 2400 RPM cap. Årsak: boot-script eller watch-prosess listet prosjekter/billing i loop. Lærdom: Quota-hit på shared gcloud-prosjekt er ikke-fatal, forsvinner etter 60s. Sjekk alltid ps aux for spam-prosesser før loop-operasjoner. Regel: 1) Skriv Y ved quota-prompt → 2) vent 60s → 3) kjør preflight.sh på nytt. Ved 429: `ps aux | grep -E "(gcloud|gemini|watch)" | grep -v grep` → kill -9 ved looping prosess. Implementert i: `scripts/preflight.sh` — kandidat for quota-check i v1.2 (TF-004) --- ### LEARNING-007: Bindestrek er ugyldig i bash-funksjonsnavn (POSIX strict) Dato: 2026-05-25 Kontekst: Cloud Shell kjører `-bash` i POSIX strict mode. `opax-logg-slutt() {` kastet syntax error. Funksjonen var definert korrekt men navn med bindestrek er ikke tillatt i POSIX sh. Lærdom: Funksjonsnavn i bash-scripts som skal kjøres i Cloud Shell MÅ bruke understrek, ikke bindestrek. Alias kan fortsatt bruke bindestrek og peke på understreks-funksjonen. Regel: Alle funksjoner i `scripts/` bruker understrek (`opax_logg_slutt`). Aliaser for brukervennlighet kan ha bindestrek (`alias opax-logg-slutt='opax_logg_slutt'`). Implementert i: `scripts/osvauco-opax-boot.sh` — fix pushet HEAD 1cea31d --- ### LEARNING-008: rclone med GDrive service account krever eksplisitt mappedeling Dato: 2026-05-25 Kontekst: GitHub Actions nattlig backup feilet første kjøring. Årsak: service account (`vauco-gdrive-backup@...`) hadde ikke tilgang til GDrive-mappen selv om JSON-nøkkel og Secret var korrekt satt. Lærdom: GDrive-mapper er ikke automatisk tilgjengelig for service accounts selv om de har riktig IAM-rolle. Mappen MÅ deles eksplisitt med service account-eposten (Editor-tilgang) i GDrive UI. Regel: Ved oppsett av rclone/GDrive-backup: del ALLE målmapper med SA-epost manuelt i GDrive. Dokumenter i `docs/GDRIVE_SETUP.md`. Implementert i: `docs/GDRIVE_SETUP.md` — steg 3 --- ### LEARNING-009: .gdrive-mirror-state som SHA-anker forhindrer falske OK-varsler Dato: 2026-05-25 Kontekst: Boot-dashboard viste alltid "fersk mirror" selv om GDrive ikke var oppdatert. Årsak: ingen persistert state å sammenligne mot. Lærdom: Synkroniseringsstatus uten persistert anker er ubrukelig. `.gdrive-mirror-state`-filen (LAST_SYNC + LAST_SHA) gir boot-scriptet et faktisk sammenligningspunkt mellom sesjoner. Regel: Ethvert sync-script skal skrive en state-fil med tidsstempel + commit-SHA. Boot leser denne og varsler ved avvik. Implementert i: `scripts/sync-gdrive-mirror.sh` + `scripts/osvauco-opax-boot.sh` --- *Oppdater ved å kjøre: `bash scripts/sync-gdrive-mirror.sh` — last deretter opp til GDrive.* **EOF · GDRIVE_MIRROR_BOOT · 2026-05-26T03:02 UTC · HEAD 5479a5f · auto-generert**