apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: claudebox
  namespace: rdev
  labels:
    app.kubernetes.io/name: claudebox
    app.kubernetes.io/part-of: rdev
spec:
  serviceName: claudebox
  replicas: 1
  selector:
    matchLabels:
      app: claudebox
  template:
    metadata:
      labels:
        app: claudebox
        app.kubernetes.io/name: claudebox
        app.kubernetes.io/part-of: rdev
        rdev.orchard9.ai/role: worker
    spec:
      containers:
        - name: claudebox
          image: registry.threesix.ai/rdev/claudebox:latest
          imagePullPolicy: Always

          env:
            # Claude Code Telemetry - exports to OTEL collector
            - name: CLAUDE_CODE_ENABLE_TELEMETRY
              value: "1"
            - name: OTEL_METRICS_EXPORTER
              value: "otlp"
            - name: OTEL_LOGS_EXPORTER
              value: "otlp"
            - name: OTEL_EXPORTER_OTLP_PROTOCOL
              value: "grpc"
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "otel-collector.observability.svc.cluster.local:4317"
            - name: OTEL_SERVICE_NAME
              value: "claudebox-standalone"
            - name: OTEL_METRIC_EXPORT_INTERVAL
              value: "10000"
            - name: OTEL_LOGS_EXPORT_INTERVAL
              value: "5000"

          resources:
            requests:
              cpu: "500m"
              memory: "1Gi"
            limits:
              cpu: "2"
              memory: "4Gi"

          volumeMounts:
            # Workspace for projects
            - name: workspace
              mountPath: /workspace

            # Claude config directory (persistent for auth)
            - name: claude-config
              mountPath: /root/.claude

          # Simple liveness check - container is running
          livenessProbe:
            exec:
              command:
                - cat
                - /healthcheck.sh
            initialDelaySeconds: 5
            periodSeconds: 60

          # Readiness - claude CLI is available
          readinessProbe:
            exec:
              command:
                - claude
                - --version
            initialDelaySeconds: 10
            periodSeconds: 30
            timeoutSeconds: 10

      volumes:
        - name: workspace
          persistentVolumeClaim:
            claimName: claudebox-workspace

        - name: claude-config
          persistentVolumeClaim:
            claimName: claudebox-claude-config

---
# Headless service for StatefulSet
apiVersion: v1
kind: Service
metadata:
  name: claudebox
  namespace: rdev
  labels:
    app.kubernetes.io/name: claudebox
    app.kubernetes.io/part-of: rdev
spec:
  clusterIP: None
  selector:
    app: claudebox
  ports:
    - port: 8080
      name: http
