CHAPTER 15 VISUAL LAB - Inspect paths from this lab’s actual location
Book boards: 15a and 15b

PRACTICE ROUTINE
Cover the board answer. Predict aloud, try the example, compare with the
stated result, change one input, and try again. Explain a discrepancy
before changing another thing. All marketing examples are fictional.

Use boards 15a and 15b. This lab is deeper in the companion than chapter15.py,
so it deliberately walks up two folders from ch15 to reach the companion.

RUN
Open walkthrough.py in Thonny and press F5. After Chapter 15's system-shell
lesson, an equivalent command from the companion root is:
python visual_labs/ch15/walkthrough.py

EXPECTED OUTPUT
Four labelled full paths: Lab file, Lab folder, Companion folder, Input file.
Then: Starter CSV exists: True
Your enclosing paths and separators depend on your computer. Input file
must end in start_here/campaigns.csv inside this same companion.

FOLLOW THE CODE
The saved lab file supplies __file__. resolve makes its path complete.
parent identifies a containing folder at each named step. Joining the
companion path with start_here and campaigns.csv constructs the input path.
is_file checks its existence; this script does not write anything.

CHANGE, PREDICT, CHECK
Copy the complete companion to another folder. Predict which printed paths
change, then run the copied lab.
Answer: all full paths follow the new enclosing location; Starter CSV exists
stays True while internal folders remain together. Moving only this file
would break the documented relative arrangement.

The original python/chapter15.py finds its own shallower location and writes
a note inside python/output. Comparing the two parent chains explains why
path code should match the project structure instead of being pasted blindly.
