Unit 16 · lesson
Build the System Status Console in Verified Slices
Core path: multiple sessions
This is the week where speed becomes tempting.
You have enough Python to ask an AI tool for a whole application and get something that looks impressively complete in seconds.
Do not do that.
You are going to build a multi-file System Status Console in slices small enough to inspect, test, commit, and recover independently.
AI assistance is optional. The bounded build process is not.
Freeze the specification before generation
Each simulated system has:
name
status: ONLINE / OFFLINE / MAINTENANCE
battery
temperature
Required behavior:
- add and view systems;
- search by name;
- identify low battery at
<= 20; - identify overheating at
>= 80; - save/load JSON;
- generate a summary report.
Constraints:
- Python standard library only;
- console application;
- multiple modules;
pytesttests;- beginner-readable code you can explain.
Use simulated data only. Do not paste credentials, private repository material, student records, or confidential information into an AI tool.
Write the boundary tests first
At minimum, define:
battery 20 → low
battery 21 → not low
temperature 79 → not overheating
temperature 80 → overheating
Add the other acceptance criteria your design needs.
Then establish a Git baseline:
git add .
git commit -m "Define system console specification"
Plan architecture without implementation
Ask an approved AI tool for an architecture proposal without code, or inspect the supplied classroom plan.
A reasonable small structure might be:
main.py
system.py
storage.py
reports.py
tests/
Reject proposals that add unrelated frameworks, databases, authentication systems, network services, or other infrastructure outside the specification.
A sophisticated-looking addition can still be scope creep.
Slice 1 — model
Implement only system.py and its tests.
Verify:
- status values;
- battery threshold;
- temperature threshold;
- readable object behavior.
Inspect the diff before committing.
Do not let this slice also redesign storage or menus.
Slice 2 — persistence
Add JSON save/load in storage.py.
Test:
create data
save
stop program
load
compare restored state
Do not let the persistence slice rewrite the model unless the model contract genuinely needs revision and you document why.
Commit when stable.
Slice 3 — reports
Add report logic.
Test:
- normal data;
- exact thresholds;
- empty collection.
If generated code becomes clever enough that you cannot explain it, simplify it.
Readable code is a project constraint, not a beginner embarrassment.
Slice 4 — main workflow
Connect the modules in main.py.
Run:
python -m pytest
Then perform one complete manual workflow.
Automated tests and manual interaction answer different questions. Use both.
Adversarial review
Try:
- duplicate names;
- empty fleet;
- exact threshold values;
- malformed save data;
- missing save file;
- unexpected status value.
Document what the program handles and what remains a known limitation.
A limitation you can name is better than a failure you pretend does not exist.
Build log
Keep a Verified Vibe Build Log containing:
specification
acceptance criteria
architecture plan
proposal rejected/revised
slice 1 diff + tests + commit
slice 2 diff + tests + commit
slice 3 diff + tests + commit
slice 4 diff + full verification
known limitations
Success evidence
The project is complete when:
- the written specification and final behavior agree;
- the full suite passes;
- each slice has a focused checkpoint;
- unrelated generated complexity was rejected;
- known limitations are documented; and
- you can explain every module that remains.
Fast generation is useful. Recoverable generation is better.