Workshop Module Tester Skill
When to Use
- Developer asks "run through this module against the environment"
- Testing or validating workshop exercises on a live deployment
- Verifying that module steps work before handing a lab to students
- Running a specific sub-module to check for instruction or infrastructure issues
- Re-testing after fixes to confirm issues are resolved
- Comparing test results across multiple test runs to track progress
Instructions
This skill defines a diagnostic process, not a tool wrapper. When activated, gather the required input, parse the target module for executable steps, run each step against the live environment, classify any failures, and produce a structured report.
- Read
references/REFERENCE.md when you need AsciiDoc role conventions, Antora attribute substitution details, or the list of complementary RHDP Skills Marketplace tools
Gotchas
- AsciiDoc
[source,bash,role=execute] blocks are executable steps; [source,bash] without role=execute are display-only. Missing role=execute means the step won't be auto-executed.
- Step verification must happen AFTER the command completes, not immediately — some commands (e.g.,
oc apply) return before the resource is ready. Always allow settle time or poll for readiness before verifying.
- Failure classification matters: "Instruction Fix" means the lab content is wrong, "Infra Fix" means the deployment is broken, "Rethink" means the exercise design is flawed. Misclassifying wastes developer effort on the wrong fix.
- Multi-module workshops must be tested in order — later modules may depend on state created by earlier ones. Skipping ahead produces false failures.
- Do not retry a failed step more than once without investigating — repeated retries can leave the environment in a broken state (duplicate resources, partial deployments, exhausted quotas).
Required Input
Before running tests, collect the following from the user:
| Input |
Required |
Example |
| Module file path or Showroom content repo |
Yes |
content/modules/ROOT/pages/module-02.adoc |
| Access credentials |
Yes |
OCP token, SSH key, or AAP token |
| Workshop GUID |
Yes |
abc123 |
| Which module(s) to test |
Yes |
module-02 or all |
| OpenShift API URL |
Yes (OCP) |
https://api.cluster.example.com:6443 |
| Bastion hostname |
If RHEL VM or dedicated OCP |
bastion.abc123.example.com |
Step Parsing
Showroom AsciiDoc (primary format)
Showroom labs use AsciiDoc with special role attributes to distinguish executable steps from informational content.
Executable steps — extract these and run them:
[source,bash,role="execute"]
----
oc new-project myapp
----
Copy-paste text — do NOT execute, but note for context:
[source,yaml,role="copypaste"]
----
apiVersion: v1
kind: ConfigMap
...
----
Verification sections — execute after the preceding step and compare output:
.Expected output
[source,text]
----
NAME READY STATUS RESTARTS AGE
myapp 1/1 Running 0 30s
----
Standard Markdown
- Extract fenced code blocks tagged as
bash or shell — these are executable
- Skip blocks tagged as
yaml, json, text, or output — informational only
- Identify sections titled "Verify", "Expected output", or "Check" as verification steps
Parsing Rules
- Process the module top-to-bottom in document order
- Track state: which project/namespace is active, what variables have been set
- Substitute AsciiDoc attributes from
antora.yml (e.g., {openshift_cluster_ingress_domain}) with actual values from the environment
- If a step references a file from the
examples/ directory, verify the file exists before executing
Execution Process
1. Pre-flight: Run Student Readiness Checks
Before testing any module steps, run the student-readiness skill to verify the environment is functional. If readiness checks fail, stop and report — there's no point testing module steps on a broken environment.
student-readiness PASS → proceed to module testing
student-readiness FAIL → stop, report readiness failure, suggest fixes
2. Execute Each Step
For each parsed executable step:
- Show the step number, description, and command to the user
- Execute the command against the live environment (via
oc, curl, ssh, etc.)
- Capture stdout, stderr, and exit code
- Verify — if a verification section follows, execute it and compare actual vs. expected output
- Record the result: PASS, FAIL, or SKIP
3. Handle Failures
When a step fails:
- Classify the failure (see Failure Classification below)
- Pause and report the failure to the user
- Ask whether to continue testing remaining steps or stop
- If continuing, mark dependent steps as SKIP (steps that rely on the failed step's output)
Failure Classification
When a step fails, analyze the error and categorize it:
| Category |
Meaning |
Examples |
Action |
| Instruction Fix |
The module text is wrong but the env is fine |
Typo in command, wrong path, outdated CLI flag, missing --namespace, copy-paste error in expected output |
Update the .adoc/.md file |
| Infra / Deployment Fix |
The environment or deployment pipeline is misconfigured |
Operator not installed, RBAC missing, route not created, resource quota hit, image pull error, Helm values wrong, ArgoCD Application stuck in OutOfSync/Degraded, ArgoCD can't reach Git repo, Helm template rendering error, sync wave ordering issue |
Fix the AgnosticD config, workload variables, Helm values, or ArgoCD Application spec |
| Rethink |
The exercise design itself is flawed |
Step depends on output of a skipped step, assumes prior knowledge not covered, timing issue (resource not ready yet), concept doesn't work as described |
Redesign the module flow or add prerequisites |
Classification Heuristics
Use these patterns to guide classification:
- Command not found / syntax error → Instruction Fix (wrong command in the module)
- Permission denied / forbidden / unauthorized → Infra / Deployment Fix (RBAC not configured)
- Resource not found but command is valid → Infra / Deployment Fix (workload not deployed) or Rethink (wrong step order)
- Timeout / not ready → Rethink (add wait/retry instruction) or Infra / Deployment Fix (resource never deployed)
- Output doesn't match expected → Instruction Fix (outdated expected output) or Rethink (exercise assumption wrong)
- ArgoCD Application Degraded/OutOfSync → Infra / Deployment Fix (check ArgoCD app spec, Helm values, Git repo access)
- Helm render error / values mismatch → Infra / Deployment Fix (wrong values.yaml, missing chart dependency)
- GitOps repo auth failure / branch not found → Infra / Deployment Fix (ArgoCD repo credentials or target revision)
When classification is ambiguous, flag it with [uncertain] and explain the reasoning.
Output Format
Present results as a structured report:
Module Test Report — module-02.adoc — GUID: abc123
──────────────────────────────────────────────────────────
# Step Status Category Notes
1 oc login PASS — —
2 oc new-project myapp PASS — —
3 oc apply -f deploy.yml FAIL Instruction Fix File path wrong: deploy.yml not in examples/
4 curl app route SKIP — Skipped (depends on #3)
5 oc get pods FAIL Infra/Deploy Fix Operator CSV pending: openshift-gitops
6 argocd app sync myapp FAIL Infra/Deploy Fix ArgoCD app Degraded: Helm values missing ingress.host
──────────────────────────────────────────────────────────
Result: 2 PASS, 3 FAIL, 1 SKIP
Breakdown: 1 Instruction Fix, 2 Infra/Deployment Fix, 0 Rethink
Post-Test Actions
After completing all steps:
- Summarize findings: X/Y steps passed, with failure breakdown by category
- Suggest fixes for each failure:
- For Instruction Fix: specify the exact line and file to change (e.g., "change
deploy.yml to examples/deploy.yml on line 47 of module-02.adoc")
- For Infra / Deployment Fix: identify the config to change (e.g., "install the
openshift-gitops operator" or "set ingress.host in Helm values for ArgoCD app myapp")
- For Rethink: describe the design issue and suggest alternatives (e.g., "add a wait step after deployment before checking pods")
- Group findings by category so the developer can tackle instruction fixes, infra/deployment fixes, and rethinks separately
- Optionally commit the test report to git as a tracking artifact
- Compare against previous reports if re-running after fixes, showing which issues were resolved
Escalation
When test failures cannot be resolved through the classification heuristics:
- Infra / Deployment issues → Use the agnosticd skill troubleshooting decision tree
- Showroom content/terminal issues → Use the showroom skill troubleshooting decision tree
- Deep infrastructure validation → Use
/health:deployment-validator from the RHDP Skills Marketplace
- Content quality issues → Use
/showroom:verify-content from the RHDP Skills Marketplace
- Grading automation → After tests pass, use
/ftl:rhdp-lab-validator to generate Solve/Validate button automation
Best Practices
- When re-testing after fixes, run only the failed steps first, then do a full pass
- Save test reports to git so the team can track testing progress across environments
1---2name: workshop-tester3description: AI-as-student module testing — reads a workshop module (AsciiDoc or markdown), executes each student step against a live environment, verifies expected outcomes, classifies failures, and produces a step-by-step pass/fail report. Use when a developer asks to run through, test, or validate workshop exercises.4license: Apache-2.05---67# Workshop Module Tester Skill89## When to Use1011- Developer asks "run through this module against the environment"12- Testing or validating workshop exercises on a live deployment13- Verifying that module steps work before handing a lab to students14- Running a specific sub-module to check for instruction or infrastructure issues15- Re-testing after fixes to confirm issues are resolved16- Comparing test results across multiple test runs to track progress1718## Instructions1920This skill defines a diagnostic process, not a tool wrapper. When activated, gather the required input, parse the target module for executable steps, run each step against the live environment, classify any failures, and produce a structured report.2122- Read `references/REFERENCE.md` when you need AsciiDoc role conventions, Antora attribute substitution details, or the list of complementary RHDP Skills Marketplace tools2324## Gotchas2526- AsciiDoc `[source,bash,role=execute]` blocks are executable steps; `[source,bash]` without `role=execute` are display-only. Missing `role=execute` means the step won't be auto-executed.27- Step verification must happen AFTER the command completes, not immediately — some commands (e.g., `oc apply`) return before the resource is ready. Always allow settle time or poll for readiness before verifying.28- Failure classification matters: "Instruction Fix" means the lab content is wrong, "Infra Fix" means the deployment is broken, "Rethink" means the exercise design is flawed. Misclassifying wastes developer effort on the wrong fix.29- Multi-module workshops must be tested in order — later modules may depend on state created by earlier ones. Skipping ahead produces false failures.30- Do not retry a failed step more than once without investigating — repeated retries can leave the environment in a broken state (duplicate resources, partial deployments, exhausted quotas).3132## Required Input3334Before running tests, collect the following from the user:3536| Input | Required | Example |37|-------|----------|---------|38| Module file path or Showroom content repo | Yes | `content/modules/ROOT/pages/module-02.adoc` |39| Access credentials | Yes | OCP token, SSH key, or AAP token |40| Workshop GUID | Yes | `abc123` |41| Which module(s) to test | Yes | `module-02` or `all` |42| OpenShift API URL | Yes (OCP) | `https://api.cluster.example.com:6443` |43| Bastion hostname | If RHEL VM or dedicated OCP | `bastion.abc123.example.com` |4445## Step Parsing4647### Showroom AsciiDoc (primary format)4849Showroom labs use AsciiDoc with special role attributes to distinguish executable steps from informational content.5051**Executable steps** — extract these and run them:52```asciidoc53[source,bash,role="execute"]54----55oc new-project myapp56----57```5859**Copy-paste text** — do NOT execute, but note for context:60```asciidoc61[source,yaml,role="copypaste"]62----63apiVersion: v164kind: ConfigMap65...66----67```6869**Verification sections** — execute after the preceding step and compare output:70```asciidoc71.Expected output72[source,text]73----74NAME READY STATUS RESTARTS AGE75myapp 1/1 Running 0 30s76----77```7879### Standard Markdown8081- Extract fenced code blocks tagged as `bash` or `shell` — these are executable82- Skip blocks tagged as `yaml`, `json`, `text`, or `output` — informational only83- Identify sections titled "Verify", "Expected output", or "Check" as verification steps8485### Parsing Rules86871. Process the module top-to-bottom in document order882. Track state: which project/namespace is active, what variables have been set893. Substitute AsciiDoc attributes from `antora.yml` (e.g., `{openshift_cluster_ingress_domain}`) with actual values from the environment904. If a step references a file from the `examples/` directory, verify the file exists before executing9192## Execution Process9394### 1. Pre-flight: Run Student Readiness Checks9596Before testing any module steps, run the **student-readiness** skill to verify the environment is functional. If readiness checks fail, stop and report — there's no point testing module steps on a broken environment.9798```99student-readiness PASS → proceed to module testing100student-readiness FAIL → stop, report readiness failure, suggest fixes101```102103### 2. Execute Each Step104105For each parsed executable step:1061071. **Show** the step number, description, and command to the user1082. **Execute** the command against the live environment (via `oc`, `curl`, `ssh`, etc.)1093. **Capture** stdout, stderr, and exit code1104. **Verify** — if a verification section follows, execute it and compare actual vs. expected output1115. **Record** the result: PASS, FAIL, or SKIP112113### 3. Handle Failures114115When a step fails:1161171. **Classify** the failure (see Failure Classification below)1182. **Pause** and report the failure to the user1193. **Ask** whether to continue testing remaining steps or stop1204. If continuing, mark dependent steps as SKIP (steps that rely on the failed step's output)121122## Failure Classification123124When a step fails, analyze the error and categorize it:125126| Category | Meaning | Examples | Action |127|----------|---------|----------|--------|128| **Instruction Fix** | The module text is wrong but the env is fine | Typo in command, wrong path, outdated CLI flag, missing `--namespace`, copy-paste error in expected output | Update the .adoc/.md file |129| **Infra / Deployment Fix** | The environment or deployment pipeline is misconfigured | Operator not installed, RBAC missing, route not created, resource quota hit, image pull error, Helm values wrong, ArgoCD Application stuck in OutOfSync/Degraded, ArgoCD can't reach Git repo, Helm template rendering error, sync wave ordering issue | Fix the AgnosticD config, workload variables, Helm values, or ArgoCD Application spec |130| **Rethink** | The exercise design itself is flawed | Step depends on output of a skipped step, assumes prior knowledge not covered, timing issue (resource not ready yet), concept doesn't work as described | Redesign the module flow or add prerequisites |131132### Classification Heuristics133134Use these patterns to guide classification:135136- **Command not found** / syntax error → **Instruction Fix** (wrong command in the module)137- **Permission denied** / forbidden / unauthorized → **Infra / Deployment Fix** (RBAC not configured)138- **Resource not found** but command is valid → **Infra / Deployment Fix** (workload not deployed) or **Rethink** (wrong step order)139- **Timeout** / not ready → **Rethink** (add wait/retry instruction) or **Infra / Deployment Fix** (resource never deployed)140- **Output doesn't match expected** → **Instruction Fix** (outdated expected output) or **Rethink** (exercise assumption wrong)141- **ArgoCD Application Degraded/OutOfSync** → **Infra / Deployment Fix** (check ArgoCD app spec, Helm values, Git repo access)142- **Helm render error** / values mismatch → **Infra / Deployment Fix** (wrong values.yaml, missing chart dependency)143- **GitOps repo auth failure** / branch not found → **Infra / Deployment Fix** (ArgoCD repo credentials or target revision)144145When classification is ambiguous, flag it with `[uncertain]` and explain the reasoning.146147## Output Format148149Present results as a structured report:150151```152Module Test Report — module-02.adoc — GUID: abc123153──────────────────────────────────────────────────────────154 # Step Status Category Notes155 1 oc login PASS — —156 2 oc new-project myapp PASS — —157 3 oc apply -f deploy.yml FAIL Instruction Fix File path wrong: deploy.yml not in examples/158 4 curl app route SKIP — Skipped (depends on #3)159 5 oc get pods FAIL Infra/Deploy Fix Operator CSV pending: openshift-gitops160 6 argocd app sync myapp FAIL Infra/Deploy Fix ArgoCD app Degraded: Helm values missing ingress.host161──────────────────────────────────────────────────────────162 Result: 2 PASS, 3 FAIL, 1 SKIP163 Breakdown: 1 Instruction Fix, 2 Infra/Deployment Fix, 0 Rethink164```165166## Post-Test Actions167168After completing all steps:1691701. **Summarize** findings: X/Y steps passed, with failure breakdown by category1712. **Suggest fixes** for each failure:172 - For **Instruction Fix**: specify the exact line and file to change (e.g., "change `deploy.yml` to `examples/deploy.yml` on line 47 of module-02.adoc")173 - For **Infra / Deployment Fix**: identify the config to change (e.g., "install the `openshift-gitops` operator" or "set `ingress.host` in Helm values for ArgoCD app `myapp`")174 - For **Rethink**: describe the design issue and suggest alternatives (e.g., "add a wait step after deployment before checking pods")1753. **Group** findings by category so the developer can tackle instruction fixes, infra/deployment fixes, and rethinks separately1764. **Optionally commit** the test report to git as a tracking artifact1775. **Compare** against previous reports if re-running after fixes, showing which issues were resolved178179## Escalation180181When test failures cannot be resolved through the classification heuristics:1821831. **Infra / Deployment issues** → Use the **agnosticd** skill troubleshooting decision tree1842. **Showroom content/terminal issues** → Use the **showroom** skill troubleshooting decision tree1853. **Deep infrastructure validation** → Use `/health:deployment-validator` from the [RHDP Skills Marketplace](https://rhpds.github.io/rhdp-skills-marketplace/)1864. **Content quality issues** → Use `/showroom:verify-content` from the RHDP Skills Marketplace1875. **Grading automation** → After tests pass, use `/ftl:rhdp-lab-validator` to generate Solve/Validate button automation188189## Best Practices190191- When re-testing after fixes, run only the failed steps first, then do a full pass192- Save test reports to git so the team can track testing progress across environments