Creating a task returns 201 and a generated ID. A blank title returns 400 and leaves the list unchanged. Updating an unknown ID returns 404. Restarting the process resets the teaching data; that behavior is an explicit limitation.

Critical check: Rejected requests cannot change state, and the API is clearly identified as a local in-memory demo.

Final project: Deliver the server, run instructions, route contract, request examples and test results. Add a maximum-title boundary test at 80 and 81 characters and show that failed creation leaves the task count unchanged.