Files
Agent-System/.doc/audit/2026-09-13-document-revision-quality-repair-workspace-contract.md
T
weichenandCursor 9345109dca docs(ops): archive completed document-revision session files
Move done DOCREV short-terms, checklists, and handoffs into archive/ops and retarget relative links after Round20 close-out.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 00:27:18 +00:00

3.4 KiB
Raw Blame History

title, status, created, updated, severity
title status created updated severity
UI-03 质量修复子工作区越界改写根 output.md in_progress 2026-09-13 2026-09-13 high

UI-03 质量修复子工作区越界改写根 output.md

现象

第13轮 Antigravity 完整 UI(schema 30,dev@8b1a531 基线):UI00–02 PASS,UI-03 真实 PI 终态 quality_failed,页面 70 分、缺少必填章节「阻塞信息 / 非阻塞信息」。

真实工作区 /app/data/workspaces/bizdev/intake_1789329815528283509:

  • tasks/03_review/output.md 于 20:07:02 确实没有两个章节;质量门禁判定正确,不得放宽必填章节。
  • EnsureQualityOrRepair 创建 tasks/repair_1,TASK.md 同时写「参考 ../../template.md、基于 ../../output.md、输出到 output.md」。
  • 真实模型读取父级文件后,edit 写了 tasks/repair_1/../../output.md(根 output.md);根文件 20:07:24 已补齐两章节。
  • tasks/repair_1/output.md 从未生成;runner 目标仍是本地 output.md → missing target → runOneStep 失败 → EnsureQualityOrRepair break → manifest 保留原 70 分。
  • runner execution.log 的 Outcome: SUCCESS 只是模型 settle,不代表目标契约成功。

根因分析

层 问题 后果
TASK 契约 修复步骤把输入写成 ../../output.md / ../../template.md 模型按字面去 edit 父级
沙箱 buildSubWorkspaces 对 template/blackboard 建 symlink 子目录写同名文件会打穿父级
Needs 只在 TASK 里列 ../../need,不把原稿快照成非目标文件名 若复制成本地 output.md 会假成功;当前则诱导越界
成功判定 只认本地 output.md(正确),但失败后不恢复被改的根文件 根文件「看起来更好」却不覆盖/不重验,页面仍 70
提升谓词(独立审查) 曾在 runErr != nil 或 containment 后仍因 localOK 提升 截断产物或越界轮次会被当成修复成功
settle 内部 Outcome SUCCESS ≠ 本地目标存在 不得把 settle 当交付

MatchDeliverableRel 已拒绝 ../,因此 missing-target fail-closed 正确,不能因此把越界根文件当成功。

严重度

high

自动修复轮空转:模型可能已经写好章节,契约失败导致任务 quality_failed。

关联整改

证据

  • 失败证据(根代理保留、本轮不得改/移/删/提交):.doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui03-required-sections-quality-failure/

开放问题

  • 本轮不跑真实 UI-03;不得标 E2E 通过或任务 done
  • 默认子步骤仍可用 ../../ + symlink(未改正常步骤读本地 context 的路径)
  • 剩余风险(保护范围):containment 只快照/恢复 output.md / template.md / blackboard.json。模型改写其它父级文件(如 PLAN.md、其它 tasks/*)检测不到、不会回滚。创建/删除这三份受保护输入已计入 mutation。