./ksim web reads web/index.html from disk on every request but runs
the code it started with. After the Teach a domain update, a server
from before it got the page's new start request, did not know
"teach", and started its default instead: a full 20-task exam.
Report "stale" in /api/session: whether ksim or sim/*.py changed on
disk since the server started. The page treats a server that sends
no "stale" as stale too, since it predates the check. While the
server is stale, the lobby says to restart it and launch() starts no
session.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>