# CI Workflows `ci.yml` runs on pushes to `main` and on pull requests. It cancels older runs for the same ref. Jobs: - `openapi` - lints `api/openapi.yaml` with pinned `@redocly/cli`. - `agent` - runs `gofmt`, `go vet`, `go test ./...`, and `go test -race ./...`. - `server` - installs with `uv`, then runs Ruff and pytest. - `web` - installs with npm, regenerates API types, then runs lint, typecheck, build, and Playwright smoke. - `stack-smoke` - runs `deploy/smoke.sh` after server and agent jobs pass. Keep tool versions pinned in the workflow or in the component lockfiles. Do not replace pinned CI tools with `latest`.