Skip to content

Branching and pull requests

main holds the baseline lab state. Learners work in their own template copy on feature branches, not directly on main.

The upstream reference branch is reference/ai-ready. Checkpoint tags and lab/checkpoints.json let you restart a lab step or compare against known states.

lab/checkpoints.json
{
"$comment": "Lab checkpoints. Each tag lives on the upstream repo (commits on reference/ai-ready). Restore with scripts/lab/Restore-LabCheckpoint.ps1; maintainers build them with scripts/maintainer/New-LabCheckpoints.ps1.",
"upstream": "https://github.com/sabajamalian/fabric-powerbi-ai-devops-demo.git",
"branch": "reference/ai-ready",
"restore_paths": ["fabric", "lab/samples"],
"checkpoints": [
{
"name": "lab02-start",
"tag": "checkpoint/lab02-start",
"aliases": ["baseline-v1"],
"stage": 0,
"description": "The baseline model exactly as it ships on main.",
"verify": [],
"seed_baseline_run": false,
"seed_assessment": false
},
{
"name": "lab05-complete",
"tag": "checkpoint/lab05-complete",
"aliases": [],
"stage": 0,
"description": "Baseline model, plus a local-baseline question run copied from the committed sample.",
"verify": ["05"],
"seed_baseline_run": true,
"seed_assessment": false
},
{
"name": "lab06-complete",
"tag": "checkpoint/lab06-complete",
"aliases": [],
"stage": 0,
"description": "Adds a sample assessment (lab/samples/assessment.md, copied to out/assessment.md).",
"verify": ["05", "06"],
"seed_baseline_run": true,
"seed_assessment": true
},
{
"name": "lab07-complete",
"tag": "checkpoint/lab07-complete",
"aliases": [],
"stage": 1,
"description": "Business names, descriptions, hidden keys, display folders, and a rebound report.",
"verify": ["07"],
"seed_baseline_run": true,
"seed_assessment": true
},
{
"name": "lab08-complete",
"tag": "checkpoint/lab08-complete",
"aliases": [],
"stage": 2,
"description": "Adds relationships, the marked date table, Fill Type, and the core measures.",
"verify": ["07", "08"],
"seed_baseline_run": true,
"seed_assessment": true
},
{
"name": "lab09-complete",
"tag": "checkpoint/lab09-complete",
"aliases": ["ai-ready-v1"],
"stage": 3,
"description": "Adds AI metadata: Q&A on, default labels, and the fabric/ai-prep drafts.",
"verify": ["07", "08", "09"],
"seed_baseline_run": true,
"seed_assessment": true
}
]
}

The PR template asks for the lab scope, validation evidence, screenshots where needed, and review notes.

.github/pull_request_template.md
## What changed
<!-- One or two sentences. What does this PR change and why? -->
## Type of change
- [ ] Semantic model (TMDL) or report (PBIR)
- [ ] Synthetic data, questions, or expected results
- [ ] Copilot customization (instructions, agents, skills, prompts, hooks, MCP)
- [ ] Scripts, CI, or tooling
- [ ] Lab site content
## Checks
- [ ] `pwsh ./scripts/Invoke-Validation.ps1` passes locally
- [ ] If I renamed model objects, `pwsh ./scripts/Test-ReportBindings.ps1` passes
- [ ] If I changed data or questions, I ran `pwsh ./scripts/Update-ExpectedResults.ps1` and committed the results
- [ ] No credentials, tenant IDs, workspace IDs, or real customer details
- [ ] No `.pbi/localSettings.json`, `.pbi/cache.abf`, or `.pbix` files
## Business question results (model changes only)
<!-- Paste the output of: pwsh ./scripts/Compare-QuestionRuns.ps1 -Before <label> -After <label> -->
## Lab pages (site changes only)
- [ ] Ten sections in order; `npm run check` passes in `site/`
- [ ] Code shown with `RepoFile`
- [ ] Screenshots follow the checklist in CONTRIBUTING.md

Keep pull requests scoped to one lab or one model improvement. A PR that mixes model edits, generated data, site pages, and workflow changes is harder for Copilot and humans to review.

.github/CODEOWNERS
# Default owner for everything in this demo repository.
* @sabajamalian

CODEOWNERS is a lightweight route to the right reviewers. Use it with branch protection or rulesets in organization repos.

Review pathUse when
model-reviewer custom agentYou want repo-aware model and report review before opening or updating a PR.
Copilot code reviewYou want GitHub PR review comments on changed files.
Human reviewerThe change affects teaching flow, generated data, expected answers, or workflow permissions.

The model-reviewer agent is cataloged in Agents.

For learner copies, use light protection:

  • Require pull requests into main.
  • Require CI to pass.
  • Block force pushes to main.
  • Require conversation resolution before merge.

For a shared training repo, add:

  • CODEOWNERS review for workflows, scripts, and generated expected answers.
  • Secret scanning and push protection.
  • Signed or verified commits if your organization requires them.

Start from a clean working tree. The restore script creates a new lab/<checkpoint>-<timestamp> branch and restores the checkpoint paths:

Terminal window
pwsh ./scripts/lab/Restore-LabCheckpoint.ps1 -Checkpoint lab08-complete

Then run the lab checks listed in that checkpoint’s verify field. lab08-complete verifies Labs 07 and 08:

Terminal window
pwsh ./scripts/lab/Test-LabProgress.ps1 -Lab 07
pwsh ./scripts/lab/Test-LabProgress.ps1 -Lab 08

Checkpoint names and verify lists are in lab/checkpoints.json. Tags use the same checkpoint source of truth.