# W11.7 破坏性输入测试报告 **测试人**: 徐磊 (qa-xu) **日期**: 2026-05-27 **被测二进制**: `build/dstalk-cli/dstalk-cli.exe` (MD5: 803ca2ea) **源 Commit**: `004a81d` (Wave 7: W10.1-W10.4) **测试环境**: Windows 11 Pro, 无 API key, 无 config.toml, 无 plugins/ ## 测试结果汇总 | # | 场景 | 结果 | 退出码 | 备注 | |---|------|------|--------|------| | 1 | 启动+EOF (空pipe) | PASS | 0 | 直接进入 shutdown,干净退出 | | 2 | 空字符串回车 | PASS | 0 | fgets→len==0→continue 正确跳过 | | 3 | 10000 字符超长行 | PASS | 0 | 截断警告正常触发,剩余字符 drain 正确 | | 4 | 纯空格/纯Tab | PASS | 0 | 被当 AI prompt,AI 不可用报错不崩溃 | | 5 | 未知 /command | PASS | 0 | "未知命令" 提示正常 | | 6 | /status + /history 无session | PASS | 0 | /status 正常显示默认值;/history 报 "session service unavailable" | | 7 | 中文+emoji prompt | PASS | 0 | UTF-8 无问题,AI 不可用报错不崩溃 | | 8 | ASCII 控制字符 \x01-\x08 | PASS | 0 | 被当 AI prompt 处理,无崩溃 | | 9 | /quit 后重启 | PASS | 0,0 | 两次启动无残留状态 | | 10 | 空 stdin (printf '') | PASS | 0 | fgets 立即返回 NULL,干净退出 | **结论: 10/10 全部 PASS,零崩溃,零 hang。** ## 发现的 Bug ### BUG-1 [CRITICAL] build/bin/dstalk-cli.exe 是损坏副本 - **MD5**: d8e8c92b (67,072 bytes) vs 正常 803ca2ea (66,048 bytes) - **症状**: 所有命令(含 /help、/quit)被当 AI prompt 处理;任何输入退出码固定为 3;错误信息是英文("AI or session service unavailable")而非正常的中文 - **推测**: CMake install/post-build 步骤拷贝了不同版本源码编译的产物,类似 PM-001 stale obj 模式 - **影响**: 任何人若按文档路径 `build/bin/dstalk.exe` 运行将得到完全不可用版本 ### BUG-2 [MEDIUM] /clear 在 session 不可用时谎报成功 - `main.cpp:168-172`: `if (g_session) g_session->clear()` 后无条件 `printf("[OK] 会话已清空")` - g_session==null 时也打印成功,误导用户 ### BUG-3 [LOW] /context 在 session 不可用时静默无输出 - `main.cpp:175-185`: 仅 `if (g_session) {...}` 无 else 分支 - 用户输入 /context 后零反馈,不知所措 ### BUG-4 [LOW] /file write 裸命令被当未知命令 - `strncmp(line, "/file write ", 12)` 要求尾部空格,`/file write` (无参) 匹配失败落入"未知命令" - 应给用法提示而非未知命令 ## 变更历史 | 日期 | 版本 | 变更 | |------|------|------| | 2026-05-27 | 1.0 | W11.7 破坏性测试,10 场景全 PASS,发现 4 个 bug (1 critical) |