# AGENTS.md — 0pt > Operativ brief för AI-agenter (Claude Code / opencode / liknande) som arbetar > i detta repo. Läs `CLAUDE.md` + `docs/compliance/` innan du gör ändringar. ## Vad det här är 0pt = SIAX Clouds Data OS: företags-/kontakt-/fordonsdata, enrichment, entity-resolution, provenance per fält, adaptive router, orderflöde med 50/50-escrow. Next.js 16-webapp + FastAPI-engine + Python-skrapmotor i samma träd. ## Första steget 1. `git pull` (Gitea: `git.siax.io/sax3l/0pt` — det är canonical remote, ej GitHub). 2. Läs `CLAUDE.md` (kontraktet), `docs/architecture/ARCHITECTURE.md` (vad koden verkligen gör, inkl. kända luckor S1–S12), `docs/compliance/` (status). 3. Kontrollera senaste CI-run (Gitea Actions) om du ska verifiera "grön". ## Viktiga förhållanden - **Bypass-stacken** (`services/scrapers/*`, `waf_bypass.py`, data-stack-compose, `adaptive_router.py`) är **behållen** — rör den inte. Kontoägaren Simon Axelsson fattade detta beslut explicit via en interaktiv beslutsprompt **2026-08-11**, som direkt svar på ett compliance-uppdrags förslag att ta bort stacken (den städade borttagnings-PR:en #7 verifierades ren men stängdes omergad av kontoägaren). Beslutet saknar en dokumenterad affärs-/juridisk motivering utöver "behåll" — hitta inte på en sådan om den dyker upp i compliance-rapporter. Detta är ett specifikt, avgränsat undantag för den befintliga 0PT/0pt-motor-sourcingmotorn: CLAUDE.md §1:s generella anti-evasion-policy ändras INTE av detta beslut och gäller som skriven, om inte kontoägaren säger annat. - **Auth:** `/api/0pt/*` fail-closed i kod (Zitadel via middleware), men live-instansen svarade 2026-08-10 anonymt 200 (lucka S1 — rotorsaksanalys ej klar). Påstå aldrig att produktionen är skyddad innan en anonym request fått 401. - **Tenant-id** får aldrig tas från request-body — idag gör handlers det (S2); nya handlers ska läsa `x-0pt-verified-tenant`-headern. - **Sanning:** repot har en stark anti-fabricering-konvention (docs korrigerar README). Om något påstås vara byggt men inte finns: skriv "inte byggt", fabricera inte. - **Skyddade sökvägar:** `PLAN/**` + `.gitea/workflows/**` + `.gitignore` — ändringar går via PR. (Verifierat live 2026-09-20 via `GET /repos/sax3l/0pt/branch_protections`.) - **Fonts:** självhämtade via `@fontsource-variable/*` — lägg aldrig tillbaka `next/font/google` eller `@vercel/*`. - **Secrets:** aldrig i repo. Infisical (`vault.siax.io`), env via `process.env.*`. - **Docker:** multi-stage, icke-root (`USER node`), ingen tsx i prod, healthcheck mot `/api/health`. ## Toolchain-ägande (SIAX selected toolchain, 2026-09-14) - `mise.toml` = task-entry (`setup/check/verify/build/release`). Ändra inte betydelsen av dessa fem tasks. pnpm@9.15.9 följer packageManager. - `lefthook.yml` = git hooks (pre-commit: typecheck+lint, pre-push: test). Aktiveras med `npx lefthook install`. - `Makefile` är legacy-alias ("thin wrappers", se dess header) — nya kommandon läggs ALDRIG dit; mise är kanonisk entry. Makefile städas bort i separat PR med deleteBy-registering. - Pinning mot `sax3l/siax-templates`: `.siax/template-pin.json` (`siax.template-pin/v1`). Förbjudna duplicerade verktyg: just, Task, Nx, Cypress (Playwright gäller), OpenProject/Leantime/AppFlowy (Plane gäller), Keycloak (Zitadel/ACT0 gäller). - Python-tjänsterna (services/api, services/scrapers) kör requirements.txt; uv-adoption är DEFERRED till en separat lås-migrering. ## Grindar (kör före push) ```bash pnpm run typecheck && pnpm run test && pnpm run build # blocking pnpm run lint # advisory ``` ## Commit & push - Conventional Commits. Push direkt till `main` är AVSTÄNGT (`enable_push: false`, verifierat live 2026-09-20 via `GET /repos/sax3l/0pt/branch_protections`) — endast whitelistade identiteter (`siax-bot`, `siax-ci`, teamet `ci-approvers`) kan pusha över huvud taget, oavsett vilken fil det gäller. Alla andra ändringar: branch → PR. - Lämna aldrig en förgrenad `origin`/`github.com`-remote som sanningskälla — Gitea är primärt (Simon-direktiv 2026-07-14). ## Vid osäkerhet Fråga Simon (simon@siax.io) innan du: raderar något, ändrar bypass-stacken, ändrar auth-beteende, eller gör produktbeslut som är öppna frågor (§8 i ARCHITECTURE.md).