OSVauco/docs/LEARNINGS.md

8.1 KiB

VAUCO OS — LEARNINGS.md

Eier: OPS-Computer-Hub

Format: APPEND-ONLY. Aldri slett, aldri endre eksisterende entries.

Sist oppdatert: 2026-05-28 CEST


Hensikt

Kodifisert lærdom fra alle sesjoner. Overlever på tvers av tråder og modellbytter. Andre tråder kan foreslå append via PR — OPS merger.


FORMAT PER ENTRY

### LEARNING-NNN: Kort tittel
Dato: YYYY-MM-DD
Kontekst: Hva skjedde
Lærdom: Hva som er sant
Regel: Hva som alltid gjøres nå
Implementert i: [fil/script/gate]

LEARNING-001: Branch-blindness koster $0.50+/feil

Dato: 2026-05-18 Kontekst: Phase A scratchpad sjekket kun main-branch i vauco-os. autoflow-lag-1 var canonical med full operativ kode. Hele Phase A-analysen ble feil, og Phase B-planen ble bygget på feil premiss. Lærdom: Default branch er ALDRI automatisk canonical. Alltid sjekk alle branches og finn den med mest aktive commits. Regel: Boot-protokoll starter ALLTID med branch-discovery. Hvis 1+ branch er 10+ commits ahead av default: STOPP og spør Chris. Implementert i: docs/AGENTRLEBOOK.md — BOOT-PROTOKOLL steg 1


LEARNING-002: Handoff-MD er ferskvare — utdatert på 13 timer

Dato: 2026-05-18 Kontekst: VAUCO_BOOTSTRAP_HANDOFF_NEMOTRON.md ble utdatert samme dag den ble skrevet. MASTER_HANDOFF_v2 måtte lages for å reconcile motstridende info. Lærdom: Statiske handoff-filer divergerer fort fra live state. SYSTEM_STATE_AGENT_BOOT.md (EXEC eier) må regenereres ved hver tråd-boot for å være autoritet på hva som er sant nå. Regel: EXEC-tråden kjører scripts/boot-state.sh ved hver sesjon og skriver fersk SYSTEM_STATE_AGENT_BOOT.md. Implementert i: TASK-FRICTION-002 — scripts/boot-state.sh (Day 2)


LEARNING-003: 40% av Phase B var nyttig — resten død/avfeilet

Dato: 2026-05-18 Kontekst: Phase B-plan var bygget på feil premiss (tom remote repo), men inneholdt gode design-elementer: task manager, dev-orchestrate.sh, doc-consolidation layout. Lærdom: Selv feil-premiss-planer kan inneholde nyttige sub-komponenter. Skill økten mellom premiss-validering og løsnings-design. 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


Dato: 2026-05-28 Kontekst: Cloud Build hadde to GitHub-kontoer koblet parallelt. Triggeren osvauco-agent-main-trigger pekte korrekt på vauco-saas/OSVauco (1st gen), men osvauco-repo under 2nd gen connection osvauco-github-conn pekte på chrischristiansen-glitch/OSVauco — en foreldet personlig konto. Lærdom: CI/CD-triggere og repository-links er separate ressurser i Cloud Build. En trigger kan peke riktig mens en tilhørende repo-link er foreldet. Begge må verifiseres eksplisitt. Regel: Ved GitHub-kontobytter: kjør alltid gcloud builds repositories list --connection=<conn> --region=us-central1 og gcloud builds triggers list for å verifisere at BEGGE peker på riktig org. Slett foreldet repo-link umiddelbart. Implementert i: Ryddet 2026-05-28 — gcloud builds repositories delete osvauco-repo --connection=osvauco-github-conn --region=us-central1. Bekreftet: "Listed 0 items."


LEARNING-011: Cloud Build 2nd gen krever ny connection ved org-bytte

Dato: 2026-05-28 Kontekst: Forsøkte å koble vauco-saas/OSVauco til eksisterende osvauco-github-conn (installasjon ID 135008388, tilhørende chrischristiansen-glitch). Fikk feil: "repository does not exist or is not accessible". Årsak: GitHub App-installasjonen var bundet til feil konto. Lærdom: En Cloud Build connection er bundet til én GitHub-konto/org via GitHub App installation ID. Du kan ikke koble repos fra en annen org uten å opprette ny connection med riktig installasjon. Regel: Ved org-bytte (f.eks. glitch → vauco-saas): opprett alltid ny connection med gcloud builds connections create github <navn> --region=us-central1, autoriser i nettleser mot riktig org, så legg til repo. Implementert i: Fullført 2026-05-28:

  • Ny connection: osvauco-vauco-saas-conn (us-central1)
  • Autorisert mot vauco-saas-org i GitHub
  • Repo-link: osvauco-repohttps://github.com/vauco-saas/OSVauco.git
  • Gammel connection osvauco-github-conn (glitch) kan slettes når trigger er migrert