From d1d4daf7b5cbf21a6ea621520bc14a95245ddfac Mon Sep 17 00:00:00 2001 From: Ross Tomsic Date: Sun, 9 Aug 2026 12:25:22 -0400 Subject: [PATCH] Rename CLAUDE.md to AGENTS.md and symlink it back Codex reads AGENTS.md and Claude Code reads CLAUDE.md; neither reads the other's. A symlink makes one file serve both, per R055LE/runbook decisions/0012. Content is unchanged. --- AGENTS.md | 41 +++++++++++++++++++++++++++++++++++++++++ CLAUDE.md | 42 +----------------------------------------- 2 files changed, 42 insertions(+), 41 deletions(-) create mode 100644 AGENTS.md mode change 100644 => 120000 CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..4e89ece --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,41 @@ +# go-deploy-lab + +## Project Overview + +A deliberately simple Go application with a deliberately thorough deployment lifecycle. Config registry (namespaced key-value store) backed by PostgreSQL. The app is boring on purpose — the infrastructure discipline is the point. + +## Git Conventions + +- Do NOT add Co-Authored-By trailers to commits. +- Use conventional commit format: `feat:`, `fix:`, `docs:`, `ci:`, `chore:`, etc. +- Keep commits atomic and descriptive. + +## Architecture + +- `cmd/server/` — Entrypoint. Config loading, signal handling, graceful shutdown. +- `internal/config/` — 12-factor env-based config with validation. +- `internal/handler/` — HTTP handlers for CRUD + health/readiness probes. +- `internal/middleware/` — Request ID, structured logging, Prometheus metrics. +- `internal/store/` — PostgreSQL repository using pgx/v5 connection pool. +- `internal/metrics/` — Prometheus collectors. +- `migrations/` — SQL migrations run via golang-migrate init container. +- `docker/` — Multi-stage Dockerfile targeting distroless. +- `k8s/` — Kubernetes manifests (deployment, service, ingress, HPA, PostgreSQL StatefulSet). +- `policies/` — Kyverno ClusterPolicies (non-root, resource limits, drop capabilities). +- `monitoring/` — Prometheus scrape config, Grafana dashboard as code. + +## Build Order + +```bash +task test # Run tests +task build # Build binary +task docker:build # Build container image +``` + +## Key Constraints + +- Go 1.26.2, pgx/v5 for database (not database/sql + lib/pq) +- Structured logging via stdlib slog (no external logging deps) +- Distroless final image — no shell, no package manager +- Migrations run as init container, not on application boot +- All containers run as non-root with dropped capabilities diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 4e89ece..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,41 +0,0 @@ -# go-deploy-lab - -## Project Overview - -A deliberately simple Go application with a deliberately thorough deployment lifecycle. Config registry (namespaced key-value store) backed by PostgreSQL. The app is boring on purpose — the infrastructure discipline is the point. - -## Git Conventions - -- Do NOT add Co-Authored-By trailers to commits. -- Use conventional commit format: `feat:`, `fix:`, `docs:`, `ci:`, `chore:`, etc. -- Keep commits atomic and descriptive. - -## Architecture - -- `cmd/server/` — Entrypoint. Config loading, signal handling, graceful shutdown. -- `internal/config/` — 12-factor env-based config with validation. -- `internal/handler/` — HTTP handlers for CRUD + health/readiness probes. -- `internal/middleware/` — Request ID, structured logging, Prometheus metrics. -- `internal/store/` — PostgreSQL repository using pgx/v5 connection pool. -- `internal/metrics/` — Prometheus collectors. -- `migrations/` — SQL migrations run via golang-migrate init container. -- `docker/` — Multi-stage Dockerfile targeting distroless. -- `k8s/` — Kubernetes manifests (deployment, service, ingress, HPA, PostgreSQL StatefulSet). -- `policies/` — Kyverno ClusterPolicies (non-root, resource limits, drop capabilities). -- `monitoring/` — Prometheus scrape config, Grafana dashboard as code. - -## Build Order - -```bash -task test # Run tests -task build # Build binary -task docker:build # Build container image -``` - -## Key Constraints - -- Go 1.26.2, pgx/v5 for database (not database/sql + lib/pq) -- Structured logging via stdlib slog (no external logging deps) -- Distroless final image — no shell, no package manager -- Migrations run as init container, not on application boot -- All containers run as non-root with dropped capabilities diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file