Add Copilot Credits estimates to Recruit NextGen - #3204
Add Copilot Credits estimates to Recruit NextGen#3204Daniel Laskewitz (Laskewitz) wants to merge 4 commits into
Conversation
Add a `credits` frontmatter field (a `[min, max]` range) to every recruit-nextgen mission, and surface it in two new components: - `<mission-credits />` renders a mission's range in a callout box under the mission metadata, with a link to the full breakdown. - `<course-credits section="..." />` sums both ends of the range across a course and accepts markdown slot content for course-specific context. Missions that actually consume credits (04, 06, 07, 08) end with a "Copilot Credits Estimate" section that classifies every agent task against the published bands in the Copilot Credits Guide, so the numbers are auditable rather than arbitrary. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6dd274bf-4ec9-4b64-ae33-9ddcc5324ffa
Both branches inserted a new frontmatter key after `time:` on every recruit-nextgen mission. Kept both: upstream's `harness` and this branch's `credits`. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6dd274bf-4ec9-4b64-ae33-9ddcc5324ffa
There was a problem hiding this comment.
Pull request overview
Adds frontmatter-backed Copilot Credits estimates for Recruit NextGen missions and the course overview.
Changes:
- Adds mission credit ranges and course-level aggregation.
- Adds mission and course credit components.
- Documents credit metadata and updates licensing links.
Reviewed changes
Copilot reviewed 19 out of 20 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Summary | Review notes |
|---|---|---|
docs/recruit-nextgen/index.md |
Adds course-level credits estimate. | — |
docs/recruit-nextgen/course-completion-badges-recruit/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/09-understanding-licensing/index.md |
Adds estimate metadata and updated guide links. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/08-publish-your-agent/index.md |
Adds credit estimate and breakdown. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/07-automate-with-workflows/index.md |
Adds credit estimate and breakdown. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/06-add-skills/index.md |
Adds credit estimate and breakdown. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/05-add-tools/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/04-build-a-custom-agent/index.md |
Adds credit estimate and breakdown. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/03-creating-a-solution/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/02-copilot-studio-fundamentals/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/01-introduction-to-agents/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/recruit-nextgen/00-course-setup/index.md |
Adds zero-credit metadata and callout. | Nit (2 votes): update stale last-edited-date. |
docs/.vitepress/theme/index.ts |
Registers the new components. | — |
docs/.vitepress/plugins/missions/missions.d.ts |
Extends mission data typing. | — |
docs/.vitepress/plugins/missions/index.ts |
Parses and exposes credit metadata. | Moderate (4 votes): validate the raw array as exactly two numeric, non-negative entries. |
docs/.vitepress/plugins/mission-meta/MissionMeta.vue |
Aligns metadata pills vertically. | — |
docs/.vitepress/plugins/credits/MissionCredits.vue |
Renders mission estimates. | Moderate (2 votes): reject malformed raw credit entries before filtering. Nit (3 votes): use a neutral explanation for zero-credit missions. |
docs/.vitepress/plugins/credits/CourseCredits.vue |
Calculates and renders course totals. | — |
CONTRIBUTING-COURSES.md |
Documents credit metadata and components. | — |
.markdownlint.jsonc |
Allows the new custom components. | — |
Suppressed comments (5)
docs/recruit-nextgen/04-build-a-custom-agent/index.md:374
- The lab explicitly warns that natural-language authoring during agent creation consumes Copilot Credits, but this row classifies the creation work as free Build-tab configuration. That leaves the advertised
200 - 600range and frontmatter missing a billable creation task; include an estimate for that authoring conversation using the guide's authoring rate, or remove that authoring step from the lab.
| Naming the agent, pasting instructions, adding four knowledge sources, and setting the greeting | Build-tab configuration | 0 |
docs/recruit-nextgen/04-build-a-custom-agent/index.md:376
- The preceding steps ask for VPN and Guest Wi-Fi in one prompt and explicitly describe separate VPN and Guest Wi-Fi response sections, so this has two outputs under the table's own Medium definition ("two or more outputs"). Labeling it Light makes the published range internally inconsistent; either classify it as Medium and update the frontmatter/total, or clarify why a two-section answer is still Light.
| Preview test: VPN access and Guest Wi-Fi details | Light. Grounded in SharePoint and the uploaded document, still a single answer | 100 - 300 |
docs/recruit-nextgen/06-add-skills/index.md:647
- The documented first test can make an initial SharePoint call with a guessed column name, then retry after correcting it in
field_4(the lab explicitly describes this recovery). Saying this is always one successful tool call makes the auditable breakdown inaccurate; mention the possible retry or adjust the estimate.
| First device guidance test, before the skill is refined | Light. One SharePoint tool call returning a device list | 100 - 300 |
docs/recruit-nextgen/07-automate-with-workflows/index.md:700
- This cancellation path still invokes the v1.0.4 skill to look up and present available devices before the user selects
B; it only skips the workflow after the cancellation. The current description says the agent simply ends the session, so the audit table understates what the learner runs.
| Test three: cancelling the request | Light. The agent ends the session without running the workflow | 100 - 300 |
docs/recruit-nextgen/08-publish-your-agent/index.md:219
- Mission 08's test activities run in Teams and Microsoft 365 Copilot, not in Preview. This sentence therefore describes a different activity than the two rows being estimated; please refer to the published-channel tests here (or explicitly include Preview) so learners understand what the 200–600 range covers.
So this mission's cost is essentially the cost of the agent tasks you run in **Preview**. The guide bands runtime usage by how much work a task involves:
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Reject malformed `credits` frontmatter instead of coercing it. The old parser filtered invalid entries out before the length check, so `[100, null]` rendered as `0 - 100` and `[100, "oops", 300]` as `100 - 300`. Validation now happens on the raw entries. - Share that parser between the missions Vite plugin and `MissionCredits.vue` so the two can't drift. - Use neutral wording for zero-credit missions. The old text claimed the mission was reading and manual configuration only, which is wrong for the badge page. - Refresh `last-edited-date` on every touched mission, as the course guide requires. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6dd274bf-4ec9-4b64-ae33-9ddcc5324ffa
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 20 out of 21 changed files in this pull request and generated 1 comment.
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
docs/recruit-nextgen/08-publish-your-agent/index.md:219
- This explanation says the mission's cost is essentially the work run in Preview, but Mission 08 never asks the learner to use Preview: its two counted conversations run in Teams and Microsoft 365 Copilot (steps 8.2 and 8.3). That makes the derivation misleading for this mission; describe the published-channel tests here, or use wording that covers all runtime surfaces.
So this mission's cost is essentially the cost of the agent tasks you run in **Preview**. The guide bands runtime usage by how much work a task involves:
docs/.vitepress/plugins/credits/parseCredits.ts:26
- Because
nullis also the representation for an omitted field, a malformed value such as[100, "oops"]is silently treated as no estimate.loadMissionsandCourseCreditsthen exclude that mission, so a typo can understate the course total without any build-time signal. Please validate or report invalid frontmatter with its file path instead of collapsing it intonull.
if (nums.some((n) => !Number.isFinite(n) || n < 0)) return null;
Sorting the two entries turned a typo like `credits: [600, 200]` into a valid-looking `200 - 600`. A reversed range is a metadata error, so it now returns null like any other malformed value. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6dd274bf-4ec9-4b64-ae33-9ddcc5324ffa
Why
Learners starting the Recruit NextGen path had no way to know what it would cost them in Copilot Credits before they began. The GitHub Copilot harness bills usage-based, and the B2E billing exception for licensed Microsoft 365 Copilot users does not apply, so someone can get halfway through the path and run out of capacity. This adds an up-front, auditable estimate at both the mission and the course level.
Approach
A new optional
creditsfrontmatter field on missions holds a[min, max]range. Two new components render it:<mission-credits />sits directly under<mission-meta />on every mission and shows that mission's range in a callout box. Missions that consume credits link to their full breakdown; missions that are purely reading or Build-tab configuration say so explicitly.<course-credits section="..." />sums both ends of the range across a course and renders the same box on the course overview page. It accepts markdown slot content, which is how the "this path consumes Copilot Credits" explanation now lives inside the box rather than in a separate callout above it.The plumbing goes through the existing
virtual:missions-dataVite plugin, so the course total is derived from the mission frontmatter rather than hand-maintained.Where the numbers come from
Missions 04, 06, 07, and 08 each end with a
## Copilot Credits Estimatesection that shows the work. Two statements from the Copilot Credits Guide drive the whole model:So a mission's cost is essentially the cost of the agent tasks you run in Preview. Every such task is classified against the guide's published runtime bands (light 100-300, medium 300-500), and the low and high ends are summed. That is why the estimates are ranges. The course total lands at 2,100-4,300 credits.
Worth a careful look
aka.msshort link along with the new references.CONTRIBUTING-COURSES.mddocuments the field and both components so future courses can adopt this.This branch also carries an earlier unrelated commit,
Clarify harness and knowledge setup, that was already sitting on it.npm run lint:md,npx cspell, andnpm run docs:buildall pass.