Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
391 lines
19 KiB
Markdown
391 lines
19 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-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/vauco-saas/ ║
|
|
║ 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 | vauco-saas |
|
|
| 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-26T03:02 UTC · HEAD 5479a5f · auto-generert**
|