All notable changes to the Microsoft Copilot Studio Labs will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- The custom MCP servers now ship with the three labs that need them (
labs/mcs-workflows/,labs/mcs-orchestration/,labs/mcs-skills/, each underassets/mcp-servers/). Warehouse MCP (used bymcs-workflowsUse Case #4) and Order Management MCP (used alongside it bymcs-orchestrationUse Case #4 andmcs-skillsUse Case #5) are custom connectors, not platform tools — but all three labs asserted they were available without shipping them, naming a version, or offering a way to check. A learner in a tenant where nobody had pre-provisioned them discovered this only at the Add tool step, with nothing to select and no way forward. Each lab now carries the unmanagedEnhancedTaskCompletion_1_0_0_2.zippackage, plus a Custom MCP servers section in Prerequisites that names the solution display name, unique name and version, lists the tools each server exposes, gives a procedure for checking whether it is already loaded, and gives the import steps — including the post-import Custom connectors → Create connection step, which is required and was documented nowhere. The consuming use case now opens with a callout linking straight to those checks. Follows the pattern established formcs-github-harness. - Fixed a dead link in this changelog. The Enhanced Task Completion sample was cited as
microsoft.github.io/enhanced-task-completion/, which now returns 404 — the repository was renamed tomicrosoft/new-copilot-studio-tech-guideand the sample moved undersample/archive/. The citation now points at the archive path that actually holds the solution. mcs-github-harnessUse Case #1 now opens with a prerequisites callout. The lab depends on four MCP servers and four SharePoint knowledge documents that are not set up from inside it, and a learner who skipped the Prerequisites did not find out until Use Case #2, when the tool they are told to add is not in the picker. Use Case #1 now leads with an IMPORTANT block linking straight to the two checks — are the servers loaded and are the documents in SharePoint — plus the import procedure for anything missing.- The four
mcs-github-harnessMCP servers now ship with the lab (labs/mcs-github-harness/assets/mcp-servers/). Asset Telemetry, Work Orders, Policy Lookup and Claims History are added as unmanaged Dataverse solution packages, alongside a Prerequisites procedure for checking whether they are already loaded in the target environment and importing the ones that are not. Previously the lab asserted the four servers had to be present but shipped neither the packages nor a way to verify or obtain them, so it could only be run inside a tenant where someone had already provisioned them by hand. The check names each solution's display name, unique name and version, and calls out the environment-picker mismatch that is the usual cause of "the tool is not in the Add a tool list". - New event: Architecture Bootcamp - V3 (
_events/bootcamp-v3.md+_data/agendas/bootcamp-v3.yml). A net-new 3-day event that rebuilds the Architecture Bootcamp around the three agent harnesses — Copilot, Standard, and GitHub Copilot — and the component model each exposes, rather than the feature tour used by V2.1. Day 1 frames agents and workflows, covers Microsoft 365 Copilot and Cowork, then opens the harness/orchestration overview and the Copilot harness. Day 2 runs the Standard and GitHub Copilot harnesses, agent creation from the GitHub harness, Workflows, and closes on consumption management. Day 3 is deep dives on knowledge & tools, instructions & descriptions, and skills, closing with multi-agent, coding agents, ALM + reporting/analytics/evals, and governance + Agent 365. 17 modules, 9 labs, 09:00–16:30/17:45/17:00. V2.1 (_events/bootcamp.md) is untouched and continues to render exactly as before. - GitHub Copilot harness lab (
mcs-github-harness) authored — Bootcamp V3 Lab 5 placeholder replaced with full content (labs/mcs-github-harness/README.md+_labs/mcs-github-harness.md). GitHub Copilot Harness - Component Model is the 60-minute companion to Module 7 and the deepest hands-on pass over the harness. Learners assemble an agent from the component rail and enable Memory (UC1); ground it with two SharePoint knowledge documents and two MCP tools, then watch the orchestrator route between them from their descriptions alone (UC2); read the reasoning trace while the loop recovers from a failing tool call by splitting an over-long query window, and while it reaches for the Agent Sandbox to compute a correlation and render a chart (UC3); then build a second agent in a different industry and author a Skill from blank that provably loads only when a request matches its description (UC4). Two verticals: Northgate Energy — a wind-turbine investigation across an equipment manual, operator dispatch standards, and live telemetry and work-order MCP servers — and Meridian Mutual, a property insurer with policy and claims MCP servers plus MSN Weather. This is the first repo lab to cover code execution, resolving the open design question recorded on the module. 14 screenshots. Authored by driving the live product end to end, including the failure path. Attached to Architecture Bootcamp - V3 as Lab 5, which completes the event — all nine labs are now authored and no placeholdersessionrows remain on the V3 agenda. - Instructions & Descriptions lab (
mcs-instructions) authored — Bootcamp V3 Lab 8 placeholder replaced with full content (labs/mcs-instructions/README.md+_labs/mcs-instructions.md). Deep Dive: Instructions & Descriptions is a level-300 lab about the text the generative orchestration planner actually acts on. Use Case #1 verifies and publishes the prebuilt Account Data Lookup Agent (Dataverse Search on, Account/Contact tables indexed). Use Case #2 walks the four levels the planner reads — agent Instructions, child agent Name + Description, tool Name + Description, and input Description — then runs a multi-turn conversation where each turn exposes one decision, including the input-description rule that turns a user's "Texas" into theTXthe connector requires, and closes on Get rationale as a debugger trace for descriptions. Use Case #3 builds a new-type Sales Account Assistant with an MSN Weather tool (Maker authentication) and the Microsoft Dataverse MCP Server, adds SharePoint knowledge via Work IQ, and exercises the New Orchestrator's Agentic Reasoning Loop. Content is ported frommcs-orchestrationUse Cases #1–#3, which is left fully intact — it remains Lab 2 of Advanced Agent in a Day, Lab 4 of Agent in a Day, and Lab 8 of Architecture Bootcamp V2.1. 31 screenshots, renamed from the source lab's genericimage-NN.pngto descriptiveuc<N>-*.png. Attached to Architecture Bootcamp - V3 as Lab 8; theinstructions-and-descriptionsmodule now links it. - Skills lab gains Use Case #5 — Leveraging a Skill inside a new-type agent (
labs/mcs-skills/README.md). The Leveraging Skills use case moves out ofmcs-orchestrationand into the Skills lab where it belongs: authoring an Order Resolution Concierge Skill from blank, attaching the Order Management and Warehouse custom MCP servers plus a customer-facing knowledge source, and running a seven-prompt demonstration that shows the New Orchestrator loading the Skill and chaining MCP tools, knowledge, and weather — including a policy-grounded refusal and a won't-guess clarifying question. It builds on the Sales Account Assistant from Use Case #3 of the newmcs-instructionslab, which the section states as a prerequisite. 14 further screenshots. - Skills lab (
mcs-skills) authored — Bootcamp V3 Lab 9 placeholder replaced with full content (labs/mcs-skills/README.md+_labs/mcs-skills.md). Deep Dive: Skills is a level-300 / 30-minute hands-on lab built around a single authored Skill — anrfp-responsebundle (SKILL.md,references/,assets/,scripts/) that drafts proposals for a fictional vendor — run across four surfaces to show that one Skill is authored once and reused everywhere. Use Case #1 builds an RFP Response Agent in Copilot Studio, attaches the Work IQ tool and the skill.zip, inspects the uploaded bundle, publishes, and watches the orchestrator load the skill unprompted from its description alone. Use Case #2 builds a modern workflow — Office 365 Outlook trigger → Classify → Agent → Draft an email message — establishing that a workflow cannot call a Skill directly but reaches one through an agent, and pairing the workflow's deterministic half with the agent's non-deterministic half. Use Case #3 installs the same skill packaged as a plugin in Copilot Cowork and runs a second solicitation through it. Use Case #4 is a screenshot-only demonstration of the identical skill in Claude Code and the GitHub Copilot app — no hands-on, since coding agents are not part of the lab environment. The lab's throughline is that the Skill behaves consistently everywhere while the surface decides what can be collected: chat attaches files, the workflow can only carry text because the Agent node returns strings, Cowork hands back an Output folder, and a coding agent writes to the filesystem. 33 walkthrough screenshots underlabs/mcs-skills/images/. Authored by driving the live product end-to-end, then re-run from the published instructions in a wiped tenant. Attached to Architecture Bootcamp - V3 as Lab 9; theagent-skillsmodule page (the slide deck) remains a placeholder for a follow-up. - 15 module entities for V3 (
_modules/): a dedicatedm365-copilotentity for Module 2 plus 14 scaffolded entities —agents-workflows-making-them-real,cowork,harnesses-and-component-models,copilot-harness,standard-harness,github-copilot-harness,creation-github-harness,consumption-management,knowledge-and-tools-deep-dive,instructions-and-descriptions,agent-skills,coding-agents,alm-and-analytics,governance-and-agent-365. The scaffolded entities carryplaceholder: trueand a note naming the source material they will be assembled from, following the existingworkflowsplaceholder convention. V3 reuses two existing entities unchanged —workflows(M9) andmulti-agent(M14). Lab 5 does not exist yet and is carried as asessionrow so the timeline stays complete and correctly timed; each names the seed material and converts to atype: labrow as the lab lands. - V3 slide decks are now in-repo source (
presentations/bootcamp-v3/, Git LFS — 17 decks, ~481 MB). Sixteen of V3's 17 modules now link to a deck; only M10 Consumption Management is net-new and has none yet. The agenda and module pages render a Slides / Download Slides button only where a deck is linked, matching howpresentations/bootcamp/backs the V2.1 event. Fourteen of the 15 V3 module entities carryslides:in front matter; the two reused entities (workflows,multi-agent) get their V3 deck via a per-rowslides:override inbootcamp-v3.yml, so their other events keep pointing at the original decks. slides_base_urlis now configurable (_config.yml), replacing the URL that was hardcoded in three places across_layouts/event.htmland_layouts/module.html. The default is unchanged._config.local.ymlsets it to"", which links decks relative to the site so a local review build serves the real files out of the working tree — previously every Slides button on a local build pointed atgithub.com/microsoft/mcs-labs/raw/main/and 404'd for any deck not yet merged.serve-local.shruns the site in Docker on Ruby 3.3 (matching CI) with that override applied.description:is now overridable per module row on an event agenda, joining the existingtitle:,duration:andslides:overrides. This lets an event reuse a module entity whose own description does not fit that event's framing.lab: falseon a module row suppresses that module's companion lab from an event's hero stats. Used by V3's Module 14, which reuses themulti-agentmodule but drops themcs-multi-agentlab.
- Architecture Bootcamp V3 — Day 2 module timings rebalanced. Creation — GitHub harness (from UX, from Chat) (Module 8) drops 45 → 30 minutes and Workflows (Module 9) rises 30 → 45. The two changes cancel, so Day 2 still totals 525 minutes, content still closes at 16:45 and the social hour still ends at 17:45. Only two rows move — the afternoon coffee break (14:30 → 14:15) and M9's start (14:45 → 14:30); Lab 6 onward is unchanged.
_modules/creation-github-harness.mdis V3-only and its ownduration:follows to 30._modules/workflows.mdis not touched — it is shared with Advanced Agent in a Day, which inherits its 30-minute value, so V3's 45 is a row-level override. Days 1 and 3 are untouched. - Architecture Bootcamp V3 Module 8 deck replaced with the authored version (
presentations/bootcamp-v3/M08. Creation GitHub Harness from UX and from Chat.pptx, Git LFS). The copy in the repo was an early 4-slide, 424 KB cut that predated the rest of the V3 deck set — it was the one deck the Aug re-sync left alone, because at that point it was byte-identical to the maintainers' working folder. The authored deck is 9 slides, 38 MB, of which 36.6 MB is a single embedded MP4 walking the two creation paths end to end. Filename is unchanged, so_modules/creation-github-harness.mdand everyslides:link keep resolving with no edit. - Copilot Harness — Agent Builder lab refreshed for the current declarative-agent experience. Updated both lab copies and screenshots for the current Microsoft 365 Copilot UI; moved advanced capabilities to Knowledge settings; added default response-mode guidance for Auto, Quick response, and Think deeper; expanded data analysis with in-chat charts and generated workbooks; and added an extra-credit SharePoint List workflow with direct, cross-source, and three-source validation prompts. The learning summaries now cover instructions versus grounding, citations, non-deterministic outputs, artifact validation, current product limits, and the boundary between declarative agents and other harnesses.
- Architecture Bootcamp V3 — Day 3 lab timings rebalanced. Deep Dive: Knowledge & Tools (Lab 7) drops 60 → 30 minutes; Deep Dive: Instructions & Descriptions (Lab 8) and Deep Dive: Skills (Lab 9) each rise 30 → 45 minutes. The three changes cancel, so Day 3 still runs 480 minutes with 120 minutes hands-on and still ends at 17:00 — but every row between Lab 7 and Lab 9 moved earlier, and lunch then moved back one slot to sit after Lab 8 rather than before it — Day 3 lunch now runs 12:00–13:00 (it was 11:45), and Module 12 leads straight into its own Lab 8. Days 1 and 2 are untouched. Each lab's front matter, Lab Details table and per-use-case effort budget were brought into line with its new slot: Lab 7 trims the MCP Server use case 20 → 15 so its two core use cases sum to 30 (Custom Prompts and CUA remain Extra Credit, as restructured in #47); Lab 8 trims UC3 New Orchestrator 30 → 15; Lab 9 trims UC5 Skill inside a new-type agent 30 → 15.
_data/agendas/bootcamp-v3.ymlgained a convention note stating that a row'sduration:is the slot and that a lab's declared duration and core use-case sum must both match it._labs/mcs-tools.mdalso had a staleduration: 60in front matter that disagreed with its own 35-minute Lab Details table; both now read 30. - Every V3 lab's use-case estimates now reconcile with its agenda slot. Three labs were out of line and have been rebased. Cowork hands-on (Lab 2) held 25 minutes of exercises in a 45-minute slot — raised to 10/20/15 across its three use cases, weighting the increase toward the two involving multi-surface agent execution. Copilot harness — Agent Builder (Lab 3) declared 45 minutes against a 30-minute slot while its content ran 20 — the declared duration now reads 30 and its two use cases rise to 15 each. Workflows (Lab 6) summed to 70 in a 60-minute slot because Use Case #5, titled "(Bonus)" throughout the lab, was still counted as core; it is now marked
EC, which lands core on 60 with no estimate changed. All eight authored labs now satisfy slot = declared duration = core use-case sum. - V3 slide decks re-synced from the maintainers' working folder (
presentations/bootcamp-v3/, Git LFS). Fifteen decks updated to their current authored versions, including the net-new M10 deck — Copilot Credit Consumption Management — which closes the last gap in the V3 deck set: all 17 modules now link to a deck._modules/consumption-management.mdgains theslides:link. M02 and M08 were already byte-identical and were left alone.
-
Six
mcs-github-harnessscreenshots are cropped to their subject; the eight conversation captures remain full-viewport. All 14 walkthrough images were 1263 px full-viewport captures including the left navigation, page header and unrelated chrome, which left the actual subject a small region in the middle. The six that frame a bounded piece of UI are re-captured tight: the component rail (400 px), the SharePoint and skill dialogs (801 and 881 px), and the two agent-designer views (1216 px). Cropping the eight conversation captures was attempted and reverted — an element screenshot of a response taller than the viewport comes back broken inside the chat pane's virtualized scroll container, with the unpainted region blank, the sticky toolbar composited into the middle of the frame, edges clipped mid-word, and the substantive part of the answer missing entirely. Doing those properly needs a re-run against a live environment with a viewport tall enough to paint each response in one pass, and remains outstanding. -
mcs-github-harnessno longer quotes the reasoning trace verbatim or fixes the retry count. A cold run of the finished lab reproduced every documented outcome but not the exact wording: Use Case #3 quoted "I should split the date range into two 90-day windows instead of one long span" and stated the tool is called "twice" (the re-run split differently and called it four times), and Use Case #4 quoted the line that opens the skill trace. Trace prose is model-generated and varies per run, so the lab now describes the decision and leaves the deterministic parts — therange_too_largepayload,Loading skill: fnol-intake— quoted. Use Case #3's wind-speed TIP was rewritten for the same reason: it directed learners to look for a third telemetry series that the re-run did not pull, and now frames the confound check as one of the behaviours the loop may produce, which is the point it was making anyway. -
mcs-github-harnessUse Case #1 warns that the Memory toggle can be missing after the first save. On a freshly created agent the component rail renders Memory before saving, drops it entirely on the first save, and restores it on refresh — exactly the window in which the lab tells the learner to switch it on. The step now carries a NOTE. The MSN Weather WARNING in Use Case #4 was also softened: the Ambee action it warns about did not sort above the MSN Weather one when searching the term the lab specifies, so the warning now says ordering is unstable rather than asserting a fixed result order. -
Standard Harness lab use-case sequencing is now consistent (
labs/standard-harness-component-model/README.md+_labs/standard-harness-component-model.md). Corrected completion banners for Use Cases 2-5 and both extra-credit sections, repaired stale cross-references, normalized ordered-list numbering, and aligned the Tools use-case effort with the 45-minute lab schedule. -
Architecture Bootcamp V3 module pages no longer display scaffold placeholder content. Removed the placeholder flags and body copy from Modules 1, 3-13, and 15-17; linked the scheduled companion labs directly from Modules 3, 5, 6, 9, and 11-13. Modules without a scheduled lab now remain clean frontmatter-only pages, while Module 14's event-level
lab: falsebehavior remains unchanged. -
Architecture Bootcamp V3 Module 2 now opens the correct M365 Copilot module. Added a dedicated
m365-copilotmodule entity, linked it to the existingm365-copilot-frontier-agentslab and final M02 deck, and updated the V3 agenda and lab metadata. The sharedagent-buildermodule remains unchanged for other events. -
mcs-toolswas missing from every event agenda._labs/mcs-tools.mdhad four stray leading spaces before its opening---, so Jekyll never parsed the front matter andsite.labs | where: "slug", "mcs-tools"matched nothing. The lab row was silently skipped by the agenda renderer — the Architecture Bootcamp event listed 10 labs instead of 11 and Lab 7 (Tools) was absent from its timeline, with~13.8hof content reported instead of~14.8h. Stripping the indent restores the row and the stats. Introduced in #486. -
Module pages silently dropped their markdown body.
_layouts/module.htmldefines a.mod-contentrule in its<style>block but never emitted the wrapper, so the body of every module file was discarded — including the placeholder note on_modules/workflows.md. The layout now renders the body in a.mod-contentwrapper when one is present, and emits nothing for the 35 modules that are header-card only. -
Workflows module deck now available for download (
presentations/bootcamp/10. Workflows_CB.pptx, Git LFS). Added the slide deck for theworkflowsmodule (Module 4 of Advanced Agent in a Day) and wired it into_modules/workflows.mdvia aslides:front-matter path, so the module page renders a Download Slides button. The module's placeholder note was updated to point at the now-available deck; the hands-on lab remains scaffolded for a follow-up. -
Added a
Lab Doc Syncpull-request check (scripts/check-lab-sync.js+.github/workflows/lab-doc-sync.yml) that fails whenlabs/<slug>/README.mdchanges without the rendered_labs/<slug>.md— the file the site actually builds from. Prevents lab content updates from silently not appearing on the live portal. -
The portal can now render from the consumed feed (feed-as-source-of-truth).
scripts/consume-feed.jsreads_data/feed_subscriptions.yml(self by default, optional external instances,excludefilters), merges (own wins), and materializes collection docs into a git-ignored.feed-build/that Jekyll renders via_config.feed.yml(collections_dir). Own content round-trips identically (verified gate); committed sources and the lab auditor are untouched. -
Content syndication feed (Phase 1, producer). Build-time
scripts/build-feed.jsemits config-driven JSON feeds (feed/<name>.json+feed/index.json) of modules/events/workshops/labs with raw markdown, metadata, and absolute image URLs. Configured via_data/feeds.yml. -
Content feed now publishes a scalable layout (schema 1.1): a lightweight per-feed
manifest.json(no markdown) plus deduplicated per-item documents atfeed/items/<collection>/<slug>.json, so consumers sync incrementally. The full inlinefeed/<name>.jsonbundle remains (toggle per feed viabundle:in_data/feeds.yml). -
Workflows lab (
mcs-workflows) authored — placeholder replaced with full content (labs/mcs-workflows/README.md+_labs/mcs-workflows.md). Lab 3 of Advanced Agent in a Day is now a complete, level-300 / 45-minute hands-on lab: Use Case #1 — Automate Task Time-Blocking with a Workflow and an Inline Agent. Learners build the To Do Time Block Workflow with a Microsoft To-Do (Business) connector trigger (When a new to-do in a specific folder is created) feeding a non-deterministic inline agent (agent node, Claude Sonnet 4.6) whose instructions reference the trigger's Title via the/dynamic-content token. The agent is equipped with the Work IQ Calendar MCP tool, the Update to-do action, and web search, and is constrained to book within 8:00 AM–5:00 PM working hours. The lab covers publishing (required before the trigger is live), triggering via a real task, monitoring the run in the Activity view, inspecting the Agent node's run details, and verifying the enriched to-do and the calendar time-block in Outlook. Includes 12 walkthrough screenshots underlabs/mcs-workflows/images/. Authored by driving the live product end-to-end. Theworkflowsmodule page (_modules/workflows.md, the slide deck) remains a placeholder for a follow-up. -
New "Advanced Agent in a Day" (300-level) workshop (
_workshops/advanced-agent-in-a-day.md+_data/agendas/advanced-agent-in-a-day.yml). Full-day, hands-on 300-level workshop for builders who already know the Copilot Studio basics. Based on the Advanced Agent in a Day (300) outline. Agenda: Welcome + Introductions, then five module slots interleaved with three labs — Module 1 Copilot Studio Core Concepts Overview (copilot-studio-core-concepts-overview, level 200, no lab), Module 2 Tools (tools-overview) → Lab 1 Tools (mcs-tools), Module 3 Orchestration & Dynamic Chaining (orchestration) → Lab 2 Orchestration (mcs-orchestration), Module 4 Workflows (placeholder) → Lab 3 Workflows (mcs-workflows, placeholder), and Module 5 Copilot Studio Skills (copilot-studio-plugin), with coffee and lunch breaks (09:00–16:15). Existing modules and labs are reused by slug; only the net-new Workflows content is scaffolded. Optional take-home labs (mcs-multi-agent,mcs-governance,component-collections,mcs-alm) are noted in the workshop description. Listed on/workshops/atorder: 5, immediately after Agent in a Day. -
Module 1 — Copilot Studio Core Concepts Overview (
_modules/copilot-studio-core-concepts-overview.md). A level-200 instructor-led overview of the components of Copilot Studio, covering both the classic authoring model and the new generative orchestration — agents, topics, knowledge sources, tools, variables, and channels. Ships with its own deckpresentations/advanced-agent-in-a-day/02. Copilot Studio Core Concepts_AIAD.pptx(Git LFS). No associated lab. Replaces the earlier Core Concepts & Multi-Agent placeholder. -
Placeholder entities for net-new content (to be connected later).
_modules/workflows.md(Module 4 — frames Workflows as the next generation of autonomous agents: inline agent connections plus scheduled & event-driven triggers), and themcs-workflowslab (labs/mcs-workflows/README.md+_labs/mcs-workflows.md, the Module 4 companion). Each carries a clear placeholder note; slide deck and full lab steps will be linked in a follow-up. -
Orchestration lab — new Use Case #4: Leveraging Skills (
_labs/mcs-orchestration.md). Extends the Use Case #3 Sales Account Assistant (new-type agent) into a focused order-resolution agent to demonstrate Skills. Adds: a second, customer-facing knowledge source (Contoso-Customer-Care-Policies.pdffrom the SharePoint Customer folder, alongside the UC#3 internal HR policy); the Order Management MCP and Warehouse MCP custom connectors (from the Enhanced Task Completion sample) attached as tools; an order-resolution-concierge Skill authored via Add skill → Create from blank (Name / Description / Instructions, no YAML front matter); and shorter, Skill-aware agent instructions that draw an internal-vs-customer policy line. Includes a temporary-workaround callout for creating the MCP connections via a throwaway classic agent (the new-type agent's inline connection step can't mint them yet in preview), an MCP-filter + Enter search tip, and a 7-prompt Demonstration (account fan-out, Skill-loaded bundle dilemma, restock, size/color exchange, weather→delivery-risk cross-domain synthesis, a policy-grounded return refusal citing the 30-day window §1.1, and a won't-guess clarifying question) with copy-paste prompts and a reset-the-conversation-between-personas note. 17 newimages/uc4-*.pngscreenshots. TOC, Use Cases Covered, Summary of Targets, Core Concepts (new Skill row), and Summary of Learnings updated; lab stays 60 minutes / level 300. -
New "Agent in a Day" workshop (
_workshops/agent-in-a-day.md+_data/agendas/agent-in-a-day.yml). Full-day, hands-on workshop composed entirely from existing module and lab entities — no new lab content. Agenda: Welcome + Kickoff, Intro to Hands-On Labs, then four module→lab pairs — Module 1 / Lab 1 M365 Agent Builder (agent-builder→agent-builder-m365), Module 2 / Lab 2 Core Concepts Part 1 → Creation, Topics, Knowledge, and Tools (core-concepts-part1→core-concepts-agent-knowledge-tools), Module 3 / Lab 3 Core Concepts Part 2 → Variables, Agents, and Channels (core-concepts-part2→core-concepts-variables-agents-channels), and Module 4 / Lab 4 Orchestration & Dynamic Chaining → Orchestration with Copilot Studio (orchestration→mcs-orchestration), with coffee and lunch breaks. Module slide decks resolve automatically from each module's ownslides:front matter. Listed on/workshops/atorder: 4, immediately after MCS in a Day. -
Module pages now participate in event navigation. When a module page is reached from an event/workshop agenda (via
?event=, or a sticky in-session context), it shows the same in-event chrome labs already had: the blue event rail (event name, "Module X of N", Prev/Next across the event's modules, and an expandable agenda popover) plus an event-aware breadcrumb that points back to the originating agenda instead of "All Modules". The previously lab-only event-nav engine (_includes/event-nav/script.html) was generalized to be item-type aware (lab or module), driven by a newtypefield on the page context;_layouts/module.htmlnow includes the rail, nav-pair, and script. Standalone module pages (no event context) are unchanged. -
Backlog Tracker at
/tracker/. New static page surfacing GitHub issues across 5 categories (Bugs, New Labs, Content Updates, Portal Enhancements, Bootcamp Features). Two tabs: Insights (default — KPI tiles, donut by category, opened-vs-closed trend line with date/count axes, per-category aging breakdown with stacked bucket bars + named oldest issues, top-15 oldest open issues table) and Board (Kanban with Triage / Backlog / In Progress / Done columns, filter chips per category, smart "+ New item" button that picks the right GitHub issue template based on the active filter). 100% public — any deeper interaction (assignees, comments, history) deep-links to the corresponding GitHub issue. Data is fetched live from the public GitHub Issues REST API in the browser on each page load (no scheduled workflow, no committed snapshot in the hot path) — the page shapes raw issues client-side into the five categories and lifecycle states. A manual Refresh button re-fetches on demand; tab switches / filter clicks / time-range changes do NOT re-fetch (they re-render from the already-loaded dataset). Time-range selector (7d / 14d / 30d / 60d / 90d) drives the Closed KPI, trend chart x-axis, and Done column window. If the live API call fails (network, 5xx, or anonymous-rate-limited at 60/hr/IP), the page falls back to a committed seed JSON atassets/data/issues.jsonand surfaces the degraded state in the header ("⚠ Cached snapshot · N min old (live API unavailable)"). Linked from the home-page footer only — not site-wide nav. Inheritslayout: singleso masthead, footer, and theme switcher are consistent with the rest of the site. Lab Assistant + "Request an account" CTA are suppressed on this page. Module split:tracker.md(page shell),assets/css/tracker.css,assets/js/tracker/{data,insights,board,main}.js,_data/tracker.yml(repo config + stale threshold),scripts/build-tracker-data.js(standalone Node script for occasionally regenerating the seed JSON, with Node 20 built-in test runner unit tests). -
Bootcamp Featureissue template. New.github/ISSUE_TEMPLATE/bootcamp_feature.ymlfor bootcamp process, tooling, and management work — auto-appliestype: bootcamp-featureandstatus: triageso new submissions land in a reviewable state. -
Labels:
type: bootcamp-feature,status: triage,status: backlog,status: in-progress. Support the Backlog Tracker's Triage → Backlog → In Progress → Done lifecycle.
- V3 agenda: M8 is presentation-only and Lab 6 is dropped. Creation — GitHub harness (from UX, from Chat) now runs 45 minutes instead of 30; its 30-minute placeholder lab was removed and 15 of those minutes went to the module, which demonstrates both creation paths live rather than handing off. The remaining 15 minutes shortened Day 2 — everything after M8 moved 15 minutes earlier.
- V3 agenda: new M10 Consumption Management closes Day 2 (
_modules/consumption-management.md). A net-new 30-minute, presentation-only module on the credit and message model, licensing paths, capacity planning, and where to watch spend once agents are live. It carriesplaceholder: trueand has no deck yet. Day 2 teaching now ends 16:45, with the networking hour running to 17:45. - V3 modules renumbered M10–M16 → M11–M17 to make room for Consumption Management in agenda order. The seven decks in
presentations/bootcamp-v3/were renamed to match (M10. Deep Dive - Knowledge and Tools.pptx→M11. …, throughM16. Governance …→M17. …), along with everyslides:path, agendalabel:, and the take-homelinkrows that name their parent module. - V3 labs resequenced to run 1–9 with no gaps. Dropping Lab 6 left a hole in the numbering; the labs after it moved down one, so the former Labs 7–10 are now Labs 6–9. Labs 1–5 are unchanged. Updated across
_data/agendas/bootcamp-v3.yml,_events/bootcamp-v3.md, and the three module bodies that name their companion lab. - Copilot Studio Core Concepts Overview deck refreshed to the latest version (
presentations/advanced-agent-in-a-day/02. Copilot Studio Core Concepts_AIAD.pptx, Git LFS). Updated the slide deck backing thecopilot-studio-core-concepts-overviewmodule (used by the Advanced Agent in a Day workshop). Filename and moduleslides:path are unchanged, so no references needed updating. - Orchestration & Dynamic Chaining deck refreshed to the latest version (
presentations/bootcamp/09. Orchestration and Dynamic Chaining Concepts_CB.pptx, Git LFS). Updated the slide deck backing the sharedorchestrationmodule — used by both the Advanced Agent in a Day workshop and the Architecture Bootcamp. Filename and moduleslides:path are unchanged, so no references needed updating. - Agenda rows now show a Level pill consistently on modules and labs. In
_layouts/event.html,type: moduleagenda rows previously rendered only a duration pill, while lab rows rendered both a Level and a duration pill — so on every event/workshop agenda the level looked sporadic (present on labs, absent on modules). Module rows now render aLevel {{ mod.difficulty }}pill alongside duration, matching lab rows. Applies to all agendas (Advanced Agent in a Day, Bootcamp, MCS in a Day, Agent in a Day). All_modules/*.mdalready carry a numericdifficulty, so every module row now shows its level. - Tools module (
tools-overview) promoted to level 300 (was 200), aligning it with its already-300 companion lab (mcs-tools). Affects every agenda that uses the module — the new Advanced Agent in a Day workshop and the Architecture Bootcamp. - Copilot Studio Plugin / Skills module (
copilot-studio-plugin) promoted to level 300 (was 200). Affects every agenda that uses the module — the new Advanced Agent in a Day workshop and the Architecture Bootcamp. - Orchestration & Dynamic Chaining deck updated (
presentations/bootcamp/09. Orchestration and Dynamic Chaining Concepts_CB.pptx, Git LFS). New version of the slide deck backing the sharedorchestrationmodule — used by both the new Advanced Agent in a Day workshop and the Architecture Bootcamp. Moduleslides:path is unchanged. - CI: GitHub Actions bumped off the deprecated Node 20 runtime (#395). All first-party actions across
build-and-deploy.yml,a11y.yml, andlighthouse.ymlnow run on Node 24:actions/checkout@v5,actions/setup-node@v5,actions/configure-pages@v5,actions/upload-pages-artifact@v5, andactions/deploy-pages@v5. Clears the "Node.js 20 actions are deprecated" annotation ahead of GitHub forcing Node 24 on 2026-06-16 and removing Node 20 from runners on 2026-09-16. The deprecation concerns the action runtimes only; the pa11y-ci / Lighthouse browser test tools deliberately keep running on Node20(setup-node'snode-version), because pa11y-ci's bundled Puppeteer 9 cannot launch Chromium on Node 24 — the tool's Node is independent of the action's own runtime. Standard usage only — no action inputs changed. - Agenda module rows now render as accented cards. On every event/workshop agenda,
type: modulerows are styled like lab rows (boxed card, prominent title, hover) but with a distinct purple left accent rail (--color-journey-purple) versus the lab rows' blue rail — surfacing that modules are clickable links to their module page and visually separating modules from labs in the timeline. Previously module rows reused the plain, unboxed--sessionstyling. New.ws-agenda-row--modulerules in_layouts/event.html; the module<li>now carriesws-agenda-row--module. - Issue template rename: "Redesign feedback" → "Portal Enhancements". The air-theme redesign is now just "the site," so the template covering site-wide bugs/suggestions has been renamed and broadened. File renamed
.github/ISSUE_TEMPLATE/redesign-feedback.yml→portal_enhancement.yml; labelredesign→portal-enhancement. The "Which page?" dropdown now includesBacklog tracker (/tracker/). - Label rename:
feedback→discussion. Distinguishes open-ended threads from the existingquestionlabel (which implies a specific answer is wanted).
- Orchestration: Account Quick Find column names + "Connected agents" toggle location (#405). In
_labs/mcs-orchestration.md, Use Case #1's "Ensure indexes are in place" step listedAddress1: Postal Code/Address1: City, which don't match the live Dataverse column display names — corrected toAddress 1: ZIP/Postal CodeandAddress 1: City. Also clarified the "Test and Publish" step: the Let other agents connect to and use this one toggle lives in the Connected agents section of the Generative AI settings page, not the separate Connected Agents item in the Settings left navigation (which manages inputs/outputs), with a note so learners don't land on the wrong page. - Core Concepts Part 2: variables-during-testing step, topic name, and a low-value test prompt (#404). In
_labs/core-concepts-variables-agents-channels.mdandlabs/core-concepts-variables-agents-channels/README.md: (1) "Observe Variables During Testing" now tells learners to turn off Show activity map when testing from the test panel's … menu before opening Variables (the variables view is otherwise hidden behind the activity map), with a new screenshotimages/variables-show-activity-map-toggle.png; (2) corrected the topic name Join Copilot Mailing List → Join Copilot Studio Mailing List; (3) replaced the rote "What does the A stand for in CARE?" child-agent test prompt with an applied one ("Use the CARE framework to improve this weak prompt…") that actually exercises the agent's grounded guidance. - Core Concepts Part 1: licensing guide updated to the June 2026 edition (#403). The prerequisites note and the Use Case #2 download step in
_labs/core-concepts-agent-knowledge-tools.mdandlabs/core-concepts-agent-knowledge-tools/README.mdpointed at the April 2026 Copilot Studio Licensing Guide on the old…/en-us/microsoft-365/…CDN path. Both now link the June 2026 (PUB) edition at the current…/en-us/bizapps/…Licensing-Guide-June-2026-PUB.pdfpath (verified live,application/pdf), so learners ground the agent in the latest licensing content.
- New Orchestration with Copilot Studio lab (
_labs/mcs-orchestration.md). 60-minute, level-300 lab structured around three Use Cases: (1) verify the prebuilt Account Data Lookup connected agent is configured for the environment, (2) walk through where Instructions and Descriptions live across the agent (parent / child agent / tool / input) and run six demonstration prompts that surface the planner's behavior in the activity tracker, (3) build a new Sales Account Assistant, enable Enhanced Task Completion, attach Weather + Work IQ Mail + Microsoft Dataverse MCP Server tools and acompany_policies_sample.pdfknowledge file, and run seven test prompts that exercise the Reasoning Loop (multi-tool reasoning, dynamic chaining, code-execution via Bash, train-of-thought inspection). Lab cross-references UC #1 with the Multi-Agent lab's verification UC via reciprocal skip callouts. Registered in_events/bootcamp.md(Lab 8) and_data/lab-config.yml(bootcamp_lab_orderskey 8) and listed in the mainREADME.mdlabs table. - Module 9 deck — Lab: Orchestration intro slide bullets rewritten to match the lab's What You Will Learn: Instructions/Descriptions priority order, Activity Tracker / Get rationale as a debugger trace, Enhanced Task Completion's Reasoning Loop, and choosing between standard orchestration and ETC. Replaced the older "Compose a parent agent / Configure dynamic chaining / Verify orchestration behavior" bullets that pre-dated the V2.1 content scope. Slide 27 of
presentations/bootcamp/09. Orchestration and Dynamic Chaining Concepts_CB.pptx. assets/js/copy-trim.js— wrapsnavigator.clipboard.writeTextto strip trailing newlines before the OS clipboard write, fixing inadvertent Enter / form-submit when participants paste fenced-block content into chat composers. Loaded from_includes/footer/custom.html.
- Multi-Agent lab UC #3 split into UC #3 + UC #4. UC #3 now covers verification only (Dataverse Search, table indexes, publish the Account Data Lookup Agent) and UC #4 covers wiring the connected agent into the parent. The verification half is the same content as the Orchestration lab's UC #1; both labs carry reciprocal "skip this if you completed it in the other lab" callouts so V2.1 attendees who run the bootcamp in agenda order don't repeat the setup.
- Bootcamp Day 2 agenda — Tools before Orchestration. Module 8 = Tools and Module 9 = Orchestration and Dynamic Chaining Concepts (was Module 8 = Orchestration, Module 9 = Tools). PPTX files renamed via
git mv(08. Orchestration… → 09.;09. Copilot Studio Tools… → 08.). Lab labels and slug mappings flipped to match across_data/agendas/bootcamp.yml,_events/bootcamp.md,_data/lab-config.yml, and_labs/{mcs-tools,mcs-orchestration}.md(bootcamp_order). Body cross-references in the Orchestration lab updated from Module 8 to Module 9 (three occurrences). - Orchestration lab promoted to level 300 and 60 minutes (was 200 / 45). UC effort reallocated to 10 / 20 / 30 minutes across the three Use Cases. Day 2 15:30 coffee break removed so Lab 8 (Orchestration) gets the full hour from 15:30 to 16:30; Networking & Happy Hour still starts at 16:30.
- Multi-Agent UC #2 "Set the X to:" lines standardized. US version was bold (
**US Product Information Agent**); UK was inline code; both now use fenced```text ```blocks so the values render with a Copy button consistent with the rest of the lab. Removed a stray trailing backtick on line 362 (UK instructions block) that would have copied with the literal value.
core-concepts-variables-agents-channelsUC#1 — clarify the lab runs in the new experience. With Copilot Studio's New experience on by default, added a note that this lab continues with the Copilot Studio Assistant classic agent from the previous lab and that classic agents reopen with their full Overview/Knowledge/Tools/Agents/Topics/Channels canvas under the new experience — so Variables, child agents, and channel deployment are all done in the new UX (no need to switch back to the previous experience here).core-concepts-agent-knowledge-toolsUC#1 — reworked the creation flow to demonstrate moving between Copilot Studio's two experiences, with authentic screenshots. Copilot Studio's default-on New experience replaces the Home "What would you like to build?" describe textbox with Agent / Workflow cards. Rather than framing this as a blocker, UC#1 now presents switching as a skill: a NOTE explains Copilot Studio has two experiences you can move between at will, then the learner turns the New experience toggle off (the Switch back to the previous experience? dialog — reason optional, just select Switch back) to reach the describe-driven creation, enters the agent description, waits for provisioning, names the agent Copilot Studio Assistant, and Saves it — and then switches back to the new experience (via the Try now banner or the toggle) to do all remaining authoring (knowledge, tools, topics). Creating in the previous experience yields a classic agent that retains Topics (used in UC#4) plus auto-generated instructions, and the round trip is framed as the intended workflow rather than a workaround. Adds six screenshots — new-experience Home (Agent/Workflow cards), the switch-back dialog, the previous-experience describe Home, the description being entered, the provisioned agent, and the Try now banner that returns you to the new experience — under a newlabs/core-concepts-agent-knowledge-tools/images/folder (the lab previously had no images).mcs-orchestrationUC#3 revamped to "New Orchestrator – Agentic Reasoning Loop" (New experience). Under Copilot Studio's default-on New experience, UC#3 no longer builds a classic agent with the experimental Enhanced Task Completion toggle. It now builds a new-type agent (whose native orchestrator is the Agentic Reasoning Loop that ETC previewed) via the New Agent button, attaches the gifting-policy knowledge (SharePoint / Work IQ) plus the Weather (Maker auth) and Microsoft Dataverse MCP Server tools, and runs the weather / Texas-accounts / gift-recommendation-within-policy prompt set against the Preview pane's inline train of thought. The section is renamed and reframed throughout the lab (TOC, overview, concepts table, summary), the per-tool Maker vs User authentication step is called out (Weather must be Maker or it returns a "Connection Required" card). The email-draft step and the Work IQ Mail tool were dropped (Work IQ Mail Preview is not reliably working), so the use case now culminates in the multi-tool gift recommendation that stays within the gifting policy. Adds authenticnew-orch-*screenshots; the classic/ETC UC#3 screenshots (image-44…image-60) are no longer referenced.mcs-orchestrationUC#3 — new-UX procedural detail filled in from a live run. Documents the exact New-experience mechanics validated end-to-end against a fresh workshop user: a tool is configured by clicking its name in the right-rail Tools list (no separate settings button — the name opens Details / Inputs / Outputs); the Weather tool's Units input is switched from AI to a bound Value variable via the picker's + Add variable → chevron (the lab usesI/ Imperial, with a note that users may chooseC/ Celsius for their preference); the Dataverse MCP connection is reused when one already exists from an earlier lab, and on Review capabilities you keep the default selection and Confirm (the lab only ever exercisesread_queryandsearch); and the train-of-thought inspection step is reworded so it's clear any trace step is expandable — theread_querySQL shown is just one example. UC#3 is also reordered so the tools are attached before the knowledge source, and the tools intro's stale "three tools" is corrected to "two" (Work IQ Mail having been dropped); and a placeholdernew-orch-03bimage reference (no file behind it) is removed from the Units step.- Module rows no longer render blank in the in-lab agenda popover. The event-nav manifest (
_includes/event-nav/manifest.html) only emitteditem.titlefor non-lab schedule rows, so anytype: modulerow whose agenda omitted an explicit title (i.e. relied on the module entity's own title) appeared as a time with no label in the rail's expandable agenda. The manifest now resolves module rows against the_modulescollection — emitting the module'stitle,slug,url, andduration— mirroring how lab rows are enriched, so the full agenda renders and module rows are clickable. - Table CSS in
assets/css/main.scss— three site-wide rendering bugs. (1) Headerthhorizontal padding now uses1.25emto compensate forfont-size: 0.8emso cells line up withtbody td(was 11.264px header / 14.08px body — now both 14.08px). (2) Row separators switched fromvar(--color-bg-elevated)tovar(--color-divider)for better dark-theme contrast (the elevated tone was nearly invisible against the dark page bg). (3) Tables now declaredisplay: table; width: 100%to override the upstream minimal-mistakesdisplay: blockso cells stretch to fill the content column instead of shrinking to the longest line and visually stopping short of the heading rule.
- Inline
codeis now readable in Dark / High-Contrast themes site-wide. Minimal-mistakes'_page.scsshardcodes.page__content :not(pre) > code { background: $code-background-color }(≈ #fafafa) at SCSS compile time, so inline-code pills stayed near-white in non-light themes — most visibly theUS/UKchips on the Multi-Agent lab UC#2 rendered as invisible white boxes in Dark mode. Added a same-specificity override inassets/css/main.scssthat routes both background and text through--color-bg-elevatedand--color-fg-strong(plus a subtle border) so the pills stay legible across Light, Dark, and HC. - Site-wide ordered-list numbering — only headings reset numbering. Across 22 lab files (361 line edits) flush-left or under-indented (0–2 space) images, blockquotes (incl.
> [!IMPORTANT]/[!TIP]/[!NOTE]), code fences, and bullet lists between two1.ordered-list items in the same heading scope were re-indented to 4 spaces so they nest under the preceding step. Kramdown auto-numbering now flows continuously within each####section. Notable: Multi-Agent UC#3 (Ensure indexes are in place) had a missing period on1 In the left menu..., multiple flush-left images, and a section-leading IMPORTANT block at 4-space indent (rendered as a code block) — all corrected.
- GitHub-flavored alert callouts (
> [!IMPORTANT]/[!TIP]/[!NOTE]/[!WARNING]/[!CAUTION]) now render as styled callouts site-wide. Kramdown leaves these as plain blockquotes with the literal[!TYPE]marker text, which had been showing as raw text inside an unstyled blockquote across every lab. Newassets/js/github-alerts.js(loaded from_includes/footer/custom.html) walks.page__content blockquotes on page load, strips the marker, tags the element withgithub-alert github-alert--<variant>, and inserts a.github-alert__headerlabel. Matching CSS inmain.scsspaints each variant with its own accent (Note = brand blue, Tip = success green, Important = purple, Warning = amber, Caution = red), routes through theme tokens for Light / Dark / HC compatibility, and bumps accent intensity in Dark mode for legibility on--color-bg-elevated.
- Lab-intro slide overviews + timer alignment across all lab decks. Every lab-intro slide now carries a 3-bullet "what you'll learn" overview text box at a uniform position (L=2.84", T=4.39", W=8.80", Segoe UI 24pt, auto-fit, gold-standard from Agent Builder Lab 1), and the timer chip group (Timer label + duration text + background) sits in the same top-right anchor (
Timerat L=10.20"/T=0.45", duration at L=9.44"/T=1.01"). Durations match each lab's actual length per_data/lab-config.yml— fixed Labs 3, 6, 9, 11 which previously displayed the wrong minute count. The Orchestration deck (Module 8) and Multi-Agent deck (Module 13) gained brand-newLab: …intro slides inserted before their existing recap slides; both reuse the layout of an adjacent slide so they blend with the deck. Applied to bootcamp decks 01, 02-04, 06, 07, 08, 09, 11, 13, 14 and the duplicates in mcs-in-a-day (01, 02-04). - Bootcamp Host Deck — V2.1 schedule + cleanup. Day 1 / Day 2 / Day 3 agenda tables (slides 6, 7, 8) rewritten to match
_data/agendas/bootcamp.yml, replacing the stale schedule that still referenced Module 12 SDK and the old "Azure Integration" slot for Module 15. Six duplicate / outdated schedule slides removed (slides 21, 24, 36, 39, 42, 43), shrinking the deck from 43 to 37 slides. Theme, master and template untouched — only table cell content updated. - MCS-in-a-day Host Deck — single-day agenda. Slide 6 retitled "Day 1 Agenda" → "Agenda" since this is a one-day event, and the eight schedule slides irrelevant for a single-day flow removed (Day 2, Day 3, plus six duplicates). Deck shrank from 43 to 35 slides; the kept agenda's table content already matched
_data/agendas/mcs-in-a-day.ymlso cells were left as-is. - Module 8 Orchestration — Enhanced Task Completion section recolor. The cyan/teal accent palette in slides 20–28 (the new Enhanced Task Completion section) was remapped to the bootcamp brand pink/blue:
#4CCBED→#C83FB2(vivid pink) and#0B556A→#0078D4(Microsoft blue), matching the recolor rules used on the Module 15 deck. Slides 1–19 and 29–30 untouched. Card fills, body grays, yellow/purple/orange accents, and the template/master are all preserved. - Per-event presentation folders. Decks now live under
presentations/<event_id>/instead of a single flatpresentations/directory. Each event folder is self-contained — decks shared between events are duplicated in each so the agendas can list the same deck at different slot numbers without collisions. The Host Deck is shared acrossbootcamp/andmcs-in-a-day/and is renamed from the bootcamp-specific "00. Host Deck - Copilot Studio Architecture Bootcamp.pptx" to a generic "00. Host Deck.pptx". Allslides:paths in_data/agendas/bootcamp.ymland_data/agendas/mcs-in-a-day.ymlwere updated to point into the new subfolders. The slides URL-rewrite block in_layouts/event.htmlis path-prefix-agnostic so it picks up the nested structure unchanged. Resolves the V2.1 collision where bootcamp's 15. Skills for Copilot Studio and mcs-in-a-day's 15. Licensing both lived as15.-prefixed siblings in the flat folder. - Archived decks no longer in any agenda.
12. SDK_CB.pptx(dropped from the V2.1 bootcamp agenda — Module 12 is no longer a session) moved topresentations/archived/SDK_CB.pptx. Archived decks lose their leading order numbers since they no longer correspond to an agenda slot.
- Bootcamp Day 2 evening event title corrected: Networking HH → Networking and Happy Hour in
_data/agendas/bootcamp.ymlso the rendered agenda no longer abbreviates the social-hour label.
-
Lab Assistant discoverability boost. The right-edge pull tag now paints in the brand accent color (was muted gray on white) and pulses once per session on first appearance — a one-time visual cue that fades away after the user has seen the assistant. A speech-bubble nudge balloon also fades in next to the tag on the first visit per browser session, introducing what the assistant can help with: "Hi! I can help you get your account, find labs, or troubleshoot setup." The nudge is dismissable via × or by clicking its body (which also opens the chat); clicking the tag itself dismisses the nudge too, since the user has now found the assistant. Both the pulse and the nudge gate on
sessionStorage['mcs-labs.assistant-pulse.v1']and['mcs-labs.assistant-nudge.v1']so returning visitors aren't nagged. The pull tag is now reachable on phones too — the previous@media (max-width: 480px) { .wc-tag { display: none; } }rule has been dropped. -
"Request account" CTAs. A small accent-colored pill in the masthead and a distinct success-green button in the home hero (next to Browse all events / Browse all labs), each opens the chat panel via
data-wc-account-ctaso users on the home or any page can reach the assistant directly when they're trying to get a Microsoft 365 account. The masthead pill is hidden below 480 px to keep the nav compact; the hero button goes full-width on mobile. -
Back-to-top button on lab pages. A floating accent-colored button at the bottom-right of the viewport appears once the user has scrolled past 400 px and smooth-scrolls to the top on click. Hides while the chat panel is open so it doesn't fight the panel for the bottom-right corner. Sized at 44×44 on desktop, bumped to 48×48 with 16 px inset on mobile (≤ 640 px) for a comfortable tap target. Lab layout only.
-
Design tokens for success-color text and hover. New
--color-on-successand--color-success-hovertokens in_tokens.scssacross all four palettes (Light / Dark / HC / system) so success-themed surfaces (currently the hero "Request an account" button) follow the active theme instead of hardcoding white-on-dark-green. -
Event-aware navigation. Labs opened from an event page now show an in-lab rail below the header with the event name,
Lab X of Yposition, Previous / Next lab buttons, and an expandable agenda popover. A matching pair of Previous / Next cards renders at the bottom of the lab. Breadcrumbs override toHome / Events / <Event> / <Lab>when an event context is active. Event context sticks viasessionStorage['mcs-labs.event-context.v1']so the user keeps in-event navigation even when they click internal links that don't carry?event=. -
Event agenda data model (
_data/agendas/<event_id>.yml). Each event can now declare a full schedule with labs, sessions, breaks, and external links. The event detail page renders this as a timeline; non-lab items (welcome, Q&A, lunch, etc.) display inline. Events without an agenda file fall back to the existinglabs:array — no migration required. -
Slides download chips on session rows. Session entries in an agenda can declare
slides:pointing to a file in/presentations/; the event timeline renders a small accent-tint "Slides" chip below the session title that downloads the deck when tapped. Wired to all Bootcamp + MCS in a Day modules. -
Homepage "Browse all labs →" link replacing the Learning paths grid.
-
Accessibility settings menu in the masthead: theme switcher (Light, Dark, High contrast, Match system) and 3-step text size (A−, A, A+). Preferences persist in
localStorageundermcs-labs.prefs.v1. A pre-paint inline script applies the stored theme before CSS loads, preventing any flash of wrong theme on reload. -
Dark-mode Rouge syntax highlighting (Monokai-like palette) and high-contrast code blocks under
[data-theme="hc"]. -
Design-token layer (
assets/css/_tokens.scss): all site colors now resolve through CSS custom properties with Light, Dark, and High contrast palettes plus aSystemoption that followsprefers-color-scheme. -
Global
prefers-reduced-motionblock that neutralizes panel slide, typing-dot pulse, and send-button transitions for motion-sensitive users. -
Continuous a11y coverage on pull requests:
pa11y-ciat WCAG 2.1 AA (.github/workflows/a11y.yml,.pa11yci.json) and Lighthouse CI requiring an accessibility score ≥ 95 (.github/workflows/lighthouse.yml,lighthouserc.json).
- Event-rail repainted with the brand accent + theme-aware text. The in-lab event navigation rail (event name, Lab X of Y pill, Prev / Next / agenda buttons) now uses
var(--color-accent)as the background andvar(--color-accent-on)for every text and tint, so it recolors automatically under Light / Dark / HC. Translucent surfaces (hover background, position pill, expanded-agenda toggle) usecolor-mix(in srgb, var(--color-accent-on) X%, transparent)so they stay tinted relative to the foreground. Bolder labels (font-weight 700) andstroke-width: 2.5on chevrons for legibility against the lighter dark-theme accent. Disabled buttons (e.g. Prev on Lab 1) drop saturation but keep the hue viacolor-mixinstead of blanketopacity: 0.4, so they read as part of the same surface. - Event navigation is now sticky. The × button that exited the event context has been removed (CSS
display: none; the JS handler reference stays intact). Once a learner enters via?event=, the rail and breadcrumb stay through the lab path until the session ends or they navigate away from event-linked pages. - Masthead stays full-width when the Lab Assistant is open. Previously the body's
padding-right: 480px(applied at ≥ 1024 px when the panel is open) also squeezed the masthead, triggering the greedy-nav to collapse links into the More overflow menu. The masthead now gets a compensatingmargin-right: -480pxso the nav links stay visible. Page content below still shifts left for the panel as before. - Lab Assistant chat persists across in-tab page navigation using
sessionStorage(no cookies). Token, Direct Line conversation, and transcript are preserved; state clears when the tab closes. Open/closed panel state also survives navigation. - Lab Assistant panel no longer overlaps the site masthead on small screens — panel top now tracks the masthead's live height.
- Lab Assistant now shifts main content instead of overlaying it at viewports ≥ 1024 px. Below 1024 px the panel continues to overlay; at 1440 px+ both the TOC and the panel stay on-screen. The TOC collapses when the panel is open between 1024–1440 px to keep the content column readable.
- Lab Assistant pull-handle is now a native
<button>; gains automatic keyboard activation and focus semantics. - Pinned
minimal-mistakes-jekyllto= 4.27.3to protect the new_includes/masthead.htmlshadow from silent upstream drift.
- Duplicate title + description block hidden at the top of every lab. Lab markdown files repeat
# <Title>and the description right after the front matter — between two---rules — which produces a leading<hr><h1><p><hr>quartet inside.page__content. The colorful.lab-headerabove already renderspage.title+page.description, so this prefix was duplicate content. A:has()-based CSS rule in_layouts/lab.htmlhides the four elements when the pattern matches; labs that don't follow the convention are untouched. Markdown content is unchanged. - Inline "## Table of Contents" section hidden in labs. The right-sidebar On this page nav already provides the same navigation, so the inline TOC was duplicate scaffolding. Hidden via CSS targeting
h2#table-of-contentsplus the list and trailing<hr>. The corresponding Table of Contents entry in the sidebar nav is also hidden via.toc__menu li:has(> a[href="#table-of-contents"])so the auto-built sidebar doesn't surface it either. - Cross-lab prerequisite links across
_labs/*.mdwere rendered as../<slug>/README.md, which 404s on the deployed Jekyll site (labs/*/README.mdis excluded from the build per_config.yml). Replaced with Jekyll-canonical{% link _labs/<slug>.md %}form so they resolve to the live lab page URL. Touched_labs/agent-builder-sharepoint.md,_labs/core-concepts-analytics-evaluations.md(two links), and_labs/core-concepts-variables-agents-channels.md(#274). core-concepts-analytics-evaluationslab: standardized terminology to "test method" to match the Edit test case panel in the current Copilot Studio UI. Renamed the Core Concepts entry from Evaluation Methods → Test Methods with a note that older docs use the prior name. Updated five inline references (Summary of Targets, Use Cases table, UC#2 sub-table, General Quality description in UC#3 results, Choose Test Methods Wisely and Test Methods Matter lessons-learned bullets). Left the Evaluation Test Sets concept and headings unchanged — those still match Copilot Studio's "evaluation" / "evaluations" labels (#174).agent-builder-m365lab Use Case #3 Deep analysis with the Researcher agent: corrected the Researcher panel location from "right-side panel" to "left-side panel" (line 567); converted hardcoded list markers (2.,3.,4.,5.,6.,7.,8.) to Markdown's auto-numbered1.so each sub-section's list renders cleanly instead of restarting awkwardly across####headings (#238); added a NOTE under Prompt 1 warning learners that Researcher may ask a follow-up about report length and that replyinggo aheadaccepts the default (#236); added a step under Prompt 2 calling out the Convert to menu (Infographic / HTML / YAML / C# / etc.) so learners discover that capability.autonomous-account-newslab UC#4: renamed the global variables fromsearchResultsandrelevantNewsForOpportunities(which collided with same-named topic input variables and tripped Copilot Studio's "variable name already exists" validation) toglobalSearchResultsandglobalRelevantNewsForOpportunities. Updated the YAML snippets and all laterGlobal.*references throughout the lab. Tightened the "select Formula, then type Topic.Formula" set-variable wording (which implied a non-existentTopic.Formulavariable) to "click the fx (formula) option and enterTopic.<name>." — and added a TIP explaining the global/topic same-name validation rule (#216, #217).agent-builder-m365lab Use Case #1: removed the "If the proposed agent has a name other than Copilot Teacher…" conditional. Beginners had no way to check the proposed name yet (the Configure tab where the name is visible isn't introduced until later in the lab), so the conditional was unanswerable. Step is now unconditional — applying the prompt is harmless if the proposed name was already correct (#284).agent-builder-m365lab Use Case #1: split the dual-URL knowledge-source prompt ("Use … and … as knowledge sources") into two sequential single-URL prompts. Agent Builder was observed to register only one of the URLs when both appeared in a single prompt; splitting them is reliable per the reporter (#283).core-concepts-variables-agents-channelslab UC3: the Channels page entry was renamed from "Teams and Microsoft 365 Copilot" to "Microsoft 365 and Microsoft Teams", and the "Turn on Teams" / "Enable" control was replaced with a "Make agent available in Microsoft 365 Copilot" checkbox. Updated the Channels page reference, replaced the obsolete activation step with the checkbox action, and inserted the previously-missing step to re-select the channel after the in-panel publish so the activation flow makes sense (#285).core-concepts-analytics-evaluationslab: prerequisites previously claimed "even test conversations count for analytics data" — they don't. Rewrote the prereq to require a published agent used through a deployed channel, and added a NOTE clarifying that test-canvas conversations may not populate analytics so learners can prep their data before Use Case #1 (#287).core-concepts-analytics-evaluationslab: Use Case #2 Manually Create Test Cases from Test Canvas — removed the obsolete "Select New evaluation" and "In More ways to start, select Use your test chat conversation" steps that no longer match the current UI (Copilot Studio now jumps straight from Evaluate to the new test-set view). Renumbered the surviving "Change the test set name" step from a leftover hardcoded21.to a continuous1.so the rendered list flows cleanly. Added a NOTE explaining the UI change for learners following older instructions (#286).mcs-toolslab: replaced four occurrences of "Turn off / disable Use general knowledge" with "Turn off / disable Allow ungrounded responses" to match the renamed Copilot Studio toggle. Updated surrounding NOTE / "Lessons learned" lines to use the new toggle name; left a brief historical reference to the prior label in one NOTE so existing learners can match what they remember (#288).mcs-governancelab: Yellow Zone (Part 2) and Red Zone agent-creation flows previously told learners to "double-check that the correct Solution is selected" before any Solution had been created in theBootcamp Yellow/Bootcamp Redenvironments — Solutions are environment-scoped, so the Green Zone Solution was not available. Mirrored the Green Zone pattern by inserting a Create a Solution sub-section in each zone (using the same<username>naming convention) and rewording the agent-creation step to "select the Solution you just created" (#289).- Lab Assistant greeting-card "topic starter" tiles (Product / Pricing / How-To) were unreadable in Dark and High-contrast themes — Adaptive Card SDK baked a near-white inline
background-coloron the tile while the site's.ac-textBlockoverride forced the label to white, producing white text on white. Repaint the tile with--color-bg-elevatedin Dark / HC / system-dark and invert the bundled monochrome tile icons so they stay visible. - Restore lab content overwritten by the redesign merge (PR #265). The
_labs/*.mdcollection was frozen at 2026-03-06 and missed subsequent content PRs (#215, #224, #225, #234, #242, #244, #245, #248, #249, #250, #251, #252, #253, #254, #255, #256, #257, #258). Rewrote every lab body from the authoritativelabs/*/README.mdsource. - Re-apply PR #246 orphan-lab removal: delete
public-website-agentandask-me-anything-30-mins(lab files and navigation entries) that returned after the redesign merge. - Secondary-gray text tokens (TOC titles, timestamps, placeholders, hints) darkened to pass WCAG 2.1 AA contrast; previously several fell between 1.8:1 and 3.3:1.
- Visible keyboard focus ring on the Lab Assistant send input; previously
outline: none !importantstripped it with no fallback. - Lab Assistant decorative SVG icons now carry
aria-hidden="true" focusable="false"so screen readers skip them. - Lab Assistant send input is now associated with a
<label>(Message Lab Assistant) — placeholder alone was not sufficient for assistive tech. - Lab Assistant panel announces with
role="dialog"+aria-labelledbyand exposesaria-expandedon its trigger; previously announced as a generic complementary region with no expanded state.
- Presentation decks added to presentations folder (#227)
- Presentations folder structure (#205)
- Optional Work tab experience steps to agent-builder-m365 lab (#190)
- Bug Bash guide for reporting lab issues (#151)
- Report Issue button to site navigation (#152)
- mcs-governance lab, mcs-in-a-day-v2 event (#149, #150)
- Required solution files for labs (#145)
- New ALM consolidated lab combining setup-for-success and pipelines (#143)
- Copilot Studio Tools lab (#142)
- Dataverse MCP Connector lab (#140)
- New Component Collections lab (#139)
- Dataverse search steps (#137)
- Copilot Studio bootcamp labs (#129)
- Use README as source of truth for lab durations (#161)
- Update BUG-BASH.md portal link to point to bootcamp event page (#160)
- Refine instructions for Copilot Studio agent creation (#157)
- Updates from testing (#155, #156)
- Update component collection name and contents in Component Collections lab (#147)
- Update root README with all labs (#146)
- Update core-concepts-variables-agents-channels from testing (#144)
- Update multi-agent lab copy (#128)
- Update licensing guide and file size (#130)
- Refactor core concepts into three focused labs (#131)
- Fix note callout formatting in governance lab (#199)
- Revise prompt for visual sales chart in README (#169)
- Refine summary of prompt in README (#170)
- Update governance lab agent URLs and fix Dockerfile multi-arch support (#197)
- Add missing mcs-governance lab to README table (#154)
- Fix mcs-ALM 404 by renaming folder to lowercase mcs-alm (#153)
- Fix grammar and spelling throughout multi-agent lab (#138)
- Restore multi-agent indexing (#136)
- New multi-agent lab (#122)
- Human-in-the-loop lab — expense claims with approvals (#118)
- Setup-for-success added to buildathon 1-month journey (#113)
- Workflow concurrency controls (#112)
- Update top-level docs for multi-agent lab (#124)
- Multi-agent lab: Remove indexing instructions (#123)
- Update bootcamp docs (#119)
- Update AI builder labs (#111)
- Add .gitignore for data config (#121)
- Fix typo in lab instructions (#120)
- Add tip to Ask Me Anything lab (#116)
- Fix minor typos (#110)
- Simplified single-source configuration format (ADR-012)
- Labs now defined once in
labs:section with all properties (title, difficulty, duration, section, order, journeys, events) - Adding a new lab requires ONE entry instead of 3-6
- Automatic conversion layer maintains backward compatibility with Jekyll templates
- Labs now defined once in
- Enhanced configuration audit in Check-LabConfigs.ps1
- Duplicate lab ID detection
- Journey card vs left navigation count validation
- Multi-line YAML array parsing support
- Agent Academy external lab integration
- Links to microsoft/agent-academy Recruit Level curriculum
- 13-lesson curriculum covering agents, LLMs, and deployment
- YAML export function in Generate-Labs.ps1
- Serializes converted config to
_data/for Jekyll templates - Handles PowerShell hashtables, arrays, and List types
- Serializes converted config to
- Rebranded "Copilot Studio Lite" to "Agent Builder in Microsoft 365"
- Renamed lab folder
copilot-studio-lite→agent-builder-m365 - Updated all lab titles, descriptions, and references across the codebase
- Updated Microsoft docs links to new URL slugs
- Renamed lab folder
- Generate-Labs.ps1 now calls Check-LabConfigs.ps1 directly instead of embedding audit logic
- Order numbering scheme updated to 100-699 range (all 3-digit)
- NEW_LAB_CHECKLIST.md simplified to reflect single-entry workflow
- Duplicate lab counting in card vs nav validation (reset currentLab after section exit)
- List type serialization in YAML export (handles System.Collections.Generic.List)
- External lab order not being applied (was always 999, now reads from config)
- Events dropdown navigation system for improved scalability (#89)
- Replaced flat event links with collapsible dropdown in header
- Added support for 5 events: Bootcamp, Azure AI Workshop, MCS in a Day, Agent Build-A-Thon (1 day), Agent Build-A-Thon (1 month)
- Implemented JavaScript toggle behavior (click, outside click, ESC key)
- Added ARIA attributes for accessibility
- Two new Build-A-Thon event pages (#89)
- Agent Build-A-Thon (1 day) with 2 labs
- Agent Build-A-Thon (1 month) with 8 labs including autonomous AI agents
- Event context banner system (#89)
- Dynamic banner shows current event context when viewing labs with
?event=parameter - Left navigation title changes to "Event Navigation" in event context
- Dynamic banner shows current event context when viewing labs with
- Comprehensive CHANGELOG.md documenting project history from June 2025 to present (#90)
- Improved button styling across all theme variants (#89)
- Added
--text-on-accentCSS variable to Rich and Minimal themes - Fixed text contrast issues in all 4 theme combinations
- Added
- Button text contrast issues across all 4 theme variants (#89)
- Duplicate emoji display in event context banner (#89)
- Guild Hall Custom MCP lab with Windows curl syntax (#54, #78, #81, #86)
- PR merge verification step in workflow documentation (#76)
- Updated BYOM lab to focus on Chit Chat Generator with grok-3-mini (#80)
- Switched Azure AI Workshop lab order - Data Fabric Agent now Lab 4, Guild Hall MCP now Lab 5 (#79)
- Enhanced Dataverse MCP connector lab content (#77)
- TOC regex capturing all content after horizontal rules (#85)
- TOC anchors with emoji headings preserving leading dashes (#84)
- Minor formatting and clarification improvements (#83)
- Broken image references and Azure region updates (#82)
- Standardized lab resource placeholders in contract-alerts-azure-ai (#87)
- MCS in a Day event page with unified event system (#67)
- Automated lab configuration auditing system (#74)
- Copilot Studio Lite progressive learning lab (#63)
- Enhanced BYOM lab with screenshots and improved instructions (#75)
- Consistent header layout between rich and minimal themes (#75)
- Correct image filename reference in dataverse-mcp-connector lab (#75)
- Bring Your Own Model (BYOM) lab (#65)
- Contract Alerts Azure AI lab with Azure setup reference and accessibility improvements (#64)
- Automated H2-only TOC generation with truncation bug fix (#66)
- Data Fabric Agent lab with CSS improvements (#55)
- Removed duplicate script block causing redundant function definitions (#56)
- Escaped pipes in markdown link text to prevent table parsing (#59)
- Added missing HTML comment opening tag in default layout (#60)
- Updated callout wording in dataverse-mcp-connector lab (#61)
- Guild Hall MCP lab (#54)
- Markdown detection feature and improved fenced code block formatting (#52)
- Complete apostrophe spacing resolution with Kramdown configuration (#50)
- Apostrophe spacing issues in HTML rendering (#48)
- Comprehensive bootcamp navigation system with section filtering (#45)
- Enhanced lab instructions for Lab 4 and other bootcamp labs (#46, #47, #49)
- Scroll-to-top button on lab pages (#42)
- Web portal link to README for better user experience (#43)
- Complete theme system overhaul with major infrastructure cleanup (#41)
- Hide lab numbers from both lab cards and left navigation (#44)
- Major navigation fixes and UX improvements for lab browser (#39)
- Comprehensive documentation pipeline for GitHub Pages enhancement (#37)
- Markdown formatting issues in autonomous-account-news lab (#38)
- Revised Dataverse connector configuration (#36)
- Updated autonomous lab instructions (#34, #35)
- Revised topic addition steps in README (#33)
- 30-minute version of Ask Me Anything lab (#33)
- Updated labs to add tips and place Teams chat as extra challenge (#32)
- Revised Nova AI setup and interaction instructions (#28)
- Clarified connector names and commit message examples (#27)
- Updated agent configuration and file handling instructions (#26, #25)
- Fixed URLs and improved step instructions (#29)
- Updated CUA lab to use hosted browser instead of hosted machine (#24)
- Renamed "Agent Builder" to "Copilot Studio Lite" (#23)
- Modified Excel knowledge to file upload in contract alerts lab (#22)
- August retrospective updates for workshop agent (#21)
- Replaced poem by city in lab content (#15)
- Documentation updates and README improvements (#13, #14)
- Autonomous agents with CUA lab (#12)
- MCP Qualify Lead lab (#11)
- Standard Orchestration lab (#9)
- MBR prep SharePoint agent lab (#7)
- Account news autonomous agent lab (#4)
- Blockquote formatting (#5)
- Added Microsoft SECURITY.MD (#2)
- Initial repository setup with Microsoft mandatory files
- Agent Builder Web lab
- Ask Me Anything lab
- Setup for Success lab
- Lab template for contributors
- Journey-based navigation (Quick Start, Business User, Developer, Autonomous AI)
- Multi-theme system (Rich/Minimal × Light/Dark)
- Automated PDF generation from markdown
- Docker-based development environment
- PowerShell automation scripts for lab generation
- README with project overview and setup instructions
- LICENSE file