PAPI clones codeBundle.repoUrl on ingestion; the public github.com URL is unreachable from the airgap cluster, so the runbook records were silently dropped (SLXs got created with no runbook attached). Switch the three tool-builder taskset templates to the internal catalog URL that workspace-builder / PAPI already talks to for every other codecollection. Co-authored-by: Cursor <cursoragent@cursor.com>
simple-private-codecollection
An educational, generation-rule-only RunWhen CodeCollection. It ships no
Robot Framework code of its own — instead it teaches how a private repository
can define discovery rules and SLX templates that reuse a generic
runtime already loaded by the RunWhen runner (in this case
k8s-kubectl-cmd
from rw-generic-codecollection).
What it demonstrates
- How workspace-builder discovers a Kubernetes Custom Resource (a
Crossplane
Bucketfrom the Upbound GCP provider) via a generation rule. - How the resulting SLX points its
codeBundle.repoUrlat a different code collection where the runtime actually lives. - How to compute a fractional SLI (0.0–1.0) from
.status.conditions[]withjq, and how to emit a detailed TaskSet with per-condition issues viaRW.DynamicIssues.
Layout
codebundles/
gcp-bucket-crossplane-health/ # kubernetes platform + k8s-kubectl-cmd runtime
.runwhen/
generation-rules/gcp-bucket-crossplane-health.yaml
templates/
gcp-bucket-crossplane-health-slx.yaml
gcp-bucket-crossplane-health-sli.yaml
gcp-bucket-crossplane-health-taskset.yaml
stg-workspace-smoke/ # platform: runwhen + tool-builder runtime (RW-1353 E2E)
.runwhen/
generation-rules/stg-workspace-smoke.yaml
templates/
stg-workspace-smoke-slx.yaml
stg-workspace-smoke-taskset.yaml
docs/
01-overview.md
02-generation-rules-only-pattern.md
03-crossplane-crd-discovery.md
04-generation-rule-walkthrough.md
05-slx-and-templates.md
06-runner-integration.md
07-validate-and-observe.md
08-current-limitations.md
images/ # screenshots referenced from the chapters
Start here
Open docs/01-overview.md and read the chapters in
order. Each chapter has a short "What you'll do" preamble, an inline diagram
or code snippet, and screenshot placeholders that we fill in as we iterate.
Target environment
This training example is wired for the RunWhen airgap environment (in-cluster
workspace-builder in runwhen-env-airgap-runner, Gitea at
gitea.airgap.shared.runwhen.com). The generation rule targets real Crossplane
Bucket resources already present in that cluster (see
llm-storage.yaml
and similar). The pattern applies to any RunWhen environment; only the
repoUrl in the templates needs to change.