# AGENTS.md Detta dokument styr hur agenter och utvecklare arbetar i detta repo. Fokus: korrekthet, låg risk och underhållbarhet. ## 1) Syfte och prioritet - Gäller hela repot. - Kompletterar globala agentinstruktioner. - Vid konflikt gäller striktare regel. ## 2) Repo-invarianter - Appfiler ligger under `Apps//`. - Varje app ska minst ha: - `docker-compose.yaml` - `README.md` (syfte, portar, volymer, privilegier, risker) - Compose ska ha giltig top-level `name` (gemener + bindestreck). - Om `container_name` används måste den vara max 32 tecken och bara innehålla `0-9`, `a-z`, `A-Z`, `_`, `-`. - Endast `.yaml` används i repot (aldrig `.yml`). - Swap-filer (t.ex. `*.swp`, `*.swo`) ska alltid ignoreras och får aldrig committas. ## 3) Säkerhetsbaseline (Compose) MUST: - Pinna images till explicit version eller digest. - Inte använda `:latest`. - Hålla volymer snäva (`/DATA/AppData/$AppID/...`). - Vid förslag/byte av `image:` måste imagen verifieras online (manifest/tag finns i registry) innan merge. - Använd App/_template som grund om inget annat anges. - deply.resources.reservations ska sättas till något passande. Detta kommer även parsas av ZimaOS webui SHOULD: - `security_opt: ["no-new-privileges:true"]` - `cap_drop: ["ALL"]` när appen tillåter det. Högrisk-inställningar är tillåtna men kräver varning och motivering: - `privileged: true` - `network_mode: host` - mount av Docker-socket (`/var/run/docker.sock`) Om någon högrisk-inställning används måste appens `README.md` innehålla: - varför det behövs, - vilka alternativ som utvärderats, - vilka risker det innebär. ## 4) Arbetsflöde för ändringar - Små, reviewbara ändringar först. - Beskriv säkerhetspåverkan i PR. - Lokal validering är rekommenderad under utveckling: ```bash ./scripts/validate-appstore.sh ``` - Lokal validering är inte blockerande för varje enskild commit. ## 5) Obligatorisk release-checklista Inför release/publicering måste följande vara uppfyllt: 1. `./scripts/validate-appstore.sh` körd med `Validation OK`. 2. Ingen app använder `image: ...:latest`. 3. `x-casaos` metadata är satt och konsekvent. 4. Appens `README.md` är uppdaterad. 5. Eventuella högrisk-inställningar är tydligt motiverade. ## 6) Review-krav PR som ändrar appar ska explicit ange: - vilka app-id:n som påverkas, - säkerhetsrisk (låg/medel/hög), - om högrisk-inställningar introduceras eller ändras. ## 7) Testkrav för containerappar För nya appar eller större ändringar i befintliga appar (routing, discovery, auth, nätverk, secrets, cert-hantering) ska integrationstester ingå. Minimikrav: - Testa med mockade externa gränser (t.ex. Docker API, reverse proxy API, DNS/API-provider), så testerna är reproducerbara lokalt. - Verifiera minst ett fail-closed-scenario (saknad/ogiltig secret, API-fel, otillåten metadata) där appen inte exponerar tjänster oavsiktligt. - Verifiera att endast explicit tillåtna containrar/endpoints exponeras. Tester ska dokumenteras i appens `README.md` med exakt körkommando. ## 8) Branch-namnstandard När en ny branch skapas ska formatet vara: `//` Regler för ``: - `initial`: max 5 ord som beskriver vad som byggs. - `bugfix`: vad som fixas (kort och konkret). - `update`: versionsuppdatering i formen `vX.Y.Z-to-vA.B.C`. ## 9) Parallellt agentarbete och git-scope - När en ny app skapas ska en ny mapp alltid skapas under `Apps//`. - Flera agenter kan arbeta samtidigt. Fråga alltid innan du skapar ny branch eller byter branch, för att undvika krockar. - `git add` och `git commit` får endast omfatta filer i den egna appens undermapp under `Apps//`. - För varje fil som en agent tänker ändra ska agenten först skapa en tom låsfil: `.agent_wip`. - Om `.agent_wip` redan finns ska agenten vänta 60 sekunder och kontrollera igen. - Upprepa väntan i upp till 10 minuter (10 försök). Om låsfilen fortfarande finns efter 10 minuter: avbryt och be användaren om beslut. - När agenten är klar med filen ska motsvarande `.agent_wip` tas bort direkt. - Låsfilen ska tas bort även vid fel/avbrott så långt det går, för att undvika falska lås. ## 10) Verifieringsdokument när app är redo När en app bedöms som \"redo\" ska appmappen innehålla en verifieringsfil: - `Apps//HOW_TO_VERIFY.md` Filen ska vara praktiskt körbar och innehålla: - tydliga förutsättningar (miljö, DNS, secrets, beroenden), - positiva testfall med förväntade resultat, - minst ett fail-closed/negativt testfall, - exakta kommandon för att verifiera DNS, nät och TLS, - en sektion \"data att samla\" för snabb Codex-felsökning. Sektionen \"data att samla\" ska minst täcka: - versions-/buildinfo (appversion, branch/commit eller zip + checksum), - relevant konfiguration (med maskade secrets), - loggar från berörda containers, - konkreta felobservationer (hostname, tidpunkt, förväntat vs faktiskt beteende).