OSVauco/docs/GDRIVE_MIRROR_BOOT.md

385 lines
18 KiB
Markdown

# 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-25T23:59 UTC ║
║ HEAD: 57bfc51 ║
║ 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-25T23:59 UTC · HEAD 57bfc51
---
## 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``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) |
---
## 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 |
| `<klient>-os.vauco.no` | Prod OS | Kundens live produksjonssystem |
| `<klient>-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 <PID> 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-25T23:59 UTC · HEAD 57bfc51 · auto-generert**