The runtime in seven phases.
Phase 0 shipped. Phases 1–2 in progress. Phases 3–6 are scoped and sequenced. Progress tracked in the plnt repo.
What works end-to-end right now.
Schema + printer columns + status subresource. kubectl apply -f workflow.yaml is the entire deploy trigger. Installed by the plnt Helm chart.
plnt/operators/workflowrun_controller.py watches create/update/delete → starts or cancels a Temporal orchestration workflow.
plnt/workflows/orchestrate.py — five-step Temporal workflow (pull → resolve → helm → smoke → promote or rollback) with per-activity retries + compensation.
plnt/charts/workflow-runner/ — Deployment + Service + Ingress + HPA + ConfigMap. Parameterised over workflow ref, backend, GPU class, replicas.
FastAPI wrapper exposing the workflow catalog + invoke path. OpenAI-compatible endpoint kept for the demo chat surface.
play.plnt.work — browser UI showing the workflow orchestration timeline + backend selector + invocation log.
plnt.work — this. Static Astro build on Vercel. Architecture, roadmap, docs, resources.
Seven phases from skeleton to a benchmarked, canary-deployed, multi-backend runtime.
Phase 00 · shipped
Repo layout for charts/, operators/, workflows/, cli/, registry/. README + docs/architecture.md written around the 4-layer stack.
Phase 01 · in progress
plnt/charts/workflow-runner/ — parameterised Deployment for any workflow spec pulled from microagents. Installable on kind today; ready to drop onto a real GPU node pool.
Phase 02 · in progress
plnt/workflows/orchestrate.py — pull → resolve backend → helm install canary → smoke → promote saga. RetryPolicy per activity. helm rollback as compensation.
Phase 03 · planned
CRD spec at plnt/operators/crds/workflowrun.yaml. Python kopf operator watches the CRD and drives the Temporal saga. kubectl apply is the only entrypoint.
Phase 04 · planned
plnt run, plnt list, plnt scale, plnt rollback, plnt bench. typer-based; wraps kubectl + helm + Temporal client. Typed with pydantic.
Phase 05 · planned
PlntBackend resource — register a named backend once, reference it from every WorkflowRun. Capacity-aware placement (queue depth + GPU headroom) across pools inside one cluster.
Phase 06 · planned
plnt/bench/harness.py measures p50/p95/p99 per-invocation latency, error rate, GPU utilization, step-cache hit rate. Prometheus scrape config in the chart. One Grafana dashboard JSON committed.
Four architectural choices being held. Reversing any of them would invert the project.
No proprietary workflow format. The microagents spec is public, versioned, and hash-verifiable. Any registry that speaks S3 or OCI works.
No custom deploy scripts. The saga is a Temporal workflow, not a bash pipeline. State is durable, resumable, inspectable.
No cloud lock-in. Helm + Kubernetes + Temporal are portable. Same WorkflowRun YAML runs on kind, GKE, EKS, AKS, on-prem.
No mystery orchestration. The operator is small enough to read in one sitting. Every state transition emits a Kubernetes event.
Prior art that shapes the design.
Google SRE (cascading failures chapter) · Temporal (deploy sagas, activity retries, compensation) · KServe (CRD shape for inference workloads) · Argo Workflows (DAG-of-steps model, K8s-native) · Numaflow (stream-processing DAG on K8s) · Helm (chart-per-runner packaging) · Envoy VirtualService (canary weights).