Run & Deploy

Build the workspace, run the two planes locally with no cluster, or apply the Kubernetes overlays.

Prerequisites

Rust 1.95+ (pinned via rust-toolchain.toml), protoc, and libprotobuf-dev.

just check          # fmt + clippy + tests
cargo build --workspace

Local two-process (no cluster)

Run the harness and the control plane as two processes. With no model set, the harness uses a stub provider; set a model to route to a real provider.

# harness — stub provider when no model is set, or a real
# provider via POLYCHROME_MODEL + provider config.
POLYCHROME_HARNESS_ADDR=127.0.0.1:50053 \
POLYCHROME_SIDE_ADDR=127.0.0.1:8181 \
cargo run -p polychrome-harness

# control plane — routes turns through the harness above
POLYCHROME_GRPC_ADDR=127.0.0.1:50052 \
POLYCHROME_SIDE_ADDR=127.0.0.1:8081 \
POLYCHROME_HARNESS_ADDR=http://127.0.0.1:50053 \
cargo run -p polychrome --bin polychrome-control-plane

Drive a turn end to end with a properly framed Connect request — see crates/polychrome-slack/tests/integration.rs for the canonical client shape, or use the operator CLI.

Cluster

Build the per-target images and apply an overlay.

docker buildx build --target control-plane -t polychrome:latest         --load .
docker buildx build --target harness       -t polychrome-harness:latest --load .
docker buildx build --target slack         -t polychrome-slack:latest   --load .

kubectl apply -k manifests/overlays/local   # OrbStack / kind / minikube
kubectl apply -k manifests/overlays/gke     # GKE Autopilot (Filestore PVC)

Overlays differ only in the StorageClass for the shared event-log PVC. Workload-identity binding for the cloud service account is documented in manifests/README.md.

Configuration

All environment variables are prefixed POLYCHROME_. The most useful on the control plane:

EnvWhat it does
MODELProvider model id; empty → stub provider
SUMMARY_MODELCheaper model for anchored-iterative summarization
HARNESS_ADDRShared-Service harness path (http://host:port)
PER_CONVERSATION_HARNESSResolve a harness pod per Conversation CR
EVENTLOG_DIRCommonware journal storage root
LEASE_NAMESPACEEnables cross-replica single-writer via a Lease
APPROVE_ALL=1Auto-approve HITL requests (verification only)

Observability is shared across binaries: OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_SERVICE_NAME enable the OTLP exporter, and RUST_LOG / RUST_LOG_FORMAT tune the tracing subscriber.