Also record the ad-hoc verification Path("") join pitfall as a low-severity
audit note so future sampling scripts fail closed instead of scanning bizdev/.
Co-authored-by: Cursor <cursoragent@cursor.com>
2.0 KiB
2.0 KiB
title, status, created, updated, severity
| title | status | created | updated | severity |
|---|---|---|---|---|
| 临时验证脚本 Path 空字符串拼接导致跨任务取证串味 | done | 2026-09-17 | 2026-09-17 | low |
临时验证脚本 Path 空字符串拼接导致跨任务取证串味
现象
S0.3 真 PI 打样归档时,rd_design_input_spec-final.md 一度被写成无关客户的商务对标报告(「掌上无线超声系统 × GE Vscan / Philips Lumify」),而非设计输入规格书终稿。
根因分析
产品侧小队/工作区创建正常:失败的 rd_* 请求因 main-completed 硬 precheck 拒绝,task_runs.WorkspaceID 如实为空。
缺陷在本地临时取证脚本(.doc/test-reports/assets/2026-09-17-rdev-template-depth/run_s0_*.py)的兜底逻辑:
ws_id = pi_result.get("workspace_id") or ""在响应无该字段时得到空串;- Python
pathlib:Path(bizdev_root) / ""坍缩为父目录本身(无报错); - 随后
root.rglob("output.md")扫遍共享data/dev/workspaces/bizdev/全树; - 「取最长文本」启发式选中历史商务任务终稿并误归档。
证据:会话内 task_runs 失败记录 WorkspaceID="";Path('/a/b') / '' == Path('/a/b') 可复现;误归档文件内含 adhoc_GEVsca_... 工作区路径。
严重度
low — 仅本地取证脚本;未污染产品库、未改小队/黑板创建逻辑;同轮已用精确工作区路径重归档并随测试报告提交干净终稿。
关联整改
- 无需产品代码改动。
- 经验红线:临时验证脚本禁止「空路径拼接 + 全树
rglob+ 取最大值」组合;work_dir/WorkspaceID为空时必须失败退出,不得扩大搜索范围。
证据
- 正确终稿:
.doc/test-reports/assets/2026-09-17-rdev-template-depth/rd_design_input_spec-final.md - 测试报告:
.doc/test-reports/2026-09-17-rdev-template-depth-test-report.md - 工作区 ID 生成:
internal/squad/workspace.go(ws_%s_%d+ UnixNano)
开放问题
- 无。