diff --git a/content/labs/lab-5-api-and-harnesses.md b/content/labs/lab-5-api-and-harnesses.md
new file mode 100644
index 0000000..209f02c
--- /dev/null
+++ b/content/labs/lab-5-api-and-harnesses.md
@@ -0,0 +1,360 @@
+---
+order: 5
+title: Lab 5 - API & Harnesses
+description: Generate an Open WebUI API key, connect one of three coding harnesses, and build a small Zork-style game.
+---
+
+
+
+
+
+# Lab 5 - API & Harnesses
+
+In this lab, we will:
+
+- Generate a personal API key inside Open WebUI
+- Install one of three coding harnesses
+- Configure that harness to talk to Open WebUI as the backend
+- Use the harness to build a small Zork-style game
+
+
+ Lab Flow Guide
+ This lab stays on a single high-level track, but Objectives 2 and 3 branch into three harness paths.
+ Pick one harness, complete its branch, then rejoin the common Zork objective at the end.
+
+
+To start this lab, one web service has been preconfigured:
+
+- Open WebUI - http://:8080
+
+## Objective 1 Execute: Generate an Open WebUI API Key
+
+Before we install any harness, we need a key that lets the harness call the same model backend exposed through Open WebUI.
+
+### Execute: Sign in to Open WebUI
+
+1. Navigate to `http://:8080`.
+2. Sign in with the same account you used in Lab 4, or the credentials supplied by your instructor.
+3. Confirm that you can reach the normal chat screen before continuing.
+
+### Execute: Create a personal access token
+
+According to the Open WebUI reference docs, API keys are created from **Settings -> Account** and authenticate with the same permissions as the user who created them.
+
+1. Click your avatar in the lower-left corner.
+
+
+
+
+
+
+ User Settings
+
+
+
+
+2. Open **Settings**.
+3. Open **Account**.
+4. Locate the **API Keys** section.
+
+
+
+
+
+
+ API Key
+
+
+
+
+6. Copy the key immediately and store it somewhere safe for the duration of the lab.
+
+
+ If you do not see API Keys: Open WebUI requires the feature to be enabled globally, and your user account needs permission to generate keys. Ask your instructor for help before continuing.
+
+
+### Execute: Sanity-check the key from the terminal
+
+Run a quick authenticated request against the Open WebUI model list endpoint. You should receive JSON back instead of an authentication error.
+
+```bash
+curl http://:8080/api/models \
+ -H "Authorization: Bearer YOUR_OPENWEBUI_API_KEY"
+```
+
+If this request works, your harness will use the same key for later steps.
+
+---
+
+## Objective 2 Execute: Choose and Install a Harness
+
+All three branches ultimately talk to the same Open WebUI backend. The difference is the user interface and configuration style for each harness.
+
+
+
+
+
+
+
+
Select a path to reveal that harness's instructions throughout the rest of the lab. Select the same card again if you want to hide the harness-specific instructions and return to the shared overview.
+
+### Execute: Install the harness you want to use
+
+
+
Path A
+
Install OpenCode
+
OpenCode is a terminal-native coding agent. Its official docs recommend either the install script or the npm package.
If you prefer npm and already have Node.js installed:
+
npm install -g opencode-ai
+opencode --version
+
Once installed, stay in the terminal. We will configure OpenCode in Objective 3.
+
+
+
+
Path B
+
Install Kilo Code for VS Code
+
Kilo Code is primarily used through the editor UI. For this Linux-first lab flow, use VS Code on the student workstation and install the extension from the marketplace.
+
+
Open VS Code.
+
Open the Extensions view.
+
Search for Kilo Code.
+
Click Install.
+
Reload VS Code if prompted.
+
Open the project folder you want to work in before moving to Objective 3.
+
+
+ Tip: Kilo Code supports several providers and local-model options. In this lab, we will use its OpenAI Compatible provider flow so it can target Open WebUI.
+
+
+
+
+
Path C
+
Install Factory Droid
+
Factory's Droid harness runs in the terminal and supports BYOK custom models through Factory configuration files.
+
curl -fsSL https://app.factory.ai/cli | sh
+droid --version
+
If the shell needs to be reloaded after install, open a fresh terminal and rerun droid --version.
+
+
+---
+
+## Objective 3 Execute: Configure Your Harness for Open WebUI
+
+For all three harnesses, the common backend values are:
+
+- `Base URL` - `http://:8080/api`
+- `API Key` - `YOUR_OPENWEBUI_API_KEY`
+- `Model ID` - Any model ID returned by Open WebUI, such as `qwen3.5:4b`
+
+The shared idea is simple: your harness sends requests to Open WebUI's authenticated API endpoints instead of directly to a cloud provider.
+
+### Execute: Apply the configuration for your chosen harness
+
+
+
Path A
+
Configure OpenCode
+
OpenCode supports OpenAI-compatible providers through its JSON config. Create either a project-local opencode.json file or a global config under ~/.config/opencode/opencode.json.
+
+
It can also be easier to start opencode once, and exit with /exit. Use the following example to help structure your opencode.json file.
+
After logging in, start OpenCode from your project directory:
+
cd /path/to/your/project
+opencode
+
+
+
+
Path B
+
Configure Kilo Code in VS Code
+
Kilo Code's documented workflow is provider-driven through the extension settings UI. Use the following values when creating or editing your provider profile.
+
+
API Provider - OpenAI Compatible
+
OpenAI Base URL - http://<YOUR STUDENT IP>:8080/api
+
API Key - YOUR_OPENWEBUI_API_KEY
+
Model ID - qwen3.5:4b or another model exposed by Open WebUI
+
Approval Mode - Leave the safer default enabled for your first run
+
+
+
+
Open the Kilo Code panel in VS Code.
+
Open its provider or API settings.
+
Select OpenAI Compatible as the provider.
+
Paste in the base URL and API key values above.
+
Pick a model ID that exists in Open WebUI.
+
Start a new task to verify Kilo Code can connect successfully.
+ Tip: If model discovery fails, go back to your terminal and rerun the curl /api/models check from Objective 1. The harness and the curl command use the same authentication path.
+
+
+
+
+
Path C
+
Configure Factory Droid
+
Factory's BYOK documentation supports custom model entries in ~/.factory/config.json. Because Open WebUI exposes a chat-completions-compatible API, use the generic-chat-completion-api provider type.
Start a new session in the target project directory.
+
+
+
+---
+
+## Objective 4 Execute: Build a Tiny Zork Clone
+
+At this point, all three branches reconnect. The rest of the lab is the same no matter which harness you chose.
+
+### Execute: Start your harness session
+
+
+
+ OpenCode
+ Terminal Session
+ Run opencode inside the project directory.
+
+
+ Kilo Code
+ VS Code Task
+ Open the repo folder and start a new Kilo Code task from the side panel.
+
+
+ Factory Droid
+ CLI Session
+ Run droid, type "/mission", and ensure you've selected your custom model for each phase.
+
+
+
+### Execute: Give the harness a shared prompt
+
+Use the following prompt as your starting task. Ensure you are in **Plan** mode (or a Droid Mission):
+
+```text
+You are helping me build a tiny terminal adventure game in Python.
+
+Create a Zork-style prototype with:
+- at least 5 connected rooms
+- movement commands like north, south, east, and west
+- a simple inventory system
+- one collectible key
+- one locked room or door
+- a short win condition
+
+Use clean, readable Python and keep everything runnable from the terminal.
+After writing the code, explain how to launch the game and what commands the player can use.
+```
+
+### Explore: Execute the result
+
+Once your harness produces the first version, keep pushing it with follow-up prompts:
+
+1. Ask it to add a help command.
+2. Ask it to improve room descriptions.
+3. Ask it to prevent impossible movement.
+4. Ask it to add one extra puzzle or hidden interaction.
+
+Alternatively, reflect if you'd instead focused on using a Spec Driven development flow. How might the AI model perform more accurately as the requirements become more complicated?
+
+### Checkpoint: What success can look like
+
+Before finishing the lab, confirm that your game can:
+
+1. Start from the terminal without errors.
+2. Accept basic movement commands.
+3. Let the player pick up at least one item.
+4. Use that item to unlock progress.
+5. Reach a clear win state.
+
+## Conclusion
+
+In this lab, we:
+
+1. Generated an Open WebUI API key.
+2. Installed a harness of our choice.
+3. Connected that harness back to Open WebUI.
+4. Used the harness to build a small but complete coding exercise.
+
+You should now have a repeatable pattern for testing other harnesses against the same Open WebUI deployment. We've also shown how a full local stack can work, from model selection, inference, harness installation, to real coding work.
diff --git a/content/labs/lab-5-embedding-and-chunking.md b/content/labs/lab-6-embedding-and-chunking.md
similarity index 99%
rename from content/labs/lab-5-embedding-and-chunking.md
rename to content/labs/lab-6-embedding-and-chunking.md
index a185aa6..7f27d91 100644
--- a/content/labs/lab-5-embedding-and-chunking.md
+++ b/content/labs/lab-6-embedding-and-chunking.md
@@ -1,6 +1,6 @@
---
-order: 5
-title: Lab 5 - Embedding and Chunking
+order: 6
+title: Lab 6 - Embedding and Chunking
description: Explore chunking strategies and embeddings, then connect them to retrieval workflows.
---
@@ -8,7 +8,7 @@ description: Explore chunking strategies and embeddings, then connect them to re
-# Lab 5 - Embedding and Chunking
+# Lab 6 - Embedding and Chunking
In this lab, we will:
diff --git a/content/labs/lab-5-embedding-and-chunking_files/1-ChunkViz-Home.png b/content/labs/lab-6-embedding-and-chunking_files/1-ChunkViz-Home.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/1-ChunkViz-Home.png
rename to content/labs/lab-6-embedding-and-chunking_files/1-ChunkViz-Home.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/2-ChunkViz-SizeandOverlap.png b/content/labs/lab-6-embedding-and-chunking_files/2-ChunkViz-SizeandOverlap.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/2-ChunkViz-SizeandOverlap.png
rename to content/labs/lab-6-embedding-and-chunking_files/2-ChunkViz-SizeandOverlap.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/3 - Chunking Strategies.png b/content/labs/lab-6-embedding-and-chunking_files/3 - Chunking Strategies.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/3 - Chunking Strategies.png
rename to content/labs/lab-6-embedding-and-chunking_files/3 - Chunking Strategies.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/4 - Chunk Colors Paragraphs.png b/content/labs/lab-6-embedding-and-chunking_files/4 - Chunk Colors Paragraphs.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/4 - Chunk Colors Paragraphs.png
rename to content/labs/lab-6-embedding-and-chunking_files/4 - Chunk Colors Paragraphs.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/5 - Embedding Atlas CLI.png b/content/labs/lab-6-embedding-and-chunking_files/5 - Embedding Atlas CLI.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/5 - Embedding Atlas CLI.png
rename to content/labs/lab-6-embedding-and-chunking_files/5 - Embedding Atlas CLI.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/6 - Colorize.png b/content/labs/lab-6-embedding-and-chunking_files/6 - Colorize.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/6 - Colorize.png
rename to content/labs/lab-6-embedding-and-chunking_files/6 - Colorize.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/7 - Semantic Similarity.png b/content/labs/lab-6-embedding-and-chunking_files/7 - Semantic Similarity.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/7 - Semantic Similarity.png
rename to content/labs/lab-6-embedding-and-chunking_files/7 - Semantic Similarity.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/8 - Surprising Similarity.png b/content/labs/lab-6-embedding-and-chunking_files/8 - Surprising Similarity.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/8 - Surprising Similarity.png
rename to content/labs/lab-6-embedding-and-chunking_files/8 - Surprising Similarity.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/Mermaid.png b/content/labs/lab-6-embedding-and-chunking_files/Mermaid.png
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/Mermaid.png
rename to content/labs/lab-6-embedding-and-chunking_files/Mermaid.png
diff --git a/content/labs/lab-5-embedding-and-chunking_files/combined_big_mitre.json b/content/labs/lab-6-embedding-and-chunking_files/combined_big_mitre.json
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/combined_big_mitre.json
rename to content/labs/lab-6-embedding-and-chunking_files/combined_big_mitre.json
diff --git a/content/labs/lab-5-embedding-and-chunking_files/eval_big_mitre.json b/content/labs/lab-6-embedding-and-chunking_files/eval_big_mitre.json
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/eval_big_mitre.json
rename to content/labs/lab-6-embedding-and-chunking_files/eval_big_mitre.json
diff --git a/content/labs/lab-5-embedding-and-chunking_files/ttps_dataset.parquet b/content/labs/lab-6-embedding-and-chunking_files/ttps_dataset.parquet
similarity index 100%
rename from content/labs/lab-5-embedding-and-chunking_files/ttps_dataset.parquet
rename to content/labs/lab-6-embedding-and-chunking_files/ttps_dataset.parquet
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning.md b/content/labs/lab-7-dataset-generation-and-fine-tuning.md
similarity index 99%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning.md
rename to content/labs/lab-7-dataset-generation-and-fine-tuning.md
index b1de756..915db1f 100644
--- a/content/labs/lab-6-dataset-generation-and-fine-tuning.md
+++ b/content/labs/lab-7-dataset-generation-and-fine-tuning.md
@@ -1,6 +1,6 @@
---
-order: 6
-title: Lab 6 - Dataset Generation and Fine Tuning
+order: 7
+title: Lab 7 - Dataset Generation and Fine Tuning
description: Review dataset options, generate examples with Kiln.ai, and fine-tune a model in Unsloth.
---
@@ -8,7 +8,7 @@ description: Review dataset options, generate examples with Kiln.ai, and fine-tu
-# Lab 6 - Dataset Generation and Fine Tuning
+# Lab 7 - Dataset Generation and Fine Tuning
In this lab, we will:
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/05e780b2-c8b3-4947-8596-165e37b6fa00.png b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/05e780b2-c8b3-4947-8596-165e37b6fa00.png
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/05e780b2-c8b3-4947-8596-165e37b6fa00.png
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/05e780b2-c8b3-4947-8596-165e37b6fa00.png
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/28819e1c-7806-413d-a563-26532000ca7a.png b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/28819e1c-7806-413d-a563-26532000ca7a.png
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/28819e1c-7806-413d-a563-26532000ca7a.png
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/28819e1c-7806-413d-a563-26532000ca7a.png
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/64da1f9c-a120-4819-b005-df1bc8ef7b1d.png b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/64da1f9c-a120-4819-b005-df1bc8ef7b1d.png
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/64da1f9c-a120-4819-b005-df1bc8ef7b1d.png
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/64da1f9c-a120-4819-b005-df1bc8ef7b1d.png
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/combined_big_mitre.json b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/combined_big_mitre.json
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/combined_big_mitre.json
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/combined_big_mitre.json
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/eval_big_mitre.json b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/eval_big_mitre.json
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/eval_big_mitre.json
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/eval_big_mitre.json
diff --git a/content/labs/lab-6-dataset-generation-and-fine-tuning_files/fe155203-6e88-49a3-a687-e1ff817b6988.png b/content/labs/lab-7-dataset-generation-and-fine-tuning_files/fe155203-6e88-49a3-a687-e1ff817b6988.png
similarity index 100%
rename from content/labs/lab-6-dataset-generation-and-fine-tuning_files/fe155203-6e88-49a3-a687-e1ff817b6988.png
rename to content/labs/lab-7-dataset-generation-and-fine-tuning_files/fe155203-6e88-49a3-a687-e1ff817b6988.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming.md b/content/labs/lab-8-evaluation-and-red-teaming.md
similarity index 92%
rename from content/labs/lab-7-evaluation-and-red-teaming.md
rename to content/labs/lab-8-evaluation-and-red-teaming.md
index f19a716..a1a438c 100644
--- a/content/labs/lab-7-evaluation-and-red-teaming.md
+++ b/content/labs/lab-8-evaluation-and-red-teaming.md
@@ -1,6 +1,6 @@
---
-order: 7
-title: Lab 7 - Evaluation and Red Teaming
+order: 8
+title: Lab 8 - Evaluation and Red Teaming
description: Probe model defenses manually and with Promptfoo to evaluate security controls.
---
@@ -8,7 +8,7 @@ description: Probe model defenses manually and with Promptfoo to evaluate securi
-# Lab 7 - Evaluation and Red Teaming
+# Lab 8 - Evaluation and Red Teaming
In this lab, we will:
@@ -97,7 +97,7 @@ Promptfoo is available on our lab machine at http://:15500. We
Promptfoo is designed to be approachable for both beginners and practitioners. Its wizard guides you through configuring the target, selecting datasets and mutation strategies, and tracking execution.
- Tip: Although the Promptfoo WebUI is convenient, it hides a critical configuration option for this lab inside the YAML file. Please use the provided configuration file: [lab-7-evaluation-and-red-teaming/promptfoo.yaml](content/labs/lab-7-evaluation-and-red-teaming/promptfoo.yaml). Upload it with the Load Config button in the lower-left corner, then proceed with the following screenshot steps.
+ Tip: Although the Promptfoo WebUI is convenient, it hides a critical configuration option for this lab inside the YAML file. Please use the provided configuration file: [lab-8-evaluation-and-red-teaming/promptfoo.yaml](/labs/lab-8-evaluation-and-red-teaming/promptfoo.yaml). Upload it with the Load Config button in the lower-left corner, then proceed with the following screenshot steps.
@@ -167,7 +167,7 @@ Promptfoo is highly flexible. Anything that involves mass evaluation of prompts
### Explore: Promptfoo evaluation workflow
- Tip: Please use the provided evaluation configuration file: [lab-7-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml](content/labs/lab-7-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml). Upload it with the Load Config button in the lower-left corner, then proceed with the following screenshot steps.
+ Tip: Please use the provided evaluation configuration file: [lab-8-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml](/labs/lab-8-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml). Upload it with the Load Config button in the lower-left corner, then proceed with the following screenshot steps.
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/1 - Direct Injection.png b/public/labs/lab-8-evaluation-and-red-teaming/1 - Direct Injection.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/1 - Direct Injection.png
rename to public/labs/lab-8-evaluation-and-red-teaming/1 - Direct Injection.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/2 - Red Team.png b/public/labs/lab-8-evaluation-and-red-teaming/2 - Red Team.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/2 - Red Team.png
rename to public/labs/lab-8-evaluation-and-red-teaming/2 - Red Team.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/3 - Model Selection.png b/public/labs/lab-8-evaluation-and-red-teaming/3 - Model Selection.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/3 - Model Selection.png
rename to public/labs/lab-8-evaluation-and-red-teaming/3 - Model Selection.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/4 - Model Testing Target.png b/public/labs/lab-8-evaluation-and-red-teaming/4 - Model Testing Target.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/4 - Model Testing Target.png
rename to public/labs/lab-8-evaluation-and-red-teaming/4 - Model Testing Target.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/5 - Dataset Selection.png b/public/labs/lab-8-evaluation-and-red-teaming/5 - Dataset Selection.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/5 - Dataset Selection.png
rename to public/labs/lab-8-evaluation-and-red-teaming/5 - Dataset Selection.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/6 - Mutation Strategies.png b/public/labs/lab-8-evaluation-and-red-teaming/6 - Mutation Strategies.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/6 - Mutation Strategies.png
rename to public/labs/lab-8-evaluation-and-red-teaming/6 - Mutation Strategies.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/7 - Final Report.png b/public/labs/lab-8-evaluation-and-red-teaming/7 - Final Report.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/7 - Final Report.png
rename to public/labs/lab-8-evaluation-and-red-teaming/7 - Final Report.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/Eval.png b/public/labs/lab-8-evaluation-and-red-teaming/Eval.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/Eval.png
rename to public/labs/lab-8-evaluation-and-red-teaming/Eval.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/Image 1.png b/public/labs/lab-8-evaluation-and-red-teaming/Image 1.png
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/Image 1.png
rename to public/labs/lab-8-evaluation-and-red-teaming/Image 1.png
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml b/public/labs/lab-8-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml
rename to public/labs/lab-8-evaluation-and-red-teaming/mmlu-promptfoo-config.yaml
diff --git a/content/labs/lab-7-evaluation-and-red-teaming/promptfoo.yaml b/public/labs/lab-8-evaluation-and-red-teaming/promptfoo.yaml
similarity index 100%
rename from content/labs/lab-7-evaluation-and-red-teaming/promptfoo.yaml
rename to public/labs/lab-8-evaluation-and-red-teaming/promptfoo.yaml
diff --git a/src/components/labs/LabContent.test.tsx b/src/components/labs/LabContent.test.tsx
index 680933d..70f884f 100644
--- a/src/components/labs/LabContent.test.tsx
+++ b/src/components/labs/LabContent.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen, waitFor } from "@testing-library/react";
+import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import { LabContent } from "~/components/labs/LabContent";
@@ -36,4 +36,55 @@ describe("LabContent", () => {
expect(screen.getByText("Tokenizer Playground")).toBeInTheDocument();
expect(screen.getByText("Visualize token confidence locally")).toBeInTheDocument();
});
+
+ it("filters harness branches from a single Objective 2 selector", () => {
+ render(
+ ',
+ '',
+ '',
+ '',
+ "",
+ '