Work through eight repository modules and a capstone in this local grant-application prototype. Each task keeps Copilot work bounded, reviewable, and supported by evidence you can reproduce.
LAB-00
Establish the managed trust boundary
Confirm the local-only application boundary and establish what repository context is appropriate to share before asking Copilot to help.
Phase
Prepare
Duration
15 minutes
Level
Beginner
Prerequisites
A local clone of this repository
Node.js and npm versions compatible with the tested environment
A GitHub Copilot Business seat governed by your organization
Learning objectives
Identify the repository's local data boundary.
Separate public source context from secrets and real applicant data.
Run a focused validation command and interpret its evidence.
Repository references
src/app/layout.tsx
Confirm the application shell and permanent safety notice.
src/lib/stockage/db.ts
Inspect the browser-local IndexedDB boundary.
Evidence notes
Repository source and focused test output are the evidence for this module; generated explanations are proposals until verified.
Steps
1
Inspect the repository boundary
Open the two repository references and identify where the document language, safety notice, and local database are defined.
Ask Copilot to explain only those selected files, then verify every statement against the source.
Prompt
Explain the local data and safety boundaries shown only in src/app/layout.tsx and src/lib/stockage/db.ts. Cite the file for every statement and identify anything the files do not prove.
Expected results
You can explain that the application is a French Canadian static prototype whose records remain in browser-local IndexedDB.
2
Run focused foundation tests
Run the focused command from the repository root and review the test names before accepting the result.
npm run test -- lab-content fundamentals-lab
Expected results
The locale-contract and semantic-renderer tests pass in both languages.
Recovery
Discard any generated explanation that cannot be traced to the selected files.
If dependencies are missing, run npm ci from the repository root, then repeat the focused test command.
Checkpoint
Trust boundary recorded
Before continuing, state which context is safe to share and which data must remain outside prompts and repository history.
The application is identified as local-only and unofficial.
Only fictitious information will be used.
Generated claims will be checked against source code or first-party documentation.
Troubleshooting
The focused test command cannot find the lab tests.
Confirm that dependencies were installed from the repository root and that the two requested test file names are present under src.
Knowledge check
Does content exclusion make it safe to place secrets or real applicant data in a prompt?
Show answer: No. Content exclusion is not a data-loss-prevention, permission, or secret-management boundary.
LAB-01
Give Copilot verifiable repository context
Build a source-backed architecture map and correct any inference that the selected files do not support.
Phase
Understand
Duration
20 minutes
Level
Beginner
Prerequisites
Complete LAB-00.
Open Copilot Chat in VS Code at the repository root.
Learning objectives
Distinguish static export from runtime services.
Trace validation and browser persistence across selected files.
Replace generated assumptions with cited source evidence.
Repository references
src/lib/domaine/demande.types.ts
Review the versioned local record and fixed status types.
src/lib/domaine/demande.schemas.ts
Compare draft and simulated-submission validation.
src/lib/stockage/db.ts
Confirm Dexie stores data in browser-local IndexedDB.
next.config.ts
Confirm the static-export boundary.
Evidence notes
The source proves static export, two validation levels, fixed domain values, and local IndexedDB persistence. It does not prove a hosted deployment or an organization policy configuration.
Steps
1
Request a bounded architecture map
Select only the four references above and ask for a concise data-flow map with a citation for each claim.
Prompt
Using only the selected files, map input, validation, persistence, and build output. For each claim, cite the file and mark assumptions as unverified.
Expected results
The map identifies permissive draft validation, stricter simulated-submission validation, IndexedDB persistence, and static export.
2
Check the map against the repository
Open each cited location. Remove claims about API routes, authentication, server storage, or deployment because the selected source does not establish them.
npm run build
Expected results
The static build completes and emits the export without requiring a backend or runtime environment variable.
Recovery
If the answer ranges beyond the selected files, restate the file boundary and regenerate it.
If the build fails, preserve the output and diagnose that failure before accepting the architecture map.
Checkpoint
Architecture claims verified
Keep a four-part map whose claims can each be located in source or build output.
Static export and browser-local persistence are explicit.
Draft and final validation are distinguished.
Unsupported backend, account, and deployment claims are removed.
Troubleshooting
Copilot describes a typical Next.js server application.
Point it to output: export in next.config.ts and ask it to retract every server claim not supported by the selected files.
Knowledge check
What proves that saved applications are browser-local?
Show answer: The Dexie database definition and repositories use IndexedDB; the selected source contains no application API or server persistence.
LAB-02
Use completion and chat for focused tests
Add one table-driven mixed-response test that verifies exact missing eligibility criteria without changing production behaviour.
Phase
Test
Duration
25 minutes
Level
Intermediate
Prerequisites
Complete LAB-01.
Start from a clean diff or isolate your exercise changes.
Learning objectives
Frame a test-only task with explicit invariants.
Review generated assertions against the pure eligibility function.
Use focused evidence before broader validation.
Repository references
src/lib/domaine/admissibilite.ts
Understand the pure eligibility result and criterion order.
src/lib/domaine/admissibilite.test.ts
Extend the existing table-driven test style.
Evidence notes
A useful test checks the exact missing criteria and their order, not only the number of failures.
Steps
1
Generate one mixed-response case
Ask for a test-only diff that follows the existing parameterized style and leaves admissibilite.ts unchanged.
Prompt
Add one table-driven mixed-response case to src/lib/domaine/admissibilite.test.ts. Assert the exact missing criteria in source order. Do not edit production code.
Expected results
The proposed diff changes only the focused test file and names the expected missing criteria explicitly.
2
Run and inspect focused evidence
Review the diff, run the focused test, then confirm production source remains unchanged.
npm run test -- admissibilite
Expected results
The eligibility tests pass and the diff contains no production behaviour change.
Recovery
If a generated expectation conflicts with source order, correct the test from admissibilite.ts rather than the generated explanation.
If production code changed, discard that portion and regenerate a test-only diff.
Checkpoint
Focused test evidence captured
Keep the command output and reviewed diff as evidence for the added case.
The exact missing criteria are asserted.
The focused test passes.
Production behaviour is unchanged.
Troubleshooting
Vitest reports that no matching test file was found.
Run the command from the repository root and use the existing admissibilite file name as the filter.
Knowledge check
Why is asserting only the number of missing criteria weak?
Show answer: It can pass when the wrong criteria are returned; exact values and order provide more discriminating evidence.
LAB-03
Plan and validate a small refactoring
Consolidate duplicated monotonic timestamp logic through a plan-first, test-first review loop.
Phase
Refactor
Duration
30 minutes
Level
Intermediate
Prerequisites
Complete LAB-02.
Know how to inspect a Git diff and revert an exercise change.
Learning objectives
Locate two duplicate implementations.
Evaluate whether one pure helper is justified.
Test stale and future timestamp boundaries before broad validation.
Repository references
src/components/demandes/assistant-provider.tsx
Inspect the first prochaineDateModification implementation.
src/components/fichier/selecteur-pdf-local.tsx
Inspect the second implementation.
Evidence notes
The duplicated functions are the evidence for extraction; passing focused component tests and boundary tests are the evidence for preserved behaviour.
Steps
1
Ask for a constrained plan
Request a plan before edits. Require one pure helper, direct call-site replacement, and tests for stale and future timestamps.
Prompt
Plan the smallest refactoring that replaces the two prochaineDateModification implementations with one pure helper. Preserve monotonic ISO output. Include stale and future timestamp tests. Do not edit yet.
Expected results
The plan names both call sites, one helper location, focused tests, and no unrelated changes.
2
Apply, review, and validate
Approve only the bounded files, inspect the diff, then run the two affected component test filters.
Prompt
Implement the approved minimal plan. Stop after the helper, its boundary tests, and the two call-site replacements, then summarize the diff.
npm run test -- assistant-provider selecteur-pdf-local
Expected results
Focused tests pass, both components use one helper, and stale or future input still yields a later ISO timestamp.
Recovery
Revert the exercise diff if timestamp ordering changes or the scope grows beyond the named files.
If focused tests fail, compare old and new outputs at the failing boundary before making another edit.
Checkpoint
Refactoring remains behaviour-preserving
Accept the extraction only when the diff is smaller than the duplication it removes and focused evidence is green.
One pure helper owns monotonic timestamp generation.
Both call sites preserve behaviour.
Boundary and focused tests pass.
Troubleshooting
The generated helper returns the current time for a future input.
Reject the change. The helper must return a timestamp later than both the current time and the supplied timestamp.
Knowledge check
When is this extraction justified?
Show answer: When one small pure helper removes real duplication while preserving the two call sites and making the timestamp invariant directly testable.
LAB-04
Generate an accessible browser test
Cover incomplete eligibility answers with focus, details, axe, and overflow evidence in a real browser.
Phase
Validate
Duration
30 minutes
Level
Intermediate
Prerequisites
Complete LAB-03.
Install Playwright browsers required by the project.
Learning objectives
Use exact French accessible names in an English instruction.
Test focus and missing-question details, not appearance alone.
Focus on the alert, exact missing-question text, no serious or critical axe findings, and no horizontal overflow are separate observable checks.
Steps
1
Draft the missing-answer flow
Ask for one Playwright case that submits with unanswered questions, verifies focus and details, runs axe, and checks overflow.
Prompt
Add one focused Playwright test for incomplete eligibility answers. Use the exact French accessible button name, assert alert focus and each missing question, run axe, and check horizontal overflow. Do not change the component.
Expected results
The proposed test uses roles and accessible names rather than CSS-only selectors for user-facing controls.
2
Run the browser check
Review the generated selectors against the component, then execute the scoped Chromium check.
npm run test:e2e -- --project=chromium --grep "questions incomplètes"
Expected results
The incomplete flow passes with focus, missing-question, axe, and overflow evidence.
Recovery
If the grep matches no test, align the test title and command before broadening execution.
If axe or focus fails, fix the underlying semantics rather than weakening the assertion.
Checkpoint
Accessible failure path verified
Retain evidence for focus, readable details, automated accessibility, and responsive layout.
The alert receives focus.
Every unanswered question is named.
Axe and overflow checks pass on Chromium.
Troubleshooting
The English instruction cannot find the submit button.
Use the application’s exact French accessible name: Vérifier l’admissibilité.
Knowledge check
Why test focus in addition to visible error text?
Show answer: Keyboard and assistive-technology users need the validation result announced and reached predictably after submission.
LAB-05
Review privacy and local file behaviour
Separate source-backed local PDF behaviour from privacy or security capabilities the prototype does not provide.
Phase
Review
Duration
25 minutes
Level
Intermediate
Prerequisites
Complete LAB-04.
Use only the fictitious fixture under e2e/fixtures.
Learning objectives
Trace PDF validation and IndexedDB persistence.
Verify selection produces no API request.
Reject unsupported antivirus, encryption, upload, or server-validation claims.
Repository references
src/lib/fichier/pdf-local.ts
Review local extension, MIME, emptiness, and size validation.
src/components/fichier/selecteur-pdf-local.tsx
Trace local selection and object URL lifecycle.
src/lib/stockage/documents.repository.ts
Confirm browser-local document persistence.
e2e/parcours-local.spec.ts
Inspect existing no-network and persistence evidence.
Evidence notes
Source review can establish local validation and persistence. It cannot establish device security, malware safety, encryption at rest, or legal compliance.
Steps
1
Classify privacy claims
Ask for a three-column review: proven by source, not proven, and prohibited inference. Verify every row yourself.
Prompt
Review only the selected PDF and repository files. Classify each privacy or security claim as proven by source, not proven, or prohibited inference. Cite exact files. Do not claim upload, antivirus, encryption, or server validation.
Expected results
The review states that validation and storage are local while explicitly rejecting capabilities absent from source.
2
Verify local-only network behaviour
Run the existing PDF browser scenario and inspect any captured requests before accepting the review.
npm run test:e2e -- --project=chromium --grep "PDF"
Expected results
The fictitious PDF is validated and restored locally without an application API request.
Recovery
Delete the selected fictitious document through the application if you want to reset browser-local state.
Remove any generated claim that lacks direct source or browser evidence.
Checkpoint
Privacy review grounded in evidence
Keep a review that distinguishes local behaviour from absent security guarantees.
Only fictitious PDF data is used.
No application API or upload request is observed.
Antivirus, encryption, and server-validation claims are rejected.
Troubleshooting
A blob URL appears and is mistaken for an upload.
A browser blob URL references local in-memory content. Confirm network behaviour in Playwright rather than inferring an upload from the URL.
Knowledge check
Does extension and MIME validation prove that a PDF is safe?
Show answer: No. Those checks enforce the prototype’s input contract; they do not scan content for malware or certify it.
LAB-06
Use agent mode with explicit guardrails
Delegate a small status task while preserving the fixed state machine, simulation wording, approvals, and human review.
Phase
Implement
Duration
30 minutes
Level
Intermediate
Prerequisites
Complete LAB-05.
Know how to review proposed file edits and command approvals in your IDE.
Learning objectives
Constrain agent scope to named files and invariants.
Review commands before approval.
Reject real processing or timer-based progression claims.
Repository references
src/lib/domaine/machine-etats.ts
Review the three allowed forward transitions.
src/lib/domaine/machine-etats.test.ts
Lock the four statuses and forbidden transitions.
src/components/demandes/suivi-simule.tsx
Preserve exact simulation and local-only wording.
Evidence notes
Current product guidance says agent mode can choose files, edit, and run approved commands. Available controls can vary by policy and client, so verify your current interface rather than assuming it.
Steps
1
Delegate a constrained test improvement
Ask agent mode to improve one state-machine test without changing statuses, transitions, timers, or UI claims. Review its plan before approval.
Prompt
Improve one table-driven state-machine test using only machine-etats.ts and machine-etats.test.ts. Preserve the four exact statuses and three forward transitions. Do not add timers, backend processing, or real decision claims. Ask before running commands.
Expected results
The proposed change is small, test-focused, and names the fixed invariants it preserves.
2
Approve narrowly and review the diff
Approve only the focused test command, inspect every changed line, and reject edits to disclaimer text or production progression.
npm run test -- machine-etats
Expected results
The state-machine tests pass and the reviewed diff introduces no new status or automated progression.
Recovery
Stop the agent and discard changes if it reaches outside the named files or alters a fixed invariant.
If a command requires broader access than expected, decline it and run the focused command yourself.
Checkpoint
Delegation stayed inside guardrails
Accept agent work only after a line-by-line human review and focused test evidence.
Only the approved files changed.
Four statuses and three transitions remain fixed.
Simulation and local-only wording remain intact.
Troubleshooting
Agent mode or a model choice is unavailable.
Use chat to draft the same bounded diff, or review the provided prompt and expected patch manually; availability depends on current plan, policy, and client.
Knowledge check
Who is accountable for an agent-generated command and diff?
Show answer: The human reviewer who scopes the task, approves commands, verifies evidence, and accepts or rejects the change.
LAB-07
Delegate, document, and review responsibly
Review bilingual documentation, optional cloud delegation, and adoption evidence without overstating deployment, policy, or metrics.
Phase
Communicate
Duration
30 minutes
Level
Intermediate
Prerequisites
Complete LAB-06.
Use the recorded fallback if cloud-agent or organization views are unavailable.
Learning objectives
Check English and Canadian French structural parity and natural language.
Treat cloud-agent output as a pull-request proposal requiring review.
Separate seat management from lagging usage indicators.
Repository references
README.md
Review English repository guidance.
README.fr.md
Review equivalent Canadian French guidance.
src/content/lab/en-CA.ts
Compare stable lab IDs and commands.
src/content/lab/fr-CA.ts
Review natural Canadian French and safety parity.
Evidence notes
Cloud-agent work is asynchronous pull-request evidence that still requires human review. If unavailable, use the prompt, mock diff, and review checklist; do not bypass organization policy.
Seat management is the licensing source of truth. Usage metrics cover selected surfaces, depend partly on current client telemetry, and can have permanent historical gaps; allow for reporting lag and attribution caveats.
GitHub-direct volume terms do not govern Microsoft purchasing channels. Provider-specific model footnotes can also change handling conditions, so visible model options do not prove identical terms or entitlement.
Steps
1
Review bilingual documentation
Use Copilot to flag structural differences, then manually review meaning, Canadian French, exact commands, routes, safety wording, and dated claims.
Prompt
Compare README.md with README.fr.md and en-CA.ts with fr-CA.ts. Report structural, command, route, safety, and terminology differences. Do not treat literal translation as proof of language quality.
npm run check:docs
npm run check:release -- --scope contract
Expected results
Automated parity checks pass and a human reviewer records any language or factual corrections separately.
2
Review delegation and adoption evidence
If policy permits, delegate a documentation-only issue and review its pull request. Otherwise, review a mock diff locally. Record evidence type and current source date.
Prompt
Propose a documentation-only pull request that corrects one verified discrepancy. Keep stable IDs, commands, routes, and safety wording aligned. Include focused validation and identify claims needing current first-party verification.
Expected results
The review distinguishes a live pull request from fallback evidence and does not infer adoption, licensing, or policy from one metric.
Recovery
Use the recorded mock diff when cloud delegation, metrics, or organization policy views are unavailable.
Revert generated wording that is unnatural, unsupported, or inconsistent with the manifest claim register.
Checkpoint
Bilingual and delegated work reviewed
Complete automated structure checks and independent human review before accepting documentation or cloud-agent output.
Commands, routes, stable IDs, and safety meaning align.
Canadian French reads naturally.
Unavailable cloud or metrics evidence is identified as fallback, not simulated as live.
Troubleshooting
The cloud agent, policy page, or metrics view is unavailable.
Use the local fallback review and current first-party sources. Record the limitation rather than changing policy or inventing evidence.
Knowledge check
Do passing parity checks prove translation quality?
Show answer: No. They verify structure and stable literals; fluent reviewers must verify meaning, register, terminology, and cultural fit.
LAB-CAP
Complete a reviewed change from prompt to evidence
Deliver one small repository issue from bounded prompt through reviewed diff, focused and broad checks, and a human-judgment record.
Phase
Capstone
Duration
45 minutes
Level
Intermediate
Prerequisites
Complete LAB-00 through LAB-07.
Choose a fictitious, local-only issue that needs no backend, authentication, telemetry, or progress storage.
Learning objectives
Frame scope, invariants, and exclusions before generation.
Review code, safety, accessibility, and evidence separately.
Record decisions that automation could not make.
Repository references
src/lib/domaine/admissibilite.ts
Use a pure domain surface for a bounded change or test.
Use the accessible UI contract as review evidence.
e2e/validation-finale.spec.ts
Reuse broad accessibility and responsive checks.
Evidence notes
A complete evidence packet contains the original bounded prompt, reviewed diff, focused test output, lint and build output, browser evidence where relevant, and a short human-decision record.
Steps
1
Frame and implement the issue
Write acceptance criteria, named files, invariants, exclusions, and the first focused check. Ask for a plan, approve a small diff, then review each changed line.
Prompt
Plan one small improvement using only the named files. Preserve local-only fictitious data, French accessible names, static export, and existing domain rules. Add or extend focused tests. Do not add backend, auth, telemetry, or progress storage. Stop for review before broad commands.
npm run test -- admissibilite
Expected results
The focused check passes and the diff is traceable to each acceptance criterion without unrelated edits.
2
Build the evidence packet
Run broad checks, inspect the browser when UI changed, and record which factual, accessibility, language, or scope decisions required human judgment.
Prompt
Review the final diff against the acceptance criteria and exclusions. List evidence for each criterion, flag unsupported claims, and identify decisions that still require human judgment.
npm run lint
npm run test
npm run build
npm run test:e2e -- --project=chromium
Expected results
The evidence packet separates generated proposals, executable results, browser observations, and human conclusions.
Recovery
Revert unrelated or unsafe changes and rerun the earliest focused check before broad validation.
If a broad failure predates the capstone, record reproducible evidence and its disposition instead of claiming a green release.
Checkpoint
Prompt-to-evidence review complete
Present a small reviewed change and evidence packet that another person can reproduce locally.
Scope and exclusions appear in the original prompt.
Focused and broad results are recorded exactly.
Safety, accessibility, and generated claims receive human review.
No backend, auth, telemetry, or progress storage was introduced.
Troubleshooting
The proposed change expands while validation is running.
Stop, return to the last green focused check, remove unrelated edits, and re-establish one falsifiable acceptance criterion.
Knowledge check
What turns generated output into acceptable repository evidence?
Show answer: A bounded task, reviewed diff, reproducible checks, source-backed claims, and explicit human judgment about safety, accessibility, language, and scope.
Glossary
GitHub Copilot Business
The centrally managed GitHub Copilot plan for organizations.
Content exclusion
A repository policy that limits some Copilot context use but does not replace data protection controls.
Agent mode
An IDE workflow that can select files, propose edits, and run commands subject to available controls and human approval.
Cloud agent
An asynchronous agent that works in a repository and returns pull-request evidence for human review.
Pull request
A reviewable proposal to merge a set of repository changes.