Files
Agent-System/.doc/audit/2026-09-17-adhoc-verification-script-empty-path-join.md
T
weichenandCursor 748df016b2 docs(ops): release rdev merge slot, archive P0/P1 task, register S1续批
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>
2026-09-17 09:52:24 +00:00

2.0 KiB
Raw Blame History

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)的兜底逻辑:

  1. ws_id = pi_result.get("workspace_id") or "" 在响应无该字段时得到空串;
  2. Python pathlib:Path(bizdev_root) / "" 坍缩为父目录本身(无报错);
  3. 随后 root.rglob("output.md") 扫遍共享 data/dev/workspaces/bizdev/ 全树;
  4. 「取最长文本」启发式选中历史商务任务终稿并误归档。

证据:会话内 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)

开放问题

  • 无。