第15讲 网页待办项目上下文

通用填写方式
已有程序：【程序与目录】
当前能力：【已经运行验证的功能】
本轮目标：【网页升级与使用者】
运行环境：【实际环境与运行资源】
数据规则：【字段、类型、保存位置】
允许改动：【目录与文件】
不能改动：【核心、已有功能和数据】
验收方式：【操作与预期】

本案例
解压lesson-15-starter.zip，在Comate选择lesson15-starter文件夹作为本地目录。
已有lesson14_desktop/todo_core.py、todo_app.py和README.md，是上一讲的Python桌面待办程序。
runtime/pyodide含5个同源运行时文件，固定314.0.2；不是最新版承诺。
本轮只新建lesson15_browser，保留原桌面目录。
核心类TodoCore，接口add_task、complete_task、uncomplete_task、delete_task、get_tasks、get_stats。
任务字段id为UUID字符串，title为非空字符串，completed为布尔值。
JSON顶层为对象，含tasks列表；get_stats返回total、completed、rate，rate范围0至1。
核心源文件SHA-256：72b33149abe9228eed715755af370dd8553ddaf6e89cd19e506fe40feb5d3dd8。
HTML放内容，CSS管外观，JS接事件与存储桥接，web_api.py调用真实TodoCore。
Python在访问者的浏览器里经Pyodide运行，本例没有远端Python服务器。
启动本地HTTP服务仅提供文件，不能用file://直接双击替代HTTP加载。
localStorage键lesson15.browser.v1；刷新恢复同站点任务，不自动跨设备同步。
功能：新增、完成/恢复、删除确认与取消、三种筛选、全局统计、JSON导出。
验收：两条任务完成一条，2/1/1/50.0%；筛选不改全局统计，刷新保留编号和状态。
损坏数据不覆盖，保存失败明确显示未保存；加载中禁止操作，失败有重试。
先做功能基础版并验证，再保存检查点，用设计参考美化，最后回归验收。
不加登录、云同步、JSON导入、撤销删除、发布或付费服务。
没有运行证据的检查只写待验证。不要删除已有数据或用演示任务遮盖错误。

课堂提示词经过教学整理，路径与本起步包一致。
真实备课使用同一Python核心及运行时，但运行时原始路径来自旧项目；实际发送记录另存于网页案例实测目录。
