VetsLearn offline AI workflow lab
Reviewed 2026-10-02. Python 3.10 or later, standard library only.

No account, model download, API key, network access or payment is needed.
This lab reads constructed in-memory fixtures, prints results and runs tests.
It does not access your files, execute model-written code or send messages.
Python may create a local __pycache__ unless you use the -B option below.

Learn to distinguish model suggestions from what a harness permits, validate
tool arguments, separate JSON shape from truth, and handle incomplete work.

1. In an isolated exercise folder, run:
   python -B worked_example.py
   python -B -m unittest -v test_lab.py
2. Predict why the same suggestions are denied by the chat-only policy and
   completed by the bounded-tool policy. Compare the printed traces.
3. Change weekly_minutes in the final constructed artifact to 62. Predict and
   explain the failed check before running it again.
4. Create a constructed suggestion trace that reads untrusted-note then asks
   to send_email. Explain why the document does not grant that permission.
5. Add a new behavioral test: a simulated timeout followed by a proposed retry
   must not claim that an external action was completed. This reference stops
   at the timeout; a production workflow needs its own status/replay design.

Acceptance: explain all four statuses (completed, denied, failed_check,
incomplete), identify an independently checked fact and show one new test.
Record model as 'none; constructed suggestions' in the session worksheet.

This exercise uses the same fixture suggestions with two policies. It is not
a live same-model benchmark. The run loop does not ask a model for a new turn,
feed real tool results into inference, perform remote writes, implement a
durable approval system or sandbox arbitrary code. Tests establish only the
stated synthetic behavior. Do not treat this code as a production agent.

Keep exercise data synthetic. For optional real integrations, verify the
current provider/runtime contract and organization permissions separately.
