# Changelog All notable changes to Veylant IA are documented in this file. Format: [Conventional Commits](https://www.conventionalcommits.org/) — `feat`, `fix`, `chore`, `docs`, `perf`, `security`. --- ## [1.0.0] — 2026-06-21 — Production Launch ### Milestone 6 — Beta, Polish & Launch (Sprint 13) #### feat: Production K8s cluster on AWS eu-west-3 (E1-10) - Terraform EKS module: 3-AZ managed node groups (eu-west-3a/b/c), t3.medium, cluster v1.31 - HPA `autoscaling/v2` template: CPU 70% + memory 80% targets, scale 3→15 replicas - `values-production.yaml`: replicaCount=3, autoscaling enabled, fail_open=false for PII - Daily PostgreSQL backup CronJob: pg_dump | gzip → S3, 7-day retention via S3 lifecycle - S3 backup bucket with AES-256 encryption, public access blocked, IRSA for pod-level IAM - PodDisruptionBudget: minAvailable=1 (Sprint 12) - Topology spread constraints across AZs #### feat: Production monitoring stack (E1-11) - Alertmanager: PagerDuty (critical) + Slack (warning + critical channels), inhibit rules - 4 new Prometheus alert rules: VeylantProxyDown, VeylantCertExpiringSoon, VeylantDBConnectionsHigh, VeylantPIIVolumeAnomaly - Production SLO dashboard: uptime 99.5% gauge, error budget remaining, PII by type, DB connections, provider breakdown, Redis memory - Extended proxy-overview dashboard: +3 panels (PII rate by type, DB connections, provider pie chart) - Prometheus alertmanager integration + rule_files config - Blackbox exporter config for TLS certificate expiry probing #### feat: Pilot client migration runbook (E11-13) - 5-phase migration runbook: pre-migration backup → PG data migration → Keycloak reconfiguration → validation → SSO cutover - Rollback plan at each phase - CORS update procedure for client domains #### feat: 5 operational runbooks (E1-12) - `provider-down.md`: circuit breaker recovery, fallback activation, escalation matrix - `database-full.md`: connection pool exhaustion, VACUUM, PVC expansion via AWS EBS - `certificate-expired.md`: cert-manager forced renewal, emergency self-signed rollback - `traffic-spike.md`: HPA manual override, tenant rate limiting, maintenance mode - `pii-breach.md`: GDPR Art. 33 notification procedure, CNIL 72h deadline, evidence collection #### docs: Pentest remediation report (E11-12) - CVSS heatmap: 0 Critical, 0 High, 0 Medium open - 5 findings documented with remediation evidence - Go/No-Go checklist for Sprint 13 production decision #### docs: Commercial materials (E11-14) - One-pager: Shadow AI problem → Veylant solution → differentiators → pricing → CTA - Pitch deck (10 slides): problem, solution, PII demo, governance, compliance, business model, roadmap, team, CTA - Battle card: RSSI / DSI / DPO personas — pain points, qualification questions, objection handling, MEDDIC grid, competitive positioning --- ## [0.2.0] — 2026-05-30 — Sprint 12 (Security & Polish) ### Security & UX hardening (E11-09 / E11-10) - **fix(security): CORS middleware** — `Access-Control-Allow-Origin` allowlist per environment; OPTIONS preflight 204 - **fix(security): CSP segmented** — strict CSP for `/v1/*`, relaxed for `/docs` and `/playground` (unpkg.com allowed) - **fix(security): COOP header** — `Cross-Origin-Opener-Policy: same-origin` added - **fix(ratelimit): Retry-After header on 429** — RFC 6585 compliant; `RetryAfterSec: 1` default - **fix(ux): 403 message with allowed models** — error now lists allowed models for the user's role - **feat(ux): X-Request-Id in error responses** — `WriteErrorWithRequestID()` injects request ID in all error responses ### Observability (E2-12) - **feat(observability): k6 load test suite** — 4 scenarios (smoke/load/stress/soak), `SCENARIO` env var selection, p99 < 500ms threshold - **feat(observability): Prometheus recording rules** — p99, p95, request rate, error rate pre-computed - **feat(observability): 3 alert rules** — VeylantHighLatencyP99, VeylantHighErrorRate, VeylantCircuitBreakerOpen ### Blue/Green Deployment (E1-09) - **feat(deploy): Istio VirtualService + DestinationRule** — blue/green subsets, atomic traffic switch - **feat(deploy): blue-green.sh** — 7-step orchestration: detect active slot → deploy inactive → smoke test → patch VS → verify → scale down old slot - **feat(deploy): PodDisruptionBudget** — minAvailable=1 - **feat(ci): k6 smoke job in CI** — runs before deploy-staging; blocks deployment on SLA breach ### Public Playground (E8-15) - **feat(product): GET /playground** — self-contained HTML demo page with PII visualization and color-coded entity badges - **feat(product): POST /playground/analyze** — IP rate-limited (20 req/min, 5-min eviction), graceful PII fallback - **feat(security): Semgrep custom rules** — 6 rules: context.Background() in handlers, SQL injection, sensitive logging, hardcoded keys, missing MaxBytesReader, Python eval() ### Documentation (E11-08 / E11-11) - **docs: feedback-backlog.md** — Sprint 12 MoSCoW from 2 pilot sessions (TechVision ESN + RH Conseil) - **docs: pentest-scope.md** — grey box pentest scope, attack surfaces, rules of engagement --- ## [0.1.0] — 2026-04-30 — Sprint 11 (Feature Flags, E2E Tests, OpenAPI, Guides) - **feat: Feature flags** — PostgreSQL-backed with in-memory fallback (E11-07) - **feat: E2E tests** — Playwright for dashboard UI, testcontainers for integration (E11-01a/b) - **feat: OpenAPI 3.1 spec** — swaggo annotations, Swagger UI at /docs (E11-02) - **docs: Integration guide** — OpenAI SDK compatibility, environment setup (E11-03) - **docs: Admin guide** — routing rules, RBAC, CORS configuration (E11-04) - **docs: Onboarding guide** — first-time setup, Keycloak federation (E11-05/06) --- ## [0.0.1] — 2026-02-15 — Sprints 1–10 (MVP Core) - Go proxy: chi router, zap logger, viper config, graceful shutdown - PII sidecar: FastAPI + gRPC, regex + Presidio + spaCy (fr_core_news_lg), 3-layer detection - Intelligent routing engine: PostgreSQL JSONB, in-memory cache, priority ASC, first-match-wins - RBAC: Keycloak OIDC, 4 roles (admin/manager/user/auditor), per-model restrictions - Audit logs: ClickHouse append-only, async batch writer, TTL retention - GDPR Article 30 registry + AI Act risk classification + PDF export - Multi-tenant isolation: PostgreSQL RLS, `veylant_app` role, per-session `app.tenant_id` - AES-256-GCM encryption for prompt storage, Redis pseudonymization mappings - Provider adapters: OpenAI, Anthropic, Azure, Mistral, Ollama - Circuit breaker: threshold=5, open_ttl=60s - Token-bucket rate limiter: per-tenant + per-user, DB overrides - Prometheus metrics middleware + Grafana dashboards - React 18 dashboard: shadcn/ui, recharts, OIDC auth flow - Helm chart v0.1.0, Docker multi-stage build, docker-compose dev stack - CI/CD: golangci-lint, black, ruff, Semgrep SAST, Trivy image scan, gitleaks, OWASP ZAP DAST