41 lines
2.0 KiB
Markdown
41 lines
2.0 KiB
Markdown
# C0PY — AGENTS.md
|
|
|
|
## Repo-konventioner
|
|
|
|
- **Package manager**: pnpm (frozen-lockfile)
|
|
- **Framework**: Next.js (apps/web), Fastify (apps/api)
|
|
- **TypeScript**: strict mode, bundler module resolution
|
|
- **CI**: Gitea Actions — `.gitea/workflows/ci.yml`
|
|
- **Deploy**: Coolify via `.gitea/workflows/deploy.yml`
|
|
- **Secrets**: Infisical (`vault.siax.io`) — ALDRIG i repo
|
|
- **Testing**: vitest (apps/api, packages/*)
|
|
- **Lint**: eslint flat config
|
|
- **OTel**: not yet wired — add bootstrap at apps/api/src/index.ts entry when available
|
|
- **Tenant**: bound to session via CL0UD, NEVER from client input
|
|
|
|
## Drift (Coolify)
|
|
|
|
- **App UUID**: `wvmn6eg40jofssvm3nigmav6`, server6
|
|
- **Postgres UUID**: `qhucpjjpv3mx9jupqkbyf5uh`, server6
|
|
- **Image**: `wvmn6eg40jofssvm3nigmav6:latest` (built on server6 from /tmp/c0py-build)
|
|
- **Deploy**: `cd /data/coolify/applications/wvmn6eg40jofssvm3nigmav6 && docker compose up -d`
|
|
- **DNS**: `c0py.siax.io` → 65.109.19.146 (Cloudflare A, proxied)
|
|
- **Coolify API**: POST `/api/v1/applications/dockerfile` (NOT `/api/v1/applications`)
|
|
- **Health check**: `GET /health` → 200 (wget-based, Fastify HTTP)
|
|
|
|
## Kontrakt
|
|
|
|
- API-kontrakt: `contracts/openapi.yaml`
|
|
- Schema-versionshantering: semantisk versionering i `packages/types`
|
|
- Digital Twin Spec: `docs/spec/DIGITAL-TWIN-SPEC.md` (fullständig specifikation för webbplats-analys och identisk reproduktion)
|
|
|
|
## Fällor
|
|
|
|
- `NEXT_PUBLIC_*` ska ALDRI innehålla hemligheter
|
|
- Alla writes till AUD0/ST0RE via klientskikt, aldrig direkt
|
|
- Crawling ska vara throttle-ad och respect robots.txt
|
|
- **Docker COPY over build stages bryter pnpm-symlinks** — kör `pnpm install --frozen-lockfile` i runtime-staget, lägg till tsx-symlink efteråt
|
|
- `tsx` är devDependency i `@siax/c0py-api` — pnpm länkar workspace-devDeps INTE till rot-nivå
|
|
- Auth: preHandler hook kollar `Authorization: Bearer *`-header, returnerar 401 annars
|
|
- **GitHub push**: använd `gh auth login` (keyring), INTE inbäddade tokens i URLs
|