Skip to content

Infrastructure & quality

Cross-cutting plumbing: container stack, tests, error boundaries, code splitting.

Feature Status Description
Docker Compose ✅ docker/docker-compose.yml: full stack (Postgres pgvector, MinIO, Neo4j Browser 7476 + Bolt 7689 on host (defaults +2), backend, worker linux/amd64 + openkms-cli[parse] for Paddle doc-parse on Apple Silicon, qa-agent on http://localhost:8103 (KB Agent URL http://qa-agent:8103), nginx frontend on http://localhost:8082); optional build mirrors (APT_MIRROR, UV_INDEX_URL, NPM_REGISTRY) — docker/README.md; MinIO and Postgres have no host port mappings by default—S3 from the browser uses nginx /buckets/...; register Neo4j in Console → Data sources (host neo4j, port 7687, see docker/README.md); run docker compose -f docker/docker-compose.yml up -d --build / down from repo root; infra-only: docker compose -f docker/docker-compose.yml up -d postgres minio neo4j
Backend tests ✅ pytest (pytest-asyncio still a test dep where used); API smoke uses a session-scoped TestClient (GET /health, openapi); GET /api/admin/health-status requires auth (see Console & authentication)
Dev / observability ✅ SQLAlchemy echo only when OPENKMS_SQL_ECHO=true (not tied to OPENKMS_DEBUG)
Frontend tests ✅ Vitest, @testing-library/react; App smoke; src/data/apiClient.test.ts (isRejectedJwtResponse including i18n auth codes, authAwareFetch retry + SESSION_EXPIRED_API_DETAIL; see Session vs API JWT row above)
Error boundary ✅ React ErrorBoundary around routes; fallback with retry
Session vs API JWT mismatch ✅ authAwareFetch wraps authenticated API calls; recoverable 401 runs one silent session retry (OIDC refresh + sync-session; local /me cookie check) then the session-expired handler; response body is replaced with a short sign in again message; user is sent to local /login or OIDC interactive sign-in
Route code splitting ✅ React.lazy for heavy routes (ObjectExplorer, Models, Pipelines, etc.)
Typecheck ✅ npm run typecheck (tsc --noEmit)