# Milestones ## 1. Domain Model Objective: define environments, workloads, operations, statuses, and typed validation errors. Go concepts: - packages - structs - methods - constants - wrapped errors - table-driven tests Files: - `internal/domain/environment.go` - `internal/domain/workload.go` - `internal/domain/operation.go` - `internal/domain/errors.go` - `internal/domain/*_test.go` Tests: - environment validation - workload validation - operation status validation - `errors.Is` behavior for sentinel errors Done when: - `go test ./...` passes - invalid domain objects return useful wrapped errors ## 2. In-Memory Storage Objective: add storage interfaces and a concurrency-safe memory implementation. Go concepts: - interfaces - `sync.RWMutex` - context propagation - idempotent create/delete - storage contract tests ## 3. Application Services Objective: add use cases that coordinate storage and provider interfaces. Go concepts: - dependency injection - small interfaces - context cancellation - business error mapping ## 4. gRPC API Objective: expose environment and workload APIs over gRPC. Go concepts: - protobuf contracts - generated Go code - gRPC handlers - gRPC status errors - bufconn tests ## 5. CLI `mpctl` Objective: add Cobra commands backed by the gRPC client. Go concepts: - command construction - Viper config loading - command tests - output formatting ## 6. Workload Deployment Path Objective: deploy workloads using a fake cloud provider and idempotency keys. Go concepts: - retries - cancellation - interface mocks - retryable vs permanent errors ## 7. Temporal Workflows Objective: move long-running create/delete/deploy operations into workflows. Go concepts: - workflow determinism - activities - Temporal test environment - cancellation ## 8. Helm And Kubernetes Adapters Objective: render workload manifests and apply them through a fake Kubernetes client, then later a real one. Go concepts: - adapter boundaries - YAML/object validation - interface-driven tests ## 9. Observability Objective: add structured logs, Prometheus metrics, and OpenTelemetry traces. Go concepts: - `log/slog` - metrics labels - trace/span propagation - observability tests ## 10. MongoDB Storage Objective: add a MongoDB implementation behind the same storage interfaces. Go concepts: - integration tests - serialization - repository contract reuse ## 11. Local End-to-End Test Objective: run the API, worker, and local dependencies together. Go concepts: - black-box tests - process orchestration - test fixtures ## 12. Kubernetes Deployment Objective: package and deploy into `kind` or `k3d`, then later the homelab cluster. Go concepts: - container builds - runtime config - readiness checks - Helm chart values