Objectives & prerequisites
Learning objectives
- Deploy a small Manifold RuntimeEnvironment onto a local Kubernetes cluster and host two Pico Elements inside it: a producer and a consumer.
- Declare a single Wrangler-style Channel and an explicit producer→consumer wiring relationship, using the topology YAML fragment shipped with this lab.
- Watch the producer Pico emit exactly one event onto that Channel and the consumer Pico consume it and react with one Observation.
- Capture the single Observation the consumer Pico prints as the lab’s runtime evidence, and store it alongside the applied manifests as
hello-two-picos/observation.txt. - Explain why this counts as a declarative runtime relationship between two Picos, not an ad hoc script demo.
Prerequisites
- Completion of the Hello Pico on Manifold lab — the single-Pico runtime story this lab builds on directly.
- Familiarity with the Manifold course vocabulary (RuntimeSubstrate, RuntimeEnvironment, Channel, EventType, Observation, InteractionTopology).
- A local Kubernetes cluster; see the Kubernetes setup foundation for the canonical minikube install, PATH checks, and first cluster bring-up.
helmis not required for this lab.
Environment
The canonical local Kubernetes setup — supported OS, install commands for docker, minikube, and kubectl, PATH checks, and a first cluster bring-up — lives in the Kubernetes course setup foundation. Complete that page first so docker, minikube, and kubectl resolve on your PATH.
Lab-specific additions on top of that canonical setup:
Reference minikube pin:
v1.38.1was used to author this lab (anyv1.34+should work).Bash utilities:
grep,cat,mkdir,cp— invoked by the walkthrough and byverify.sh.Estimated time: 45–60 minutes (of which the cluster start accounts for roughly 2–5 minutes).
Cleanup step (also repeated at the end of the walkthrough):
minikube delete --profile two-picos-lab rm -rf build/hello-two-picos work/hello-two-picos
Pinned versions (reference)
The walkthrough was authored and verified against these versions. Newer versions are expected to work; older Kubernetes versions may lack API resources used by the shipped manifests.
- Kubernetes API version in minikube: v1.31.0
- Container image used as the Pico engine stand-in for both Picos:
busybox:1.36(chosen for its small footprint and thencutility the lab uses to send and receive one event over the Channel).
Both Picos in this lab are deliberately implemented as small busybox-based Pods. Each plays the role of a Pico engine hosted by the Manifold RuntimeEnvironment: the producer publishes exactly one event onto the Channel and exits; the consumer subscribes to the Channel, waits for one event, produces one Observation on its own log, and exits. Neither is a full Pico engine implementation; Phase 7 of the constructive-realization contract explicitly says no new runtime implementation is introduced here. Later curriculum waves may swap the stand-ins for real Pico engine images without changing the surrounding topology or the producer→consumer wiring.
One-time setup (optional)
The walkthrough uses a dedicated minikube profile named two-picos-lab so it does not interfere with other clusters (for example the manifold-lab profile from the Hello Pico on Manifold lab or the crossplane-lab profile from the Hello Pico on Kubernetes lab). If you prefer to reuse an existing minikube cluster, drop --profile two-picos-lab from every command. If you use a different Kubernetes distribution (kind, k3d, docker-desktop), all kubectl steps below still apply.