Labs
Labs are reusable, hands-on exercises that can be referenced from multiple courses. Each lab is self-contained and follows a shared structure so learners encounter a consistent experience across the academy.
Available labs
- Hello Pico — a first Pico walkthrough, referenced from the pico course. Machine-readable descriptor:
labs/hello-pico/metadata.yaml. - Hello Pico on Kubernetes — the first Crossplane lab: compose the same greeting onto a local Kubernetes cluster using an
XHelloWorldPicoXRD, a pipeline-mode Composition, and provider-kubernetes. Referenced from the crossplane course. Machine-readable descriptor:labs/hello-pico-on-kubernetes/metadata.yaml. - Hello Pico on Manifold — the first runtime-focused lab: host one Pico Element inside a Manifold
RuntimeEnvironmenton local minikube, wire it through one Wrangler-declared Channel, send exactly one event, and capture the single Observation the hosted Pico produces. Referenced from the manifold course. Machine-readable descriptor:labs/hello-pico-on-manifold/metadata.yaml. - Hello Two Picos — the first multi-Pico runtime lab: host two named Pico Elements (a producer and a consumer) inside one Manifold
RuntimeEnvironmenton local minikube, declare one Wrangler-style Channel and an explicit producer→consumer wiring, watch the producer Pico emit one event and the consumer Pico consume it and react with one Observation. Referenced from the manifold course. Machine-readable descriptor:labs/hello-two-picos/metadata.yaml. - Hello Pico Fleet (Wrangler) — the first topology and fleet path: author one Wrangler-style
Fleetfragment onwrangler.oe.academy/v1alpha1that composes the two approved Manifold InteractionTopologies (Hello Pico on Manifold and Hello Two Picos), names three Picos and their bindings across two Channels, expresses one fleet-level lifecycle intent, and applies the fleet spec to the samemanifoldnamespace as a ConfigMap without starting any new Pods or Channels. Machine-readable descriptor:labs/hello-pico-fleet-wrangler/metadata.yaml. - Hello Pico on Home Assistant — the first graphical ControlSurface lab: layer a small Home Assistant integration (one
command_linesensor and oneinput_button+shell_command) over the approved Hello Pico on Manifold lab runtime, routing every read and write through the approvedbin/picoPython CLI so Home Assistant does not bypass Kubernetes, Manifold, Wrangler, or the CLI. Machine-readable descriptor:labs/hello-pico-home-assistant/metadata.yaml. - Hello World Pico Sandcastle — the first runnable Sandcastle lab: run a Sandcastle end-to-end to construct the same
hello-world-picoartifact on a dedicated branch, then dispose of the sandbox. Referenced from the sandcastle course. Machine-readable descriptor:labs/hello-world-pico-sandcastle/metadata.yaml. - Compose a Sandcastle request — the first runnable compose → construct lab: turn a learner-authored Crossplane
XHelloWorldPicoXR into anEngineeringTask, have a Sandcastle pick up the task and construct the requestedrules/hello.yamlon a dedicated branch, then dispose of the sandbox. Referenced from the sandcastle course. Machine-readable descriptor:labs/compose-sandcastle-request/metadata.yaml. - Sandcastle → Kubernetes hand-off — the first runnable Sandcastle-to-Crossplane hand-off lab: take the durable branch produced by the Sandcastle lab and promote its greeting
valueinto anXHelloWorldPicoComposite Resource that drops into the Hello Pico on Kubernetes lab without modification. Referenced from the sandcastle course. Machine-readable descriptor:labs/handoff-sandcastle-to-kubernetes/metadata.yaml. - Hello Pico Hands (Kubernetes) — the first runnable Hands lab: give one Pico Element a provider-neutral Hands contract, bind it to a narrow
KubernetesHandsadapter, and watch it invoke exactly one allowlisted, reversible action (pico.state.set) confined by a namespacedRoleandresourceNamesto a Pico-ownedConfigMapin the lab’s ownhandsnamespace. Emits the normalizedpico.hand.requested/authorized/succeededlifecycle and a single evidence JSON record. Composio, cluster-scoped RBAC, destructive verbs, and non-Kubernetes runtimes are explicitly out of scope. Referenced from the pico course. Machine-readable descriptor:labs/hello-pico-hands-kubernetes/metadata.yaml. - Hello Pico Nervous System (MQTT) — the first runnable nervous-system lab: author a provider-neutral Pico message envelope covering the seven message kinds (observation, event, command, delegation, result, presence, discovery), populate it with one sample per kind, and run a deterministic local verifier that checks the envelope shape, the separation of stable Pico identity from MQTT/Kubernetes transport identifiers, the correlation/causation graph across delegation → result and observation → event, the authorization context on commands and delegations, the MQTT topic mapping, and the EMQX adapter description marked
optional-not-executed. No live broker, no credentials, and no external SaaS are required; the Kubernetes-hosted Manifold RuntimeEnvironment from Hello Two Picos is reused unchanged. Referenced from the pico course. Machine-readable descriptor:labs/hello-pico-nervous-system-mqtt/metadata.yaml. - Outer delivery loop — the first runnable outer-loop lab: push the hand-off’s XR onto a real GitHub environment repo, open a real pull request, merge it, and reconcile the merged XR onto the Crossplane cluster from the Hello Pico on Kubernetes lab via Flux (or
kubectlas a single-shot fallback). Live GitHub is a prerequisite; the cluster stages run when a Crossplane cluster is reachable. Referenced from the sandcastle course. Machine-readable descriptor:labs/outer-delivery-loop/metadata.yaml.
Lab structure
Each lab lives under labs/<name>/ and follows the shared lab template under templates/lab/ (in-repo scaffold, not published as a learner page):
labs/<name>/
README.qmd # Overview and entry point
objectives.qmd # Learning objectives and prerequisites
walkthrough.qmd # Step-by-step guidance
solution.qmd # Reference solution
metadata.yaml # Machine-readable descriptor (id: oe.lab.<slug>)
downloads/ # Starter files and downloads
screenshots/ # Screenshots used in the walkthrough
Labs are intentionally separate from courses so they can be reused: a single lab can appear in more than one course path. Cross-references (from lab to course, and from course to lab) live in the referenced_by / references_labs fields of the respective metadata.yaml files.
See also
- Exercises — smaller, focused practice tasks standardized alongside labs. Reference exemplar:
exercises/pico-first-rule/. - Courses — course sites that reference these labs.