# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview A Kubernetes monitoring tool that checks for CronJobs not running according to schedule and sends Slack notifications. It runs as a container inside a K8s cluster, polling all CronJobs every 60 seconds. ## Common Commands ```bash # Run tests go test ./... # Run tests with race detection and coverage go test -race -coverprofile=coverage.txt ./... # Build the binary CGO_ENABLED=0 go build -o release/cron-checker -ldflags '-w -s' # Check for vulnerabilities govulncheck ./... # Format and vet go fmt ./... go vet ./... # Check for unused modules go mod tidy ``` ## Architecture This is a single-file Go application (`main.go`) with comprehensive tests (`main_test.go`). **Core Components:** - `doCheck()` - Main loop that polls K8s CronJobs, parses cron schedules, and sends Slack alerts for overdue jobs - `Client` / `ClientProvider` interfaces - Abstractions over K8s client for testability - `ConfigProvider` / `InClusterProvider` - Handles K8s in-cluster authentication **Key Dependencies:** - `k8s.io/client-go` - Kubernetes API client - `github.com/robfig/cron` - Cron schedule parsing - `github.com/multiplay/go-slack` - Slack webhook integration - `github.com/alecthomas/kingpin/v2` - CLI flag parsing **Configuration:** - `SLACK_URL` env var or `--slack-url` flag (required) - Slack webhook URL for notifications ## Building Docker Image The Dockerfile performs a multi-stage build that runs fmt, vet, and tests before building: ```bash docker build -t cron-checker . ``` To extract coverage report: ```bash docker build --target export -o . . ```