You install the extension, the Copilot icon appears, and a gray suggestion arrives while you type. It's easy to press Tab and keep moving. Pause there. The icon tells you the extension connected. It says nothing about whether the suggestion is correct.
First, rule out a simpler problem. If the program won't run, find out whether Python is working before you start troubleshooting Copilot. The two problems have different fixes.
Check the runtime before Copilot
Open a terminal and run python --version. If that command isn't found, try python3 --version. You're ready when either one prints a Python 3 version. Write down which command worked, because you'll use it for the rest of this module. If neither works, install Python 3 through your operating system's normal software channel, reopen the terminal, and check again.
Now prove the runtime works end to end. Create runtime-check.py with one line that prints a message, then run it with the command that worked. Seeing the message confirms that Python can execute your file. If the later exercise fails, you can investigate the code, prompt, or Copilot setup without wondering whether the runtime was broken from the start.
Connect Copilot to VS Code
Button names, extension packaging, and menu positions move between releases. A screenshot can become stale quickly. Follow the onboarding path shown by the VS Code version in front of you.
Open VS Code, open its extension or Copilot-onboarding interface, and find the GitHub-published Copilot integration. Install or enable it, follow the authentication flow it shows you, and sign in with the same GitHub account you verified has access. If your editor doesn't present a clear setup entry, use the current GitHub Copilot quickstart instead of a command name copied from an old blog post.
The Copilot icon only means the extension loaded. It does not mean inline suggestions appear, or that they're any good. The next step tests that directly: write a function.
An inline suggestion is a draft
The comment and signature give Copilot a goal, an exact output format, and a constraint. They also give you a contract for review. That contract matters only if you check the suggestion against it.
Copilot's suggestion can differ every time you type, so "success" can never mean "Copilot produced the same code as the lesson." Success means the resulting program satisfies your requirements. A completion can be perfectly valid Python and still fail the task. Syntax answers one question: can Python run this? Your acceptance criteria answer the one that matters: does this solve the problem?
Write the acceptance criteria before you inspect the suggestion. For the greeting function, the result must be a string, use name, begin with Hello, , and end with !. Then review in a fixed order. Compare the proposal with each criterion, accept, edit, or reject it, and run the code with representative inputs. Start with an ordinary name. Follow with one that contains punctuation, since a completion that only happened to fit the first example often fails there.
How much validation is enough depends on what the code does. For a small, self-contained function like this one, validation means reading the proposed body and then executing it against a couple of inputs. The same "looks fine" suggestion for code that touches authentication, money, or shared data needs more: automated tests, a security review, and a look from someone who understands the system it plugs into. You'll build those heavier checks later in this module. Practice the habit now, on cheap examples, so it's automatic once the stakes are real: plausible is not the same as proven, and the only thing that closes that gap is running the code and reading the result.
Reject, edit, retest: the fastest way to a correct function
When a suggestion is wrong, you have three moves, and picking the right one is a skill worth building early. Reject when the proposal violates a requirement or invents information: a fixed name, a made-up room, the wrong format. Edit when the intended correction is small and obvious. Accept only after all parameters and constraints survive execution on both a normal and a boundary input.
A common reaction is to request another completion. If Copilot returns return "Hello, Amina!", the code passes one sample while ignoring name. Don't wait for a luckier answer. Change it to return f"Hello, {name}!" and rerun the checks. A small, obvious edit is faster to review than a fresh suggestion and leaves you in control of the final behavior.
This is also why "more text" is not a better answer. When a task specifies an exact format, a suggestion that adds an unrequested room, date, or person adds something you now have to notice and remove. Reject the extras. The prompting discipline from The Anatomy of a Great Prompt carries over here, one function at a time: state the goal, the constraints, and what "done" looks like.
The same decision scales up from club_summary: a fixed day such as "Tuesday" and the added phrase "in Room 204" are still inventions to reject. Check all three parameters, edit the clear errors, and retest. As functions get bigger, only the number of constraints you check grows. Keep the acceptance criteria beside the code, because larger functions make omissions easier to miss.