Branching and pull requests
Branch model
Section titled “Branch model”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.
{ "$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 } ]}Pull request template
Section titled “Pull request template”The PR template asks for the lab scope, validation evidence, screenshots where needed, and review notes.
## 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.mdKeep 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.
CODEOWNERS
Section titled “CODEOWNERS”# Default owner for everything in this demo repository.* @sabajamalianCODEOWNERS is a lightweight route to the right reviewers. Use it with branch protection or rulesets in organization repos.
Review paths
Section titled “Review paths”| Review path | Use when |
|---|---|
model-reviewer custom agent | You want repo-aware model and report review before opening or updating a PR. |
| Copilot code review | You want GitHub PR review comments on changed files. |
| Human reviewer | The change affects teaching flow, generated data, expected answers, or workflow permissions. |
The model-reviewer agent is cataloged in Agents.
Suggested rulesets
Section titled “Suggested rulesets”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.
Redo a lab from a checkpoint
Section titled “Redo a lab from a checkpoint”Start from a clean working tree. The restore script creates a new lab/<checkpoint>-<timestamp> branch and restores the checkpoint paths:
pwsh ./scripts/lab/Restore-LabCheckpoint.ps1 -Checkpoint lab08-completeThen run the lab checks listed in that checkpoint’s verify field. lab08-complete verifies Labs 07 and 08:
pwsh ./scripts/lab/Test-LabProgress.ps1 -Lab 07pwsh ./scripts/lab/Test-LabProgress.ps1 -Lab 08Checkpoint names and verify lists are in lab/checkpoints.json. Tags use the same checkpoint source of truth.