docs: harden phase 4 docs and append learnings

This commit is contained in:
chrischristiansen-glitch 2026-05-25 13:48:50 +02:00
parent 1dcf249400
commit 74f9e3c06f
4 changed files with 77 additions and 0 deletions

View File

@ -1,3 +1,8 @@
> **STATUS (2026-05-25):** Ikke startet — Phase 5 scope.
> `opax.vauco.no` svarer `{"status":"ok"}``/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.

View File

@ -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 <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`

View File

@ -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

View File

@ -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
```