MSBA-309 · Lesson 10 of 12 · 19 min
Hands-on practice
▶ Video coming soon A video version of this lesson is on the way.
Friday afternoon moved from the boardroom table to Dmitri's desk. Priya had prepared a practice repository, a copy of trailcheck with invented data, and a list of twelve short tasks. Each task took a few minutes and touched a skill the exam tests by description. "Reading that agent mode asks before running commands is one thing," she said. "Watching it ask, and deciding, is how you remember it on Monday." The tasks used the Copilot Business seat Dmitri had held since May, in VS Code and on GitHub.com, and Rosa joined for the administrative ones, because only owners can see some of the settings.
Setting up the practice repository
The practice repository, trailcheck-practice, was private and lived in the tidewater-guides organization so that the organization's policies applied. It held the parser, the report store and a tests folder, with invented trail reports only. Priya added three files that would matter for the tasks: a fake secrets file under config/secrets/ (containing placeholder text, not real credentials), a vendored folder with a small open source library, and the same .github folder as the real repository, with instructions, prompt files and AGENTS.md.
trailcheck-practice/
.github/
copilot-instructions.md
instructions/data.instructions.md
prompts/write-tests.prompt.md
AGENTS.md
config/secrets/api.toml (placeholder text only)
vendor/tinycsv/
trails/parse.py
trails/store.py
tests/test_parse.py
data/sample_reports.txt (invented data)Editor tasks
| Task | What to do | What it shows |
|---|---|---|
| 1 Check the account | Open the Copilot status menu and confirm the signed-in account is the one with the organization seat | Policies and exclusions follow the account that holds the seat |
| 2 Compare completions | Type a function name and docstring in parse.py; accept, cycle and dismiss suggestions | Completion is shaped by the name, docstring and nearby code |
| 3 Next edit | Rename a parameter and watch for a next edit suggestion further down | Next edit predicts the next change, not just the next characters |
| 4 Ask, edit, agent | Ask chat to explain store.py; then use edit mode on two files; then give agent mode a task with a test command | Scope differs: answer, chosen files, or a plan with tools |
| 5 Approvals | In agent mode, deny one proposed command and approve another | Agent mode asks before running commands; denying is always possible |
| 6 References | Ask the same question with and without #file:docs/report-format.md | Explicit context changes the answer |
| 7 Instructions in use | Ask chat a question and look for copilot-instructions.md in the references | Repository instructions are added automatically |
| 8 Prompt file | Run the write-tests prompt file on a function | Prompt files run only when invoked |
Task 4 produced the most useful moment. Asked to "add a check that rejects future dates and make the tests pass", agent mode planned three steps, edited parse.py, proposed running pytest, saw one failure, adjusted the function and ran the tests again. It did not touch the tests, because AGENTS.md said not to modify existing tests and the instructions said so too. Dmitri then repeated the task in a scratch folder without those files, and the agent edited a test to match its change. The contrast was a vivid version of an exam scenario: bounded tasks and instructions are safeguards, not decoration.
Exclusion tasks
Rosa added two content exclusions to the practice repository while Dmitri watched the settings page: "/config/secrets/" and "/vendor/". Then Dmitri tried three things. Opening config/secrets/api.toml, the Copilot status icon showed that the file was excluded and completions were unavailable. Asking ask-mode chat "what does vendor/tinycsv do?" returned an answer that did not use the vendored files' content. And, as the documentation had warned, the exclusion was not enforced in agent mode: when Dmitri asked agent mode to summarize the vendor folder, it could read the files. He wrote that on a card in capitals, because it is the kind of limitation exam questions are built on.
He also saw the timing issue: the first time he opened the secrets file after Rosa saved the exclusion, completions still appeared, because his editor had not picked up the change. Reloading the window fixed it. Rosa added that she always tells people to reload after an exclusion change, and to check the status icon rather than assume.
Public code and code referencing
The organization's policy blocked suggestions matching public code, so Dmitri could not see code referencing in the practice repository. Instead he used his personal account, which had Copilot Free, with matches allowed, in a separate scratch folder. He typed the opening of a well-known short algorithm and, after a few tries, got a suggestion that the Copilot log reported as matching public code, with links to repositories and their licences. Back in the organization repository, the same opening produced a different suggestion or none. That was the trade-off from lesson 8 in front of him: block and never see matches, or allow and see them with the information needed to check the licence.
GitHub.com tasks
On GitHub.com Dmitri opened a pull request from a small branch and requested a review from Copilot. The review arrived as comments, two of them useful and one a style suggestion that the instructions already contradicted; the pull request still needed Priya's approval to merge, as branch protection required. He then wrote an issue with acceptance criteria and assigned it to the coding agent. It created a branch, worked in its cloud environment and opened a draft pull request about twenty minutes later, which he reviewed like any other. He noted the parts of the issue the agent had relied on: the acceptance criteria and the test command in AGENTS.md.
Worked problem
Writing an issue for the coding agent
Dmitri's first draft of the issue said "Add support for elevation gain." What did Priya ask him to add before assigning it?
Show solution
- The goal in a sentence: parse an optional elevation_gain_m field from report lines.
- Scope: change trails/parse.py and trails/store.py only; do not change existing tests or requirements.txt.
- Acceptance criteria: lines without the field still parse; a non-number in the field returns the error dictionary; new tests cover both.
- Verification: pytest -q passes and the data check reports no errors.
Answer: A goal, a scope, acceptance criteria and a verification step: the same parts as a good prompt, written as an issue.
Administrative tasks
Rosa showed the owner's side. On the organization's Copilot policies page they found the settings the exam asks about: whether suggestions matching public code are blocked, whether Copilot Chat on GitHub.com, the coding agent and previews are enabled, whether MCP servers are allowed and which models are available. In the audit log they filtered for Copilot events and found the two exclusion changes Rosa had made an hour earlier, with her name and the time. On the usage metrics page they looked at the last 28 days: active users, chat by mode, and suggestions accepted, with the note that GitHub.com and Mobile chat were not included.
Rosa also showed how seat assignment worked for the web team. Because Copilot was assigned to the team rather than to named people, the partner liaison developer who would join in September would receive a seat automatically when added to the team. She mentioned that the same operations can be scripted through the REST API, which is how larger organizations handle hundreds of seats.
GET /orgs/{org}/copilot/billing/seats
POST /orgs/{org}/copilot/billing/selected_teams
DELETE /orgs/{org}/copilot/billing/selected_usersThe CLI
The last task was in the terminal. Dmitri used GitHub Copilot CLI to ask how to find every file in the repository changed in the last week, read the suggested command, and ran it only after checking what it did. He then asked it to explain an unfamiliar git command from an old script. The CLI, like agent mode, asks before running anything that changes files or runs programs, and Priya repeated the rule that applies to both: read the command before you approve it.
What the practice changed in his notes
Dmitri kept a list during the afternoon of things he had read about but understood differently after doing them. Five went onto new flash cards. First, the status indicator: the quickest way to answer "why are there no suggestions here?" is the icon in the editor, which shows when a file is excluded or Copilot is disabled for a language. Second, agent mode approvals are per action, and the editor offers to remember a choice for the session; remembering is convenient but removes a check, which is worth knowing when a question asks how to keep control. Third, code review comments carry no approval status, and branch protection, not Copilot, decides when a pull request can merge. Fourth, the coding agent's pull request starts as a draft and the person who assigned the task is asked to review it. Fifth, usage metrics lag by a couple of days, so a policy change made today will not show its effect in the dashboard until later in the week.
None of these were new facts. They were facts with a picture attached, and Priya's claim was that pictures survive exam nerves better than sentences.
Five tasks to repeat at home
Not everyone preparing for GH-300 has an organization and an owner to help. Priya listed five tasks anyone can do with a personal plan, including Copilot Free, to get most of the benefit. Compare a completion with and without a descriptive function name and docstring. Ask the same chat question with and without an explicit file reference, and notice how the answer changes. Write a short custom instructions file in a test repository and look for it in the references under a chat answer. Give agent mode a small task with a test command, deny one command it proposes, and watch how it adapts. And turn the public code setting on and off in your personal settings, try a well-known snippet, and look at the code referencing log when matches are allowed.
For the administrative skills that need an organization, such as policies, exclusions, audit events and metrics, the GitHub documentation pages include screenshots and step lists, and reading them while picturing a real organization is the next best thing. Microsoft Learn's GitHub Copilot modules also include guided exercises.
The exam sandbox
The day ended with ten minutes in the GitHub certification exam sandbox, which shows the interface without real questions. Dmitri practised flagging, moving between questions, using the review screen and the drag-and-drop style, so that none of the controls would be new on Monday. He also ran the online delivery system test on his home computer that evening, as Priya had asked on Monday, and it passed.
Priya's verdict on the afternoon was simple. "You have now done, with your own hands, most of what the exam describes in words." Dmitri cycled home along the river in Moncton with the sun still up, and for the first time that week did not open his flash cards in the evening.
Priya and Rosa tidied up at the end of the afternoon. Rosa removed the two exclusions from the practice repository, so they would not confuse anyone later, and archived the repository. Priya closed the coding agent's draft pull request without merging it, with a comment explaining that it was a practice run, because leaving stray agent branches and pull requests around is a small but real source of confusion in a shared organization. The audit log recorded both changes, which Dmitri checked as a final exercise.
The hands-on afternoon also gave Dmitri material for the scenario questions he expected on Monday. When a question describes a developer surprised that an agent read an excluded file, or a reviewer treating Copilot's comments as an approval, he could now picture the exact screen. That is the best kind of preparation for a scenario-based exam: not more facts, but more situations you have actually seen.
Dmitri's one regret about the afternoon was that he had not done it in May. Several things he had learned by reading during the summer would have been clearer, and quicker to learn, with the screen in front of him.
Common mistakes
MistakePractising only in a personal account.
InsteadPractise in an organization repository so policies and exclusions apply.
MistakeAssuming an exclusion takes effect immediately in an open editor.
InsteadReload and check the status indicator.
MistakeApproving every agent command without reading it.
InsteadRead each command; deny when unsure.
MistakeAssigning a one-line issue to the coding agent.
InsteadGive a goal, scope, acceptance criteria and a verification step.
MistakeSkipping the sandbox and system test.
InsteadTry the interface and run the system test before exam day.
Summary and key terms
- Hands-on practice turns described features into remembered experience.
- In the editor: check the account, compare completion and next edit, try ask, edit and agent modes, approvals, references, instructions and prompt files.
- Exclusions show an indicator, keep content out of ask-mode chat, need a reload and are not enforced in agent mode.
- Code referencing appears only when public code matches are allowed.
- On GitHub.com: Copilot code review comments, the coding agent opens a pull request, and owners manage policies, audit events, metrics and seats.
- Finish with the exam sandbox and the online system test.
- Practice repository
- A copy of a project with invented data, used to try features safely.
- Status indicator
- The Copilot icon in the editor that shows whether Copilot is active and whether a file is excluded.
- Acceptance criteria
- Conditions a change must meet to count as done, often written in an issue.
- Copilot CLI
- GitHub Copilot in the terminal, for explaining and suggesting commands and working with files.
- Seat assignment by team
- Giving Copilot to a team so its members receive seats automatically.
Practice problems
Work each problem on paper first, then reveal the answer to check.
Why practise in an organization repository rather than a personal one?
Show answer
So the organization's policies, seat and exclusions apply, as they will in real work.
What did the agent mode task show about AGENTS.md?
Show answer
With it, the agent left existing tests alone; without it, the agent edited a test to pass.
Why could Dmitri not see code referencing in the organization repository?
Show answer
The organization policy blocked suggestions matching public code.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.