Audience: facilitators, coaches, customer-engagement leads, and event organizers who are running this blueprint as a workshop, RVAS (Real Value Acceleration Solutions), or guided customer engagement.
Participant-facing instructions live in
challenges/. This document is everything around the challenges: timings, pre-flight, coaching, judging, and how to evolve the blueprint after each delivery.
1. What this blueprint is (and isn't)
The Agentic Governance Blueprint for Fabric is an agent-assisted governance framework: a set of repeatable templates, checks, and guided exercises that takes a team from an empty Fabric tenant to a fully governed, PR-driven control plane. It is designed to be delivered repeatedly to different customers and to learn from every delivery.
- ✅ Use it as: a 1-day immersion, a 2-day RVAS, a multi-week customer engagement, or self-paced enablement.
- ✅ Use it to: codify a customer's standards, generate their first auditable artifacts, and seed a long-lived governance repo they own.
- ❌ Don't use it as: a CTF. Solutions are linked from each challenge; coaching the why matters more than withholding the how.
2. Delivery formats
Pick the format that matches the customer's appetite and seniority. Every
format reuses the same challenges/ content; only scope and timing change.
| Format | Duration | Audience | Coverage | Notes |
|---|---|---|---|---|
| Express demo | 90 min | Execs, architects | Walk through 00 + 01 already-provisioned | No hands-on; live narration of an existing PR + run |
| 1-day immersion | 6–7 hrs | Platform + data engineers | 00 → 01 → pick two of 02-08 | Skip Capstone; finish with a guided demo |
| 2-day RVAS | 12–14 hrs | Mixed teams of 3–5 | 00 → 01 → 4-5 of 02-08 → Capstone | Default format; judging + prizes optional |
| Multi-week engagement | 4–8 weeks | Customer platform team | All 10, in real tenant, real workloads | Coach attends weekly working sessions; ends with a customer-owned fork |
| Self-paced enablement | rolling | Individuals | Any subset | Read-only solutions, async coach Q&A |
Rule of thumb: every team needs Challenge 00 done before the clock starts on the actual workshop. Don't burn workshop time on tenant + identity setup unless that's the only learning objective.
3. Pre-event checklist (organizer / coach)
Run this 2 weeks before delivery. The further you can push setup to before the event, the more learning happens during the event.
3.1 Tenant + identity
- Fabric tenant identified, capacity provisioned (F2+; F4+ if you plan to run Challenges 05 or 07).
- One SPN per team or one shared SPN with per-team federated credentials
created. Use the layout in
docs/identity-model.md. - Tenant settings toggled per
docs/setup.md. Allow ≥ 15 min for propagation before you smoke-test. - SPN granted Fabric Administrator and Capacity Admin roles.
- Sensitivity labels (Public/General/Confidential/Highly Confidential) exist in Purview and are scoped to the SPN's publishing group.
3.2 GitHub
- Org for the event chosen; each team will fork into it (or get a pre-created repo with branch protection already configured).
- Repo variables present:
AZURE_TENANT_ID,AZURE_CLIENT_ID,FABRIC_CAPACITY_ID,DEFAULT_OWNER_UPN,LIVE_CHECKS. -
productionenvironment created with required reviewer. - Branch protection on
main: required PR review, requiredvalidatestatus check, CODEOWNERS review, restrict pushes to GitHub Actions.
3.3 Per-participant prerequisites
Send participants one week ahead:
- Microsoft Entra ID account in the event tenant (or guest invite).
- VS Code + GitHub Copilot extension or GitHub Copilot CLI installed.
- Python 3.12+, Git, Azure CLI installed locally.
- Fabric Core MCP and Fabric local MCP installed and authenticated
(see
docs/mcp-and-skills.md). - At least one Skill for Fabric installed (e.g.,
spark-authoring-cli). - Smoke-test prompts from Challenge 00 § Task 8 all return useful answers.
3.4 Coaching capacity
| Cohort size | Recommended coaches |
|---|---|
| 1 team (3–5 people) | 1 coach |
| 2–3 teams | 1 coach + 1 floater |
| 4–6 teams | 2 coaches + 1 floater |
| 7+ teams | 1 coach per 3 teams + 1 lead facilitator |
Coaches should have completed Challenges 00, 01, and the challenges they will shepherd at least once.
3.5 Materials to have on hand
- Latest copy of
docs/troubleshooting.mdopen in a tab. -
docs/glossary.mdprinted or open for newcomers. - Shared chat channel for the event (Teams / Slack / Discord).
- Feedback form link (see § 8).
- Optional: prize / certificate template for the Capstone winners.
4. Sample agendas
Agendas assume Challenge 00 is complete before day 1.
4.1 One-day immersion (6.5 hrs of content + breaks)
| Time | Block | Notes |
|---|---|---|
| 09:00 | Kickoff + Blueprint overview | 15 min slides, 15 min repo walkthrough |
| 09:30 | Challenge 01 — Workspace as code | Everyone does this |
| 11:30 | Break | |
| 11:45 | Pick one of: 02 / 04 / 03 | Coach assigns based on customer pain |
| 13:00 | Lunch | |
| 14:00 | Pick one of: 05 / 06 / 08 | Heavier hands-on |
| 16:30 | Show & tell (10 min/team) | No formal judging |
| 17:00 | Retro + feedback form |
4.2 Two-day RVAS (default)
Day 1
| Time | Block |
|---|---|
| 09:00 | Kickoff, team formation, blueprint overview |
| 09:30 | Challenge 01 (all teams) |
| 11:30 | Break |
| 11:45 | Challenge 02 OR 03 OR 04 (team choice) |
| 13:00 | Lunch |
| 14:00 | Challenge 05 OR 06 (team choice) |
| 16:00 | Break |
| 16:15 | Stretch goal sprint OR start Capstone planning |
| 17:00 | Day 1 retro |
Day 2
| Time | Block |
|---|---|
| 09:00 | Standup — what's blocking each team |
| 09:30 | Challenge 07 OR 08 (team choice) |
| 12:00 | Lunch |
| 13:00 | Capstone build |
| 16:00 | Demos (10 min/team, see § 6) |
| 17:00 | Judging + awards + retro + feedback form |
4.3 Multi-week customer engagement
| Week | Focus |
|---|---|
| 0 | Pre-flight (§ 3); kickoff call |
| 1 | Challenges 00 + 01 in customer tenant |
| 2 | Challenge 02 (items) + Challenge 03 (domains/capacities) |
| 3 | Challenge 04 (RBAC) |
| 4 | Challenge 05 (medallion) on a real customer use-case |
| 5 | Challenge 06 (data agent) |
| 6 | Challenge 07 (audit + observability) |
| 7 | Challenge 08 (promotion pipelines) |
| 8 | Capstone — production cutover of one real workload; retro; handover |
5. Per-challenge facilitator cards
Each card answers: how hard, how long, what it depends on, what to watch out for, and what "done" looks like.
Durations are median wall-clock assuming 2–3 motivated engineers with Challenge 00 complete. Halve for solo experts, double for first-timers.
Challenge 00 — Setup
- Difficulty: Medium · Duration: 90–120 min · Dependencies: none
- Coach watch-outs:
- Federated-credential subject typos cause
AADSTS70021; subject is case-sensitive (seedocs/troubleshooting.md§ OIDC). - Tenant settings take up to 15 min to propagate; participants will re-run and assume they broke things.
- Microsoft Graph MCP is optional but unlocks Challenge 04 UPN → objectId resolution — install it now to save context-switching later.
- Federated-credential subject typos cause
- Done when: all four smoke-test prompts in § Task 8 return useful answers.
Challenge 01 — Workspace as code
- Difficulty: Foundational · Duration: 90–120 min · Dependencies: 00
- Coach watch-outs:
- The deliberate-failure task (§ Task 2) is the most important learning moment — don't let teams skip it.
- Drift detection requires participants to make an out-of-band change in the portal; some will be reluctant to "break" things. Encourage it.
- The
managed-by:marker is what enables drift to distinguish managed vs unmanaged — point it out explicitly in the workspace description.
- Done when: one PR-created workspace exists, drift cycle exercised end-to-end.
Challenge 02 — Items as code
- Difficulty: Medium · Duration: 120–180 min · Dependencies: 00, 01
- Coach watch-outs:
- Item kinds have different naming regexes; participants often start with one and forget to parameterize.
- The local MCP
docs_item-definitionstool is the fast path to correct payloads — many teams reinvent the schema from web search. - Skills generate code; manifest stays the source of truth. Watch for teams treating Skill output as authoritative.
- Done when: ≥ 1 lakehouse + 1 notebook + 1 warehouse exist via PR; missing description blocks a PR.
Challenge 03 — Domains, capacities, sensitivity
- Difficulty: Medium · Duration: 120–180 min · Dependencies: 00, 01
- Coach watch-outs:
- Requires SPN to be Fabric Administrator (admin APIs) and member of the Purview MIP scope (label apply). Verify before starting.
- Label-promotion CODEOWNERS rule is easy to mis-scope — review the path glob with the team.
- Sensitivity-label apply via the Power BI admin API is the most likely permission failure mode.
- Done when: prd-* workspace on a dev-only capacity fails validation; portal label removal opens a drift issue.
Challenge 04 — Access & RBAC lifecycle
- Difficulty: Medium · Duration: 120–180 min · Dependencies: 00, 01
- Coach watch-outs:
- Group-first vs User-by-exception is the whole challenge. If teams default to User principals, redirect early.
- JIT break-glass is a stretch concept — make sure they understand the auto-expiry follow-up PR before they leave.
- Microsoft Graph MCP makes UPN → objectId resolution painless; without it teams paste raw GUIDs and lose 30 min hunting for the right one.
- Done when: a
User Admin on prd-*PR is blocked; quarterly review workflow opens a PR against an expiring binding.
Challenge 05 — Medallion bootstrap
- Difficulty: Medium-High · Duration: 180–240 min · Dependencies: 00, 01, 02
- Coach watch-outs:
- F4+ capacity strongly recommended; F2 causes Spark queueing.
- The
e2e-medallion-architectureskill is composable — teams panic at the full Bronze/Silver/Gold; remind them they can scope to two tiers. - Capturing Skill output back into
items/(capture_medallion_output.py) is what makes drift work later. Don't skip.
- Done when: one medallion manifest produces ≥ 3 workspaces, ≥ 3 lakehouses, ≥ 1 certified semantic model.
Challenge 06 — Fabric Data Agent governance
- Difficulty: High · Duration: 180–240 min · Dependencies: 00, 01, 02, 03, 04
- Coach watch-outs:
- This challenge has the strictest prereq chain — confirm 04 is done.
- RAI lint is opinionated; tailor
rules/agent/banned_phrases.yamlto the customer's policy before the event. - Requires Fabric Data Agent feature enabled on the capacity; check ahead.
- Purview DSPM stretch goal requires Purview integration set up — flag as advanced.
- Done when: one agent answers an example question with Confidential gold data; an unmanaged data source PR is blocked.
Challenge 07 — Audit & observability
- Difficulty: High (densest Skills usage) · Duration: 240–300 min · Dependencies: 00, 01, 02
- Coach watch-outs:
- Four authoring skills + one consumption skill in one challenge — pace accordingly. Some teams will only finish Eventhouse + dashboard.
- GitHub webhook configuration is often blocked by org policy; have a fallback (admin-API export option in § Task 4).
- Activator reflexes can spam channels — set test thresholds high, then tighten after smoke test.
- Done when: PR events appear in
pr_eventswithin 60 s; one Activator reflex has fired.
Challenge 08 — Deployment pipelines
- Difficulty: Medium-High · Duration: 180–240 min · Dependencies: 00, 01, 02
- Coach watch-outs:
- Requires dev/stg/prd workspace trio under management before promotion works — many teams arrive with only dev.
- Rollback flow (
revert/prd) is a stretch for most teams; demo it rather than have everyone implement. - PR-label triggers are subtle; participants often forget the
pull_request: types: [labeled]event.
- Done when:
promote/stglabel promotes items dev → stg;promote/prdtriggers the production environment gate.
Capstone — End-to-end integration
- Difficulty: Integration · Duration: 240–360 min · Dependencies: any 5+
- Coach watch-outs:
- Scope creep is the killer. Push teams to pick 5 challenges and stop.
- The judging rubric (
challenges/capstone/challenge.md) is the source of truth — use it as the demo checklist too. - The 10-minute demo is a hard limit. Practice ahead.
- Done when: a single PR (or short stacked series) exercises the team's chosen challenges and all rubric criteria can be demoed live.
6. Demo logistics (RVAS format)
Allocate 10 minutes per team: 7 min demo + 3 min Q&A. Judges score against the Capstone rubric in real time.
Required demo content (every team):
- The original PR open in GitHub.
- The sticky validate comment (passing).
- The provision run with environment approval timestamp.
- The Fabric portal showing the live resources.
- The governance dashboard filtered to this team's pipeline.
- (If they did Challenge 06) the agent answering a sample question.
- (Optional) an injected drift event with the detector catching it.
Stage management tips:
- Pre-share screens; don't waste demo minutes hunting for windows.
- Coach the closer to read the rubric out loud as they hit each item.
- Time-box hard. If the buzzer goes, the next team starts.
7. Coaching playbook
Five principles that apply across every challenge:
- Coach the why, not the how. Solutions are linked. The goal is for teams to understand the trade-off (e.g., "why CODEOWNERS and environment gate?"), not to type faster.
- Push teams to the agent first. If a team is stuck writing a payload,
ask "did you try the local MCP
docs_*tool for that item kind?" before handing them the answer. - Encourage the deliberate-failure task in every challenge. Watching a policy block a bad PR is more memorable than watching a good PR pass.
- Surface the audit trail. Every action a team takes should leave a trace: PR, sticky comment, workflow run, marker. Point at the trail constantly.
- Time-box stretch goals. Stretch goals are bait for fast teams. If a team is behind on the main task, redirect away from stretch.
De-escalation patterns:
| Symptom | First thing to try |
|---|---|
401 from Fabric Core MCP |
Re-add MCP server in VS Code; re-auth. |
AADSTS70021 |
Verify federated credential subject string exactly matches. |
| 403 from Fabric REST in workflow | Wait 15 min for tenant settings; verify SPN is in capacity admins. |
429 Too Many Requests |
The retry in scripts/_fabric.py is already handling it; wait. |
| "Skill not available" | Confirm both MCP servers + the Skill are installed; restart agent. |
| Drift detector silent | Check the managed-by: marker is in the workspace description. |
Full catalog in docs/troubleshooting.md.
8. Post-delivery — feedback and iteration
The blueprint is intended to improve after every delivery. Each event is a source of new requirements, sharper challenges, and customer-specific adaptations. Funnel that signal back into the repo via PRs.
8.1 Collect feedback
At the end of every delivery, capture:
- Per-challenge: difficulty rating (1–5), time taken, what blocked them.
- Cross-cutting: best moment, worst moment, what was missing.
- Net-new asks: scenarios the customer hit that no challenge covers.
- Bugs in the blueprint itself (broken links, stale screenshots, policy gaps).
Use a single feedback form (Forms / Google Forms / GitHub Discussions — whatever the org standard is) and link it from the closing slide.
8.2 Triage feedback into the inbox
Within 5 business days of the event, the lead facilitator opens a single delivery retro PR that:
- Adds a
deliveries/<yyyy-mm-dd>-<customer-or-event>.mdfile capturing:- Format used and headcount.
- Which challenges were attempted / completed.
- Aggregated ratings and quotes.
- The triaged feedback items (see § 8.3).
- References each net-new item as a GitHub issue (one per actionable feedback item) so they can be tracked independently.
8.3 Turn feedback into challenges (or challenge changes)
Feedback maps to one of four PR types. Use the type as the PR title prefix.
| Prefix | Meaning | Examples |
|---|---|---|
fix: |
Bug or doc rot in an existing challenge | Broken link in 03; outdated screenshot in 07 |
enhance: |
Sharpen an existing challenge | Add a new policy rule to 01; clearer success criteria in 04 |
adapt: |
Customer-specific variant kept alongside the original | A "regulated insurance" variant of 06 that adds Purview DSPM gating |
feat: |
Brand-new challenge | A "Data Mesh federated governance" challenge for tenants using multiple domains |
Every PR that adds or changes challenge content must keep the contract defined in
README.md§ "Contributing back": each challenge demonstrates ≥ 1 MCP server and ≥ 1 Skill, and policy / schema changes need CODEOWNERS review.
8.4 New-challenge checklist
If a customer's ask graduates to a feat: PR, the new challenge folder
(challenges/<NN>-<slug>/) must include:
-
challenge.mdfollowing the existing template — Outcome, Why, Learning objectives, Prerequisites, Tasks, Success criteria, Stretch goals, MCP tips, Skills tips, References. - Difficulty + duration estimate added to § 5 of this guide.
- Dependency listed in § 5 of this guide and in the README learning-path diagram if it's a first-class node.
- At least one MCP tool reference and one Skill reference.
- At least one deliberate-failure task (a PR that should be blocked).
- A
solution/reference implementation (or a link to one in a private branch if the customer asked for confidentiality). - Troubleshooting entries added to
docs/troubleshooting.mdfor the new failure modes you anticipate. - An entry in
deliveries/<yyyy-mm-dd>-*.mddocumenting which customer delivery sourced the challenge.
8.5 Adapted-challenge checklist
adapt: PRs sit alongside the original (don't overwrite it). Layout:
challenges/
06-data-agent-governance/
challenge.md ← canonical
variants/
insurance-regulated/
challenge.md ← adapted; references canonical for shared bits
rules-overlay.yaml ← additional policy on top of rules/policy.yaml
A variant must:
- Open with a one-paragraph "When to use this variant" framing.
- Reference the canonical challenge for setup, prereqs, and shared tasks.
- List only the delta tasks, success criteria, and rules.
- Be tagged in the front-matter (or first heading) with the customer or
industry it was sourced from, e.g.
variant: insurance-regulated.
8.6 Cadence
| Cadence | Action |
|---|---|
| After every delivery | Retro PR with deliveries/<date>-*.md + issues |
| Monthly | Lead facilitator triages open feedback issues into fix / enhance / adapt / feat PRs |
| Quarterly | Review § 5 durations + difficulty ratings against the latest deliveries and update |
| Annually | Re-evaluate the learning-path graph in the README — are 10 challenges still the right shape? |
9. Suggested feedback questions
Drop these into your feedback form verbatim if useful:
- Which challenges did you attempt? Which did you complete?
- Rate each attempted challenge 1–5 on difficulty, 1–5 on clarity, 1–5 on business relevance.
- How long did each challenge take? (in 30-minute buckets)
- What was the single most useful idea you're taking back to your team?
- What did you want the blueprint to cover that it didn't?
- Where did the agent (MCP / Skills / Copilot) save you the most time? Where did it get in your way?
- If you had one PR's worth of time to improve the blueprint, what would you change?
10. References
README.md— project front door and learning-path diagramdocs/challenges-overview.md— customer-facing visual tour of the 10 challengesdocs/setup.md— one-time operator runbookdocs/identity-model.md— OIDC, federated credentials, SPN scopesdocs/mcp-and-skills.md— Fabric MCP + Skills install and usagedocs/workspace-approval-workflow.md— Challenge 01 design referencedocs/troubleshooting.md— shared error catalogdocs/glossary.md— Fabric + governance terminologychallenges/— the 10 participant-facing challenges