Skip to content

Commit a76fa67

Browse files
ivorbCopilot
andcommitted
Drive the lab tables and three new views from lab frontmatter
Per-task section, difficulty and duration previously existed only as prose in the hand-written "Lab at a glance" tables on the three landing pages. Nothing validated them against the task pages they described. Moves that data into task frontmatter (type, parent, order, section, difficulty, duration, access) and adds three surfaces built from it: - workshop.html - instructor-led core path, ordered by lab then task, with cumulative elapsed time and gated tasks called out as demo-only. - explore.html - every task as a card, filterable by lab, section, level, duration and access. - labs.json - the same catalogue as a machine-readable endpoint. The landing page tables are generated too, but written into the markdown by tools/generate_lab_blocks.py rather than a Liquid include. The lab pages are read directly by platforms that never run Liquid - GitHub's own renderer returns a bare "{% include ... %}" where the table should be - so the generated content lives between HTML comment markers, which are invisible everywhere. --check makes drift a build failure, in the same pattern as Labfiles/_shared/sync.py. The web-only pages keep Liquid; they are never consumed as raw markdown. Also corrects metadata the backfill exposed: - level was 300 on every task page, inherited from the lab, while the tables listed L200-L400. Level now matches difficulty everywhere. - islab removed from task pages; tasks are steps within a lab, not labs. - B2, B3 and B4 marked access: gated, each recording what it needs and how to check, so the lock icons and the workshop callouts come from one source. Verified: generated tables reproduce the totals the prose stated by hand (A 35 min core / 2h25, B 35/1h50, C 30/2h), the generator is idempotent, a corrupted block fails --check with a diff, and all three views render. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: dc4690cc-57d6-48a7-abc8-bc8570113ab1
1 parent 5017f7f commit a76fa67

26 files changed

Lines changed: 823 additions & 39 deletions

.github/workflows/content-checks.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,7 @@ jobs:
5050
- name: Line endings match .gitattributes
5151
if: always()
5252
run: python tools/checks/check_line_endings.py
53+
54+
- name: Generated blocks in the lab pages are current
55+
if: always()
56+
run: python tools/generate_lab_blocks.py --check

Instructions/Consolidated/A-build-and-extend-ai-agents.md

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@ title: 'Build and extend AI agents'
33
lab:
44
title: 'Build and extend AI agents'
55
description: 'Build the Tailwind Traders assistant: ground it in store policy, then extend it with tools using remote MCP servers, custom functions, and a client app. A modular lab you can complete end to end or one task at a time.'
6+
type: 'lab'
7+
id: 'A'
8+
order: 1
9+
difficulty: 3
10+
duration: 35
11+
access: 'open'
612
level: 300
713
concepts: 'agent creation and grounding, tools, Model Context Protocol (MCP)'
8-
duration: 35
914
islab: true
1015
status: 'draft'
1116
---
@@ -121,19 +126,22 @@ one virtual environment, and one `.env`, so if you'd rather work straight throug
121126

122127
## Lab at a glance
123128

124-
Complete the **Core** tasks first (about **35 minutes**) — they end with a working,
125-
tool-using agent. Then expand any **Optional** tasks that interest you. The full lab,
126-
including all optional tasks, takes about **2 hours 25 minutes**.
129+
Complete the **Core** tasks first — they end with a working, tool-using agent. Then expand any
130+
**Optional** tasks that interest you.
127131

132+
<!-- BEGIN GENERATED: task-table - do not edit by hand; run: python tools/generate_lab_blocks.py -->
128133
| Section | Task | Level | Time |
129134
| --- | --- | --- | --- |
130-
| **Core** | [Task 1 – Create and ground an agent in the portal](A1-create-and-ground-an-agent.md) | ▰▰▱▱▱ L200 | ~15 min |
131-
| **Core** | [Task 2 – Connect the agent to a remote MCP server in code](A2-connect-a-remote-mcp-server.md) | ▰▰▰▱▱ L300 | ~20 min |
135+
| **Core** | [Task 1 – Create and ground an agent](A1-create-and-ground-an-agent.md) | ▰▰▱▱▱ L200 | ~15 min |
136+
| **Core** | [Task 2 – Connect a remote MCP server](A2-connect-a-remote-mcp-server.md) | ▰▰▰▱▱ L300 | ~20 min |
132137
| *Optional* | [Task 3 – Call your agent from a client app](A3-call-your-agent-from-a-client-app.md) | ▰▰▰▱▱ L300 | ~20 min |
133138
| *Optional* | [Task 4 – Add custom function tools](A4-add-custom-function-tools.md) | ▰▰▰▱▱ L300 | ~25 min |
134-
| *Optional* | [Task 5 – Capstone: your own MCP server + combine every tool](A5-capstone-build-your-own-mcp-server.md) | ▰▰▰▰▱ L400 | ~35 min |
139+
| *Optional* | [Task 5 – Capstone: build your own MCP server](A5-capstone-build-your-own-mcp-server.md) | ▰▰▰▰▱ L400 | ~35 min |
135140
| *Optional* | [Task 6 – Promote your assistant to a hosted agent](A6-promote-your-assistant-to-a-hosted-agent.md) | ▰▰▰▱▱ L300 | ~30 min |
136141

142+
**Core tasks:** about **35 minutes**. **Full lab**, including every optional task: about **2 hours 25 minutes**.
143+
<!-- END GENERATED: task-table -->
144+
137145
**Choosing your path** — pick the tasks that fit the time you have:
138146

139147
- **Core only (~35 min):** do Tasks 1–2.

Instructions/Consolidated/A0-getting-started.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ title: 'Getting started: set up your environment'
33
lab:
44
title: 'Getting started: set up your environment'
55
description: 'Shared setup for the Build and extend AI agents lab: create a Microsoft Foundry project, get the starter code, and configure your environment. Complete this once before any task.'
6+
type: 'task'
7+
parent: 'A'
8+
order: 0
9+
section: 'setup'
10+
access: 'open'
611
level: 300
712
concepts: 'environment setup, Microsoft Foundry project'
813
status: 'draft'

Instructions/Consolidated/A1-create-and-ground-an-agent.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 1 – Create and ground an agent'
33
lab:
44
title: 'Task 1 – Create and ground an agent'
55
description: 'Create an agent in the Microsoft Foundry portal and ground it in Tailwind Traders store policy so it answers from your data.'
6-
level: 300
6+
type: 'task'
7+
parent: 'A'
8+
order: 1
9+
section: 'core'
10+
difficulty: 2
11+
duration: 15
12+
access: 'open'
13+
level: 200
714
concepts: 'agent creation, grounding, file search'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/A2-connect-a-remote-mcp-server.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 2 – Connect a remote MCP server'
33
lab:
44
title: 'Task 2 – Connect a remote MCP server'
55
description: 'Extend an agent with a tool by connecting it to a remote Model Context Protocol (MCP) server, and handle tool-approval requests in code.'
6+
type: 'task'
7+
parent: 'A'
8+
order: 2
9+
section: 'core'
10+
difficulty: 3
11+
duration: 20
12+
access: 'open'
613
level: 300
714
concepts: 'tools, Model Context Protocol (MCP), approvals'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/A3-call-your-agent-from-a-client-app.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 3 – Call your agent from a client app'
33
lab:
44
title: 'Task 3 – Call your agent from a client app'
55
description: 'Drive your grounded portal agent from a small web chat app using the Foundry SDK and Responses API, with inline charts.'
6+
type: 'task'
7+
parent: 'A'
8+
order: 3
9+
section: 'optional'
10+
difficulty: 3
11+
duration: 20
12+
access: 'open'
613
level: 300
714
concepts: 'Foundry SDK, Responses API, code interpreter'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/A4-add-custom-function-tools.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 4 – Add custom function tools'
33
lab:
44
title: 'Task 4 – Add custom function tools'
55
description: 'Give an agent tools backed by your own Python functions and process the function-calling loop.'
6+
type: 'task'
7+
parent: 'A'
8+
order: 4
9+
section: 'optional'
10+
difficulty: 3
11+
duration: 25
12+
access: 'open'
613
level: 300
714
concepts: 'function tools, function calling, Microsoft Agent Framework'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/A5-capstone-build-your-own-mcp-server.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 5 – Capstone: build your own MCP server'
33
lab:
44
title: 'Task 5 – Capstone: build your own MCP server'
55
description: 'Capstone: build your own MCP server and combine it with your function tools into one Tailwind Traders assistant.'
6-
level: 300
6+
type: 'task'
7+
parent: 'A'
8+
order: 5
9+
section: 'optional'
10+
difficulty: 4
11+
duration: 35
12+
access: 'open'
13+
level: 400
714
concepts: 'MCP server, tool orchestration, Microsoft Agent Framework'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/A6-promote-your-assistant-to-a-hosted-agent.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ title: 'Task 6 – Promote your assistant to a hosted agent'
33
lab:
44
title: 'Task 6 – Promote your assistant to a hosted agent'
55
description: 'Take the Tailwind Traders assistant you built as a prompt agent and deploy it as a hosted agent - your own code running in a Foundry-managed container - with the Azure Developer CLI.'
6+
type: 'task'
7+
parent: 'A'
8+
order: 6
9+
section: 'optional'
10+
difficulty: 3
11+
duration: 30
12+
access: 'open'
613
level: 300
714
concepts: 'hosted agents, deployment, Azure Developer CLI'
8-
islab: true
915
status: 'draft'
1016
---
1117

Instructions/Consolidated/B-integrate-agents-with-enterprise-knowledge-and-m365.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@ title: 'Integrate agents with enterprise knowledge and Microsoft 365'
33
lab:
44
title: 'Integrate agents with enterprise knowledge and Microsoft 365'
55
description: 'Build the Tailwind Traders staff knowledge assistant: ground it on enterprise documents with Foundry IQ, then deliver it through Microsoft Teams, Microsoft 365 Copilot, and Work IQ. A modular lab you can complete end to end or one task at a time.'
6+
type: 'lab'
7+
id: 'B'
8+
order: 2
9+
difficulty: 3
10+
duration: 35
11+
access: 'open'
612
level: 300
713
concepts: 'enterprise knowledge grounding, Foundry IQ, Microsoft 365, Model Context Protocol (MCP)'
8-
duration: 35
914
islab: true
1015
status: 'draft'
1116
---
@@ -118,16 +123,23 @@ folder, one virtual environment, and one `.env`, so if you'd rather work straigh
118123

119124
## Lab at a glance
120125

121-
Complete the **Core** task first (about **35 minutes**) — it ends with a working, grounded
122-
enterprise-knowledge agent you can call from code. Then expand any **Optional** tasks that
123-
interest you. The full lab, including all optional tasks, takes about **1 hour 50 minutes**.
126+
Complete the **Core** task first — it ends with a working, grounded enterprise-knowledge agent
127+
you can call from code. Then expand any **Optional** tasks that interest you.
124128

129+
<!-- BEGIN GENERATED: task-table - do not edit by hand; run: python tools/generate_lab_blocks.py -->
125130
| Section | Task | Level | Time |
126131
| --- | --- | --- | --- |
127132
| **Core** | [Task 1 – Create a Foundry IQ knowledge agent and connect from code](B1-create-a-foundry-iq-knowledge-agent.md) | ▰▰▰▱▱ L300 | ~35 min |
128-
| *Optional* | [Task 2 – Publish your agent to Microsoft Teams](B2-publish-to-microsoft-teams.md) | ▰▰▱▱▱ L200 | ~20 min |
129-
| *Optional* | [Task 3 – Publish your agent to Microsoft 365 Copilot](B3-publish-to-microsoft-365-copilot.md) | ▰▰▱▱▱ L200 | ~15 min |
130-
| *Optional* | [Task 4 – Work IQ: bring Microsoft 365 signals into an agent](B4-work-iq-workplace-intelligence.md) | ▰▰▰▰▱ L400 | ~40 min |
133+
| *Optional* | [Task 2 – Publish your agent to Microsoft Teams](B2-publish-to-microsoft-teams.md) 🔒 | ▰▰▱▱▱ L200 | ~20 min |
134+
| *Optional* | [Task 3 – Publish your agent to Microsoft 365 Copilot](B3-publish-to-microsoft-365-copilot.md) 🔒 | ▰▰▱▱▱ L200 | ~15 min |
135+
| *Optional* | [Task 4 – Work IQ: bring Microsoft 365 signals into an agent](B4-work-iq-workplace-intelligence.md) 🔒 | ▰▰▰▰▱ L400 | ~40 min |
136+
137+
**Core tasks:** about **35 minutes**. **Full lab**, including every optional task: about **1 hour 50 minutes**.
138+
139+
> 🔒 Tasks marked with a lock need access your account may not have. Each one opens
140+
> with a quick check and tells you what to do if you don't have it — nothing else in
141+
> this lab depends on them.
142+
<!-- END GENERATED: task-table -->
131143
132144
**Choosing your path** — pick the tasks that fit the time you have:
133145

0 commit comments

Comments
 (0)