第15讲 网页待办运行说明

1. 从起步素材重做
解压lesson-15-starter.zip，在Comate“新任务→日常任务”选择lesson15-starter目录。
按课件通用模板→本案例的顺序分轮发送，先确认现有文件和计划，再批准实现。
起步包只有桌面源码、上下文和本地Pyodide运行资源，没有预先完成的网页。
课堂提示词是实际Comate过程的教学整理，回复、耗时和生成文件细节可能不同，仍须实测。
设计参考另开任务，点输入框下方“技能”，选中Canvas交互式产出物后发送。
不要只在消息正文中写技能名就认为已调用。若技能缺失，使用下载的设计要求作替代输入。
参考稿不是Python应用；将审核后的设计要求交回开发任务美化，再复验。

2. 查看已完成案例
解压lesson-15-todolist-browser.zip。基础版和成品版分别包含完整运行文件。
在所选版本文件夹打开终端，运行：
python3 serve.py
浏览器打开：http://127.0.0.1:8795/
要求本机有Python 3用于本地HTTP服务；业务代码实际在浏览器的Pyodide中运行。
不是Tk桌面窗口，不要求安装Flask、Streamlit或Node，不需要外部CDN。
首次加载需读取约13MB本地运行资源，短暂等待Python就绪。
不要双击index.html用file://代替HTTP入口。
同一时间只运行一个8795服务。结束时在启动它的终端按Ctrl+C，再启动另一版本。
若8795已占用且不便停止原服务，可在所选目录另开一个仅本机的端口：
python3 -m http.server 8796 --bind 127.0.0.1
随后打开http://127.0.0.1:8796/。更换端口会改变浏览器存储所属站点，不会自动带上原任务。

3. 演示数据与保存
默认空列表，使用虚构任务“完成Python练习”“整理课堂笔记”，完成第一条后为2/1/1/50.0%。
筛选仅改变显示，统计基于全部任务。刷新同一站点后任务恢复。
localStorage键为lesson15.browser.v1；同一站点下基础版与成品版共用此键。
不要在录制中假定打开另一版必然空白，也不要为恢复空白清除个人数据。
同时开着两版时，另一页若保存了新任务，旧页继续变更会提示“其他页面已更新，请刷新”。请先刷新再操作，不反复点按钮。
该保护不是多人协作或跨设备同步；录制时建议只保留当前操作的一版。
任务不随源码压缩包传递，不自动同步到其他浏览器、设备或域名。
“导出JSON”下载任务备份；本轮没有导入功能，也不宣称已有从桌面JSON自动迁移的入口。

4. 实测边界
Python核心与桌面版SHA-256相同，基础版与成品的web_api.py、bridge.js也保持一致。
Comate产出网页并修复了真实筛选aria-selected问题；Canvas真实加载并打开参考稿。
Canvas文件产生后出现重复工具调用，备课时已主动停止；这不代表每次生成会完整自动收尾。
原始制作中一条删除/tmp/tasks.json的命令被取消，未执行；未修改系统安全设置。
当前实测和未验证项见同目录课程验收记录；目标清单不是通过结论。
本讲只完成本地网页，不代表已经上线公网或可以跨设备同步。

参考资料：Pyodide官方文件系统说明
https://pyodide.org/en/stable/usage/accessing-files.html
