# ai-compliance-sdk Go/Gin service providing AI-Act compliance analysis: iACE impact assessments, UCCA rules engine, hazard library, training/academy, audit, escalation, portfolio, RBAC, RAG, whistleblower, workshop. **Port:** `8090` → exposed `8093` (container: `bp-compliance-ai-sdk`) **Stack:** Go 1.24, Gin, pgx, Postgres. ## Architecture Clean-arch refactor is complete: ``` cmd/server/main.go # Thin entrypoint, 7 LOC — wiring in internal/app/ internal/ ├── app/ │ ├── app.go # Server initialization + lifecycle │ └── routes.go # Route registration ├── api/handlers/ # 8 sub-resource handler files: │ │ # iace_handler_projects, hazards, mitigations, │ │ # techfile, monitoring, refdata, rag, components ├── iace/ # Store split into 7 files: │ │ # store_projects, components, hazards, │ │ # hazard_library, mitigations, evidence, audit │ └── hazard_library/ # Split into 10 category files └── ... ``` See `../AGENTS.go.md` for the full convention. **Linting (Phase 5):** `.golangci.yml` added — run `golangci-lint run --timeout 5m ./...`. ## Run locally ```bash cd ai-compliance-sdk go mod download export COMPLIANCE_DATABASE_URL=... go run ./cmd/server ``` ## Tests ```bash go test -race -cover ./... golangci-lint run --timeout 5m ./... ``` Co-located `*_test.go`, table-driven. Repo layer uses testcontainers-go (or the compose Postgres) — no SQL mocks. ## Public API surface Handlers under `internal/api/handlers/` (8 sub-resource files). Health at `GET /health`. iACE, UCCA, training, academy, portfolio, escalation, audit, rag, whistleblower, workshop subresources. Every route is a contract. ## Environment | Var | Purpose | |-----|---------| | `COMPLIANCE_DATABASE_URL` | Postgres DSN | | `LLM_GATEWAY_URL` | LLM router for rag/iACE | | `QDRANT_URL` | Vector search | ## Don't touch DB schema. Hand-rolled migrations elsewhere own it.