CI (SIAX Cloud) / integration (push) Has been skipped
masterplan-lock / check (push) Successful in 4s
CI (SIAX Cloud) / security (push) Successful in 16s
Security Scan (SIAX Cloud) / security (push) Successful in 17s
CI (SIAX Cloud) / quality (push) Successful in 36s
masterplan-lock / check (pull_request) Successful in 4s
CI (SIAX Cloud) / security (pull_request) Successful in 14s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 23s
CI (SIAX Cloud) / quality (pull_request) Successful in 39s
CI (SIAX Cloud) / integration (pull_request) Successful in 51s
Rewrite the branch-protection / protected-paths section of AGENTS.md to state the verified-live Gitea branch_protections values instead of stale prose. No behavior change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
86 lines
4.3 KiB
Markdown
86 lines
4.3 KiB
Markdown
# 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).
|