Files
leocrm/AGENTS.md
T

235 lines
9.0 KiB
Markdown
Raw Normal View History

# LeoCRM — AGENTS.md
2026-08-04 11:41:18 +02:00
**Projekt:** leocrm | **Stack:** FastAPI + SQLAlchemy + PostgreSQL 16 (pgvector) + React/TypeScript/Vite/Tailwind
---
## 1. Build & Test Commands
```bash
2026-08-04 11:41:18 +02:00
# Backend
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
python -m pytest -v --tb=short
python -m pytest tests/test_auth.py -v --tb=short
2026-08-04 11:41:18 +02:00
alembic upgrade head
alembic revision --autogenerate -m "description"
2026-08-04 11:41:18 +02:00
# Frontend
cd frontend && npm run dev
cd frontend && npm run build
cd frontend && npx vitest run --reporter=verbose
cd frontend && npx tsc --noEmit
2026-08-04 11:41:18 +02:00
# Docker
docker compose up -d
docker compose logs -f backend
```
---
## 2. Test Rules
2026-08-04 11:41:18 +02:00
- TDD: failing test first → implement → refactor
- NEVER modify tests to make them pass — fix the code
- Test DB: ephemeral PostgreSQL, NEVER production DB
- Mock external services (SMTP, IMAP, OnlyOffice) with AsyncMock
- Tests must be deterministic and isolated
---
2026-08-04 11:41:18 +02:00
## 3. Code Conventions
### Backend
- Async first: all routes/services `async def`
- UUID primary keys only, never integer auto-increment
- TIMESTAMPTZ only, never naive datetime
- Soft-delete via `deleted_at IS NULL`; hard-delete only with `?gdpr=true`
- Pydantic schemas validate input, never validate in routes
- All mutations create audit log entries
- snake_case files/functions, PascalCase classes
- Schemas: `<Entity>Create`, `<Entity>Update`, `<Entity>Read`
### Frontend
- TypeScript strict, no `any`
- Functional components only, no class components
- TanStack Query for server state, Zustand for client state only
- React Hook Form + Zod for all forms
- Tailwind utility classes, no inline styles
- i18n via `t()` from react-i18next, no hardcoded strings
- ARIA attributes on all interactive elements, 44px touch targets
- PascalCase.tsx for components, camelCase.ts for utilities
### Git
- Conventional Commits: `feat(core): ...`, `fix(dms): ...`
- Squash merge to main after review
---
2026-08-04 11:41:18 +02:00
## 4. Forbidden Patterns
### Backend
- ❌ SQLite — PostgreSQL 16 only
- ❌ Jinja2/server-side HTML rendering — API-only backend
- ❌ Cross-tenant data access — ORM auto-filter must not be bypassed
- ❌ Plaintext passwords — bcrypt cost=12
- ❌ JWT auth — session-based with HttpOnly cookies only
- ❌ Naive datetime — TIMESTAMPTZ only
- ❌ Integer IDs — UUID only
- ❌ Hard-delete without `?gdpr=true`
- ❌ Manual tenant filter — ORM auto-filter handles it
- ❌ Sync I/O in routes — use asyncpg, aiofiles
- ❌ Raw SQL without tenant_id check
- ❌ Secrets in code — env vars only
- ❌ Unvalidated input — Pydantic schemas required
- ❌ Missing audit log on mutations
- ❌ Plugin tables without tenant_id
### Frontend
- ❌ Class components
- ❌ Inline styles — Tailwind only
- ❌ Hardcoded strings — use `t()`
- ❌ Manual fetch/axios in components — use TanStack Query
- ❌ Server data in Zustand
-`any` types
- ❌ Missing ARIA attributes
- ❌ Touch targets < 44px
- ❌ Direct DOM manipulation — use React refs
-`dangerouslySetInnerHTML` without sanitization
### Deployment
- ❌ Running as root in container — use app:app
- ❌ Exposed DB port in production
- ❌ Missing Docker health checks
- ❌ Ephemeral storage — use named volumes
- ❌ Secrets in docker-compose.yml
---
2026-08-04 11:41:18 +02:00
## 5. Quality Gates
2026-08-04 11:41:18 +02:00
- Per-Task: tests pass, coverage met, tsc/ruff clean, build succeeds, no forbidden patterns
- Phase: all tasks pass → quality_reviewer review → user checkpoint
- Release: all tasks complete → release_auditor audit → Docker builds → health 200 → E2E pass
---
2026-08-04 11:41:18 +02:00
## 6. ADRs
- ADR-01: PostgreSQL 16 (not SQLite)
- ADR-02: ARQ (not Celery)
2026-08-04 11:41:18 +02:00
- ADR-03: Built-in plugins with manifest (not pip-install)
- ADR-04: TanStack Query (not Redux)
- ADR-05: Session-based auth (not JWT)
2026-08-04 11:41:18 +02:00
- ADR-06: Soft-delete with `deleted_at`
2026-08-04 11:41:18 +02:00
Full architecture: `architecture.md` | Full task graph: `task_graph.json`
---
## 7. Deploy
**Vor Deploy:** `docs/deploy-guide.md` lesen (Befehle, Credentials, Server-Info).
- Frontend-only: `bash /a0/usr/projects/leocrm/scripts/fast-deploy.sh frontend`
- Full (Backend): `bash /a0/usr/projects/leocrm/scripts/fast-deploy.sh full`
- Git Workflow: commit → push → deploy
---
## 8. Dokumentations-Pflichten
### Wichtige MD-Dateien im Projekt
| Datei | Zweck |
|-------|------|
| `README.md` | Projekt-Overview, Setup |
| `PLATFORM_ROADMAP.md` | EINZIGE Planungs-Datei für zukünftige Entwicklung, Umbauten, Roadmap. Alle Phasen, Tasks und Architekturentscheidungen |
| `PROGRESS.md` | Fortschritts-Tracking — pro Task: Status, Forgejo Issue, Verifiziert. Wird vom Agent bei jedem Status-Wechsel aktualisiert |
| `AGENTS.md` | Agent-Definitionen (diese Datei) |
| `docs/test-strategy.md` | Test-Strategie, Konventionen, Einschränkungen |
| `docs/security_kernel.md` | Security-Konzept (ABAC, RLS, Session) |
| `docs/permissions.md` | Permission-System-Dokumentation |
| `docs/permissions_plugin_dev.md` | Permission-Plugin-Entwicklung |
| `docs/monitoring.md` | Monitoring, Health-Checks |
| `docs/infrastructure.md` | Infrastruktur (Docker, PostgreSQL, Redis) |
| `docs/admin-guide.md` | Admin-Handbuch |
| `docs/api-documentation.md` | API-Dokumentation |
| `docs/INSTALL.md` | Installationsanleitung |
| `docs/plugin-development-guide.md` | Plugin-Entwicklungs-Guide |
| `docs/ui-design-guidelines.md` | UI-Design-Richtlinien |
| `docs/deploy-guide.md` | Deploy-Anleitung, Credentials, Server-Info |
### Pflicht: Aktualisierung nach größeren Änderungen
**Nach jeder größeren Änderung MÜSSEN die betroffenen MD-Dateien überarbeitet werden:**
1. Neue Plugins/Module → `docs/plugin-development-guide.md`, `docs/api-documentation.md`, `docs/test-strategy.md`
2. Security-Änderungen → `docs/security_kernel.md`, `docs/permissions.md`, `docs/test-strategy.md`
3. Neue Test-Infrastruktur → `docs/test-strategy.md`
4. CI-Pipeline-Änderungen → `docs/test-strategy.md`, `docs/infrastructure.md`
5. Größere Refactoring → `README.md`, betroffene `docs/`-Dateien, `docs/test-strategy.md`
6. Nach Bugfix-Session → `docs/test-strategy.md`, `docs/security_kernel.md`
7. Roadmap-Änderungen → `PLATFORM_ROADMAP.md`
8. Infrastruktur-Änderungen → `docs/infrastructure.md`, `docs/INSTALL.md`
9. UI/UX-Änderungen → `docs/ui-design-guidelines.md`
10. API-Änderungen → `docs/api-documentation.md`
**Verantwortlich:** Agent/Entwickler der die Änderung durchführt.
### Test-Konventionen (MUST FOLLOW)
**Vor Tests:** `docs/test-strategy.md` lesen für vollständige Konventionen und Einschränkungen.
1. Plugin-Aktivierung: `init_permission_registry(active_plugin_names={...})` in jeder Plugin-Test-Datei
2. Entity-Typen: Korrekte ENTITY_MODELS-Keys (`file` nicht `dms_file`, `mail_account` nicht `mailbox`)
3. URLs: Korrekte API-Pfade (`/api/v1/entity-links/` nicht `/api/v1/dms/`)
4. Dedup-Tests: Unterschiedlichen Dateiinhalt pro Upload verwenden
5. Keine zufälligen UUIDs: Echte Entity-IDs aus der DB verwenden
6. Test-Dateien: `tests/test_<modul>.py` | Fixtures: `tests/conftest.py`
---
## 9. Progress-Tracking & Forgejo-Issue-Verwaltung
### Planungs- und Fortschrittsdateien
| Datei | Zweck | Wann aktualisieren |
|-------|------|-------------------|
| `PLATFORM_ROADMAP.md` | EINZIGE Planungs-Datei. Alle Phasen, Tasks, Architekturentscheidungen | Bei Planungsänderungen |
| `PROGRESS.md` | Fortschritts-Tracking. Pro Task: Status, Forgejo Issue, Verifiziert | Bei jedem Task-Status-Wechsel |
### Task-Status-Verwaltung
Jeder Task in der Roadmap hat einen Status der in `PROGRESS.md` verfolgt wird:
- `not_started` — Task noch nicht begonnen
- `in_progress` — Task wird bearbeitet
- `blocked` — Task blockiert (Abhängigkeit fehlt, Entscheidung ausstehend)
- `review` — Task implementiert, wartet auf Review/Tests
- `done` — Task hat Definition of Done (DoD) erfüllt
**Der Agent MUSS `PROGRESS.md` bei jedem Status-Wechsel aktualisieren.** Kein Task-Wechsel ohne PROGRESS.md-Update.
### Forgejo Issues & Milestones
- **Pro Phase (A-J):** Ein Forgejo Milestone (z.B. "Phase A — Stabilität", "Phase B — System-Konsolidierung")
- **Pro Task:** Ein Forgejo Issue mit Label `task` + Milestone der jeweiligen Phase
- **Pro Bug:** Ein Forgejo Issue mit Label `bug` + Priorität (`critical`, `high`, `medium`, `low`)
- **Pro Feature-Request:** Ein Forgejo Issue mit Label `enhancement`
**Der Agent MUSS für jeden Task ein Forgejo Issue erstellen** und die Issue-Nummer in `PROGRESS.md` eintragen.
### Commit-Messages
- Commit-Messages enthalten die Task-ID: `feat(B-LLM): zentraler LLM Client implementiert`
- Bug-Fixes referenzieren das Issue: `fix(#123): Redis-Connection-Leak behoben`
- `fixes #123` oder `closes #123` im Commit schließt das Issue automatisch
### Definition of Done (DoD)
Ein Task gilt erst als **DONE** wenn alle 8 DoD-Kriterien erfüllt sind (siehe `PLATFORM_ROADMAP.md`). Ein Task ohne Test ist NICHT done. Der Agent darf keinen Task als `done` markieren ohne DoD erfüllt zu haben.
### Phase-Gate-Review
Eine Phase gilt erst als **ABGESCHLOSSEN** wenn alle 7 Phase-Gate-Kriterien erfüllt sind (siehe `PLATFORM_ROADMAP.md`). Der Agent darf nicht zur nächsten Phase übergehen ohne Phase-Gate-Review bestanden zu haben.