- Python 15 项单元测试通过,包含提子、共享气、禁止自杀、劫、悔棋、双停、自定义题、SGF、演示与反馈保留。
- JavaScript
node --check static/app.js通过。 - HTTP 实测:健康检查、合法落子、旧 revision 返回 409、异源/恶意 Host 返回 403、失败演示不修改原盘、原子保存。
- Playwright 实际点击 D3,接口读取到黑棋 D3;D4 黑棋连块的气从 1 变为 3。
- 在网页输入并点击保存测试反馈,后端读取到同样文字。
- 保留上述局面与反馈后重启服务,board / moves / feedback / revision 全部一致。
- 教师通过接口开始两手演示;网页显示第一手,点击“演示下一手”后读到第二手;点击“返回原局面”恢复原盘和标记。
- 网页点击“请陪练下一手”,本地 KataGo 为白棋返回落子 F4(此次测试结果,重新计算可能不同),move_number 从 1 变为 2;分析接口返回 8 个候选。
- 620px 宽视窗检查:文档无水平溢出,81 个交叉点均有按钮语义。
- 初始 favicon 404 已通过添加本地图标修复,随后导航没有报告控制台错误。
- 最终状态为第一道 escape 题,测试反馈已随切换题目清空。
界面截图:初始棋盘(本地验证产物 output/playwright/first-board.png)。这是早期界面截图,最终版另含逐手演示按钮、棋谱导出链接,以及练习模式禁用停一手。
KataGo 本地运行可用,当前不是校准弱棋对手。没有自动死活裁决和终局数目,没有网页自动唤醒当前 Codex 对话的连接。电脑重启后的自动启动未配置;启动器手动运行,服务重启后的棋局恢复已验证。
- Python 49 项单元测试通过;JavaScript 语法检查通过。覆盖围棋规则、题库、反馈、档案、对局及 LLM 配置与调用路径。
- 64 道练习覆盖逃子、提子、连接与切断;能力调整依据首次独立作答,提示、演示和重复尝试不会重复提升成绩。
- 浏览器实际操作验证:自动反馈、错题补练、“我 / 宝宝”档案隔离、棋盘与文本恢复、刷新与服务重启后保留档案。620px 视窗无水平溢出,81 个交叉点均可操作。
- 浏览器通过真实本地 KataGo 验证自动应手、执白开局、成对悔棋;双人对局、双方共享历史及恢复通过。
- LLM 使用隔离的模拟 OpenAI 兼容接口,验证连接测试、自动讲解及刷新后保留讲解。真实服务未配置,未验证真实供应商响应。
- 正式服务 127.0.0.1:8769 已升级,迁移保留旧棋盘与着手;旧状态另存 .local/state.pre-profiles.json。没有从旧棋局推断学习成绩,LLM 初始关闭。
学习水平是练习表现指标,不是围棋段位;终局自动数目与电脑重启自启动仍未实现。
- 93 项单元/HTTP 测试通过,Python 编译和 JavaScript 语法检查通过。
- 新增 8 个原创多手吃子局面,旋转/镜像归一后仍为 8 个不同布局;3 题含对手不同应手分支,两题为 7 手征吃。每条答案回放验证合法落子和实际提掉目标,倒扑验证先弃一子再提三子。
- 多手练习中间不记成绩,完成后才评分;未收录合法走法不判错。覆盖成对悔棋、重练分支轮换、跨档案恢复、离开未完成题后回来不冒充首次独立作答。
- 导入校验覆盖黑/白先、9/19 路、重复题号拒绝、非法答案拒绝、来源保留、重载持久化;网页/API 状态不泄漏答案树。
- Playwright 实际点击验证:三手双打吃、重试时白应变化、未收录走法待复核、七手征吃完成、9 路 JSON 导入并刷新恢复。
- 19 路实际点击验证:361 个交叉点、T1 与 T19 落子、SZ[19] SGF、19 路白先导入题提子、真实 KataGo 自动应手及刷新恢复。620px 视窗与放大模式均无全页横向溢出,放大棋盘可在容器内滚动。
- 正式 8769 服务已更新,72 个可练版本(64 基础变式+8 多手原创)可读取;服务重启前后 profiles.json 内容一致,旧学习档案保留,本次测试题仅在隔离目录。
截图:19 路人机对弈(本地验证产物 output/playwright/v3-19-ai.png)、19 路小窗口放大(本地验证产物 output/playwright/v3-19-narrow.png)、多手吃子完成(本地验证产物 output/playwright/v3-tactics.png)。
边界:照片识别需把图发给 Codex,目前未收到真实书题图片;导入支持吃子目标,尚不支持通用做活/破眼评分。答案树校验不证明全部防守或唯一最优解。
截图和测试运行数据仅留在本机,不随源码仓库发布。
- 125 项 Python 测试、29 项 Node/SQLite 测试通过;包括 HTTP 边界、实际 SQL 事务 CAS、登录限速、密钥加密、多标签档案一致性、结果只计一次和主备计算切换。
- 原生浏览器/Wrangler 集成:家庭登录、每设备独立档案、并发落子 200/409、双方确认后一次更新 Elo、同浏览器旧档案标签页提交 409、19 路触屏预览确认及 390px 页面无溢出。
- GoGameGuru 固定版本归档 420 原题,417 启用;所有启用题的作者正解树逐条回放通过。云端可选 489 题,3 道旧题号继续兼容但不重复列入选择器。许可、作者与原题链接可在来源行查看。
- Cloudflare Workers/D1/自定义域名已真实部署。家庭生产库由 CLI 迁入 2 个档案、6 次作答、1 盘对局,并回读确认;正式测试不制造新成绩。本机原档案保留,照片与 LLM 配置未迁移。
- 生产浏览器只读核验:489 题与原记录可读;manifest、SW、PNG 均为正确 MIME;SW 仅缓存 9 个公开静态 URL,无 API 缓存;退出后会话失效、私密 DOM 清空,未发现 JavaScript 异常。
- fnOS 主力运行官方 Eigen AVX2 KataGo v1.18.1 + b18,4 搜索线程、单分析队列、最多 64 visits/3 秒;CPU 基准热请求约 3.15 秒、冷启动 4.55 秒、峰值 547 MiB。多数请求先触发时间上限,约 36–47 visits。
- VPS 后备运行相同引擎 + 扩展训练 b10,2 搜索线程、单分析队列;CPU 基准热请求约 1.4 秒、冷启动 2.15 秒、峰值 100 MiB;两条不同请求排队约 2.88 秒。性能不等于人类段位标定。
- 公网实际主备演练:正常 fnOS 返回 200(2.85 秒);只暂停本项目 fnOS 引擎后 VPS 返回 200(3.17 秒);恢复引擎后下一次请求回到 fnOS 并返回 200(9.58 秒,含冷启动和网络)。全过程只读分析,正式棋局未增加着手。
- 两端均通过独立鉴权 Tunnel,桥接只监听回环地址;健康探测不启动引擎。fnOS Docker
unless-stopped与 VPS systemd enabled 已配置,服务停止/恢复路径已验证;没有为验收重启整台 NAS 或 VPS,因此不把配置等同于整机重启实测。 - 线上发现 Workers 不支持
redirect: error,现采用manual并显式拒绝跳转,令牌不转发到其他地址;引擎与 LLM 的 302 拒绝路径有回归测试。CLI 使用明确的Go-Coach-CLI/1.0User-Agent,通过真实 Cloudflare API 路径。
边界:LLM 真实供应商仍未配置,仍由用户自行启用;书题原图尚未提供;离线 PWA 不提交或排队重放棋步;正式手机/iPad 的“添加到主屏幕”安装尚需在实际设备完成。练习等级和站内 Elo 不代表正式段位,终局仍不自动裁决死活和数目。
最终人机浏览器验收:隔离的本地 Worker 使用真实 fnOS 计算服务,19 路人下 D4 后仅发送一次 ai_move,棋局共 2 手,状态和页面均显示 fnOS 主力;生产只读分析返回 200/fnOS,来源许可链接可用,棋盘及 revision 未变。测试浏览器已关闭,本次未改变 Mac 正式本地 8769 服务。