stewartshea db6f6f291b re-render tool-builder bundles with fixed runwhen-platform-mcp renderer
- Regenerated SKILL_TEMPLATE.md for all three tool-builder bundles
  (stg-workspace-smoke, system-info-check, system-info-check-bash) — the
  previous versions had 8 leading spaces on every line because the renderer's
  textwrap.dedent didn't work against column-0 injected tables. Fixed on the
  MCP side; these are the corresponding refreshed outputs.
- Gave system-info-check and system-info-check-bash distinct baseNames
  (`sys-info-py` and `sys-info-bash`). Both previously truncated to
  `system-info-che` under the default 15-char baseName rule and collided
  in workspace-builder — the two SLXs would have shared the same computed
  name so only one (or neither) ever showed up.
- Also picks up the resource_path YAML-quoting change (single-quoted only
  when strictly required — no longer force-double-quoted).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 00:35:51 -04:00

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 Bucket from the Upbound GCP provider) via a generation rule.
  • How the resulting SLX points its codeBundle.repoUrl at a different code collection where the runtime actually lives.
  • How to compute a fractional SLI (0.01.0) from .status.conditions[] with jq, and how to emit a detailed TaskSet with per-condition issues via RW.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.

S
Description
No description provided
Readme 140 KiB
Languages
Python 53.8%
Shell 46.2%