Files
dstalk/agents/audits/W11.7-destructive-test.md
XiuChengWu bb2e8c0220
Some checks failed
CI / Determine matrix (push) Has been cancelled
CI / ${{ matrix.os }} / ${{ matrix.build_type }} (push) Has been cancelled
Wave 8: tech-debt audits, core unit tests, CLI pipe input (W11.1-W11.7)
- W11.1 context_plugin audit (architect-huang): 3 findings on ABI exception
  safety, strdup null checks, dead g_max_tokens variable. Rating: B.
- W11.2 config audit (engineer-chen): identified 74-line TOML parser
  duplication between config_plugin and config_store, dual-store data
  isolation, dangling c_str() risk. Rating: C.
- W11.3 event_bus + service_registry unit tests (qa-liu): 12 cases total,
  ctest coverage 2 -> 4 targets, 100% pass.
- W11.4 CLI stdin pipe mode (engineer-zhao): isatty detection, single-shot
  inference path with exit codes 0/1/2/3.
- W11.6 scripts/refresh_status.py (engineer-li): 431-line generator that
  scans 16 profile.md + 5 group.md to regenerate STATUS.md.
- W11.7 destructive testing (qa-xu): 10 input scenarios PASS, found bin
  copy mismatch (BUG-1) plus 3 minor UX bugs for follow-up.

Verified: cmake build 0 error, ctest 4/4 pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 09:06:25 +08:00

54 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 promptAI 不可用报错不崩溃 |
| 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) |