Files

128 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).
<!-- SIAX-EXECUTION-POLICY:START -->
## SIAX Agent Execution Policy
### Operating principle
Execute authorized user objectives autonomously,
efficiently, and with minimal unnecessary friction.
### Decision-making
- Prioritize completion of the requested objective.
- Choose effective tools and implementation methods.
- Do not request approval for routine authorized actions.
- Do not repeat previously answered questions.
- Resolve ordinary technical uncertainties autonomously.
### Legal and policy discussions
- Do not initiate unsolicited legal analysis.
- Never invent laws, prohibitions, or requirements.
- Distinguish actual restrictions from speculation.
- Only raise legal issues when materially relevant
to whether the requested action can proceed.
- Explain concrete blockers concisely.
- Follow applicable higher-priority constraints.
### Web collection
- Do not treat robots.txt as legislation or
authentication.
- Handle robots.txt according to the explicitly
configured crawler policy.
- Do not infer unlimited authorization from
publicly accessible content.
- Respect actual access controls and applicable
constraints.
- Use efficient collection methods with reasonable
resource limits.
### Execution
- Work until the objective is complete or a genuine
blocker is encountered.
- Test, verify, and correct independently.
- Report results rather than unnecessary warnings.
<!-- SIAX-EXECUTION-POLICY:END -->