From 74f9e3c06f79f46e19522de69a11a6a9c68658da Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Mon, 25 May 2026 13:48:50 +0200 Subject: [PATCH] docs: harden phase 4 docs and append learnings --- docs/IAP-SETUP.md | 5 +++++ docs/LEARNINGS.md | 27 +++++++++++++++++++++++++++ docs/OSVAUCO_OPAX_SESSION_LOG.md | 24 ++++++++++++++++++++++++ docs/SECRETS-SETUP.md | 21 +++++++++++++++++++++ 4 files changed, 77 insertions(+) diff --git a/docs/IAP-SETUP.md b/docs/IAP-SETUP.md index a224693..f24f9cb 100644 --- a/docs/IAP-SETUP.md +++ b/docs/IAP-SETUP.md @@ -1,3 +1,8 @@ +> **STATUS (2026-05-25):** Ikke startet — Phase 5 scope. +> `opax.vauco.no` svarer `{"status":"ok"}` på `/health` uten IAP. +> IAP-oppsett starter når Phase 4 docs hardening er fullført. +> Neste ansvarlig: OPS · Gate: ingen (Phase 5 er neste roadmap-steg) + # Google Cloud IAP Setup Guide This guide provides the `gcloud` commands to configure Identity-Aware Proxy (IAP) for the Vauco TUI Bridge, securing it so that only `user:chris.christiansen@vauco.no` can access it. diff --git a/docs/LEARNINGS.md b/docs/LEARNINGS.md index b31d4d1..94986a1 100644 --- a/docs/LEARNINGS.md +++ b/docs/LEARNINGS.md @@ -78,3 +78,30 @@ Kontekst: gcloud CLI bruker shared project 32555940559 for cloudresourcemanager 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` diff --git a/docs/OSVAUCO_OPAX_SESSION_LOG.md b/docs/OSVAUCO_OPAX_SESSION_LOG.md index 3bf647e..dd104bd 100644 --- a/docs/OSVAUCO_OPAX_SESSION_LOG.md +++ b/docs/OSVAUCO_OPAX_SESSION_LOG.md @@ -81,6 +81,30 @@ PHASE 5 -- IAP paa opax.vauco.no: begrens tilgang til @vauco.no Google-kontoer k ## NESTE OPPGAVE PHASE 5 -- IAP paa opax.vauco.no: begrens tilgang til @vauco.no Google-kontoer kun. HITL gate: DEPLOY GODKJENT. +--- + +## SLUTTRAPPORT – 2026-05-25 – Phase 3 follow-up / docs + mirror hardening + +- Hva: GDrive/GitHub mirror, nattlig backup, boot-dashboard, aliaser og terminal-logging ferdigstilt og verifisert i Cloud Shell. +- Filer: + - `docs/GDRIVE_MIRROR_BOOT.md` — opprettet som tydelig GitHub-dominant speil for GDrive-bruk. + - `docs/GDRIVE_SETUP.md` — lagt til med service account, secrets og restore-flyt. + - `docs/LEARNINGS.md` — append-only lærdom utvidet med bash/POSIX, rclone-deling og mirror-state-mønster. + - `docs/SECRETS-SETUP.md` — dokumentert aktive GitHub Actions secrets for backup. + - `docs/IAP-SETUP.md` — markert som Phase 5, ikke startet. + - `scripts/sync-gdrive-mirror.sh` — sync med tidsstempel, SHA og `.gdrive-mirror-state`. + - `scripts/osvauco-opax-boot.sh` — repo sync, mirror-status, alias auto-inject, PROMPT_COMMAND logging. + - `.github/workflows/backup-gdrive-nightly.yml` — nattlig GDrive-backup via rclone. +- Verifisering: + - `opax.vauco.no/health` → `{"status":"ok"}` ✅ + - `mirror-sync` kjørt → HEAD `3058144` → `8c70c7c` → state oppdatert til `1dcf249` ✅ + - GitHub Actions secrets satt: `RCLONE_GDRIVE_SA_JSON`, `GDRIVE_BACKUP_FOLDER_ID` ✅ + - GDrive-mappe delt med `vauco-gdrive-backup@propane-will-491900-m5.iam.gserviceaccount.com` ✅ +- Note: IAP er bevisst utsatt til neste fase. `/health` er live, men `/ping` er tidligere erstattet i praksis av health-check på dashboardet. + +## NESTE OPPGAVE +PHASE 4 — Docs hardening ferdigstilles ved å holde `LEARNINGS.md`, `SECRETS-SETUP.md` og `IAP-SETUP.md` oppdatert mot live state. Deretter: PHASE 5 — IAP på `opax.vauco.no`. + --- ## Session: 20260523-054807 - Tid : 2026-05-23 05:50 UTC diff --git a/docs/SECRETS-SETUP.md b/docs/SECRETS-SETUP.md index 6d0ed01..9c79d2c 100644 --- a/docs/SECRETS-SETUP.md +++ b/docs/SECRETS-SETUP.md @@ -108,3 +108,24 @@ async def lifespan(app: FastAPI): print("Watcher task cancelled.") ``` Apply this patch to your `bridge/server.py` file. This code checks for the `GAE_ENV` environment variable, which is set in App Engine and Cloud Run environments. If it's present, it fetches the secrets from Secret Manager and sets them as environment variables for the application to use. + +--- + +## GitHub Actions Secrets (aktive per 2026-05-25) + +Disse secrets er satt i [OSVauco → Settings → Secrets → Actions](https://github.com/chrischristiansen-glitch/OSVauco/settings/secrets/actions) +og brukes av `.github/workflows/backup-gdrive-nightly.yml`. + +| Secret | Formål | Status | +|---|---|---| +| `RCLONE_GDRIVE_SA_JSON` | Hele JSON-nøkkelen for `vauco-gdrive-backup` service account | ✅ Aktiv | +| `GDRIVE_BACKUP_FOLDER_ID` | GDrive-mappe-ID (`0AB6RSjTedmwEUk9PVA`) for backup-destinasjon | ✅ Aktiv | + +**Service account:** `vauco-gdrive-backup@propane-will-491900-m5.iam.gserviceaccount.com` + +**Forny nøkkel ved behov:** +```bash +gcloud iam service-accounts keys create ~/vauco-gdrive-backup-sa-new.json \ + --iam-account=vauco-gdrive-backup@propane-will-491900-m5.iam.gserviceaccount.com +# Oppdater GitHub Secret RCLONE_GDRIVE_SA_JSON med nytt innhold +```