# Contributing — 0pt > 0pt (SIAX Cloud Data OS) är proprietär mjukvara från SIAX Technology AB. > Interna bidrag följer konventionerna nedan. Externt: kontakta > `security@siax.io` / `simon@siax.io` innan bidrag. ## Repo-ryggrad - **Kategori:** platform (K1) · **Subkategori:** data-os · **SSOT:** [`siax.repo.json`](siax.repo.json) + [`siax.config.json`](siax.config.json) - **Kontrakt:** [`contracts/openapi.yaml`](contracts/openapi.yaml) — alla API-ändringar börjar här (SSOT), sedan routehandler. - **Dokumentation:** `CLAUDE.md` först, sedan `docs/` och `docs/compliance/`. Om kod och docs avviker: skriv avvikelsen, fabricera inte. ## Hårda regler (bryt aldrig) 1. **AR-1** — radera aldrig befintlig funktionalitet/endpoint. Bygg färdigt. Undantag: `services/scrapers/*` + `services/infra/docker-compose.data-stack.yml` är **medvetet behållna per kontoägarens daterade beslut** (Simon Axelsson, 2026-08-11 — se SECURITY.md/AGENTS.md) — rör dem inte. 2. **AR-2** — rör aldrig frysta kundrepon (contentroom, v0-datahub, prt-*, …). 3. **AR-4** — inga betald-SaaS-beroenden; inga Vercel/GCP/Azure/Google Fonts/ `next/font/google`; Cloudflare endast inom pågående migrering. 4. **AR-5** — bevis, inte påståenden. Märk VERIFIERAT/ANTAGANDE/EJ VERIFIERAT. 5. **AR-6** — aldrig hemligheter i repo (Infisical). Inga `NEXT_PUBLIC_*`-hemligheter. 6. **AR-8** — beroenden pekar bara nedåt (K1; aldrig kundrepon). 7. Tenant-id bunden till sessionen — aldrig litat på från request-body. ## Arbetsflöde 1. Branch från `main`: `git switch -c fix/my-change` (conventional prefix). 2. `pnpm install --frozen-lockfile` (eller `--no-frozen-lockfile` om lockfilen medvetet uppdateras). 3. Grindar innan push: ```bash pnpm run typecheck # BLOCKERANDE (src/ + tests/) pnpm run test # BLOCKERANDE (vitest) pnpm run lint # rådgivande (legacy-noise finns) pnpm run build # BLOCKERANDE (next build) ``` 4. Conventional Commits: `feat:` / `fix:` / `docs:` / `chore:` / `ci:` / `refactor:`. 5. **`.gitea/workflows/**` och `.gitignore` är skyddade på `main`** — ändringar där går via PR (push direkt avvisas av pre-receive-hook). 6. Öppna PR mot `main`; CI måste vara grön innan merge. 7. Commit-meddelanden på engelska; UI-copy på svenska. ## Testkonventioner - Enheter + capability-tester: `tests/{auth,p0,validation}/`. - Real-infra-tester (`*.realinfra.test.ts`) skippar ärligt när ST0RE/N0D inte nås. - Lägg aldrig till en test som fabricerar påståenden om kod som inte finns. ## Merge & release - Merge via PR till `main` (skyddad). CD: `.gitea/workflows/cd.yml` triggar Coolify-redeploy — fails medvetet tills en Coolify-app provisionerats och `COOLIFY_APP_ID`/`COOLIFY_TOKEN` satts.