Files
Agent-System/.doc/ops/short-term/2026-09-28-quality-gate-heading-mismatch.md
T
weichen 5c0a84f7ed docs(task): 记录调研报告已投影到项目 6024
可行性阶段重跑通过质量门禁,受控文档 head 与 work_dir 已更新。
2026-09-28 07:10:45 +00:00

6.4 KiB
Raw Blame History

title, task_id, status, created, updated, owner, task_type, policy_revision, branch, worktree, base_dev_sha, write_scope, mutex, review_state, integration_state, deployment, cleanup, remote_sync
title task_id status created updated owner task_type policy_revision branch worktree base_dev_sha write_scope mutex review_state integration_state deployment cleanup remote_sync
质量门禁章节标题漂移不再误判缺章 quality-gate-heading-mismatch-2026-09-28-r3 done 2026-09-28 2026-09-28 Cursor fix AGENTS.md + agent-worktree-workflow @ 2026-09-21 fix/quality-gate-heading-mismatch-2026-09-28 .worktrees/quality-gate-heading-mismatch-2026-09-28 434d542c3c
internal/squad
internal/coordinator
.doc
quality-gate-heading accepted merged_local_dev loaded_host_dev pending not_requested

质量门禁章节标题漂移不再误判缺章

用户目标与授权

dev「吞咽电刺激」调研报告已写完,助手称已生成,界面却是「质量未通过」,受控文档没有更新。用户要求先确认失败原因;若只是项目信息仍在迭代,不得因此判质量不通过,并给出可落地修复。用户确认:标题做归一化并跨 H2–H4 匹配;聊天触发任务默认打开质量自动修复;门禁修复合入后重新发起调研报告。

检索

  • 检索词:quality_report、缺少必填章节、extractHeadings、质量未通过、AutoRepair。
  • 命中 ISSUE-20260928-quality-failed-success-copy:同步回复在质量失败时不得写宿主机路径、不得声称已完成。当前 formatTriggerTaskReply 已把非完成态交给 CompletionSummary,本任务不改这句文案,只补聊天链路的 AutoRepair。
  • catalog overlap 语义层无命中。注册时若绑定 intent,会与仍为 active 的 agent-reply-llm-narrative-2026-09-28(scope internal+.doc)以及若干 scope . 的 integrate 任务发生 same_scope。该叙述任务改过 engine_task.go 的返回包装,与本次 TaskRunRequest 字段不在同一行。本次因此不绑 intent/mutex 到目录库,mutex 只写在 CURRENT 认领行。首个 task id 因 scope 不含 .doc/ops 无法认领,已 cancelled,改用 quality-gate-heading-mismatch-2026-09-28-r2。

根因

research_1790566833205199368/manifest.json 的 quality_report.passed=false,唯一违规是缺少「技术路线与 State-of-the-Art」。终稿该节在 output.md 第 279 行,标题是 ### 技术路线与State-of-the-Art:层级降成 H3,且「与」后少了空格。门禁原先只抽 H2,清洗序号后做字符串精确相等,因此把格式漂移当成整章缺失。评分 85 仍高于 80,但缺章直接 Passed=false。

质量失败后 finalizeSquadDeliverable 按设计不投影受控文档,所以正文留在隔离工作区、项目文档不更新。这次 workspace.json 的 project_id 为 0,docID 为空,聊天触发又没设 AutoRepair,修复轮为 0。

门禁不检查「待确认」数量。信息还在迭代补齐,不是这次失败的原因。

修复

  • 模板 H2 与正文 H2–H4 按归一化标题比对:去掉全部空白(含全角空格)、全角 ASCII 折半角、英文字母小写。只在 H3/H4 命中时记「章节层级与模板不一致」,不扣分、不阻断。归一化后仍没有的章节继续判缺失。
  • handleTriggerTask 设置 AutoRepair: true,修复轮上限仍是 DefaultMaxRepairRounds。
  • module-boundaries.yaml 为 coordinator 补上已有的 projectworkflow 依赖。该 import 在基线 434d542c 的 engine_task.go 里就存在,本 diff 没有新增 import;block 模式基线计数为 0,不补允许项则门禁对当前 dev 也是红的。

同类

dev 历史 passed: false 工作区里,test_manager_1790215680339783789 的「签署/说明」是「十一、」「十二、」序号,现有序号清洗已能对上。intake_1789329815528283509 当前正文已有「阻塞信息」「非阻塞信息」H2,不能用现状复现当时的缺章。intake_1789269755280857331 模板要「正文」,成稿没有这个标题,缺章判定仍然正确。

验收

单测覆盖:空格/全角/大小写漂移通过且有层级软警告;真实缺「正文」仍失败;聊天触发 AutoRepair=true;质量失败回复不含「已完成生成」。报告见 质量门禁标题漂移测试报告。

代码已合入 local dev 650703c5。当时 dev 实际进程是宿主 bin/agent-server(data/dev/pg 占用 5433),compose 重建绑不上该端口。已按 launch.sh --no-docker 重建宿主二进制并换到新会话;二进制含「章节层级与模板不一致」。

重跑

摸底文档 doc_proj6024_bd_intake 已是 approved,阶段就绪 can_advance=true。已把工作流实例 12 从 V0.1_triage 推进到 V0.5_feasibility,再以项目 6024 发起 bd_research。

  • 运行 run_1790578236273253115,工作区 bd_research_1790578240073269711,workspace.json 的 project_id 为 6024,状态 completed。耗时约 16 分钟。
  • manifest.json 的 quality_report.passed=true,score 100,title_check true。终稿该节是 ## 五、技术路线与 State-of-the-Art,序号清洗后与模板对齐,没有再报缺章。
  • 受控文档 doc_proj6024_bd_research 从无 head、无 work_dir,更新为 head_snapshot_id=62、content_sha256=a1a7f41b17ded92f659a32e35b9652435c36a61f22049152df795df7dc4a5b73、work_dir=data/dev/workspaces/bizdev/bd_research_1790578240073269711。状态仍是 drafting。

ISSUE-20260928-quality-heading-drift

  • 预期:模板要求的章节只要正文里有同名内容,就不因空格或降为 H3/H4 被判整章缺失。
  • 实际:调研报告终稿被判缺少「技术路线与 State-of-the-Art」,评分 85,文档不投影。
  • 状态:resolved。单测覆盖 H3 与空格漂移。dev 重跑 bd_research_1790578240073269711 的 project_id=6024 且 quality_report.passed=true,受控文档 head 与 work_dir 已更新。这次成稿标题本身是 H2,活体没有再踩到层级漂移。

ISSUE-20260928-data-dir-doubled

  • 观察:存在 data/dev/data/dev/workspaces/bizdev/intake_1790565513115586191/output.md,该目录没有 workspace.json。正确工作区在 data/dev/workspaces/bizdev/intake_1790565513115586191/。
  • 假设:某处把已含 data/dev 的 DataDir 又拼了一次。未沿调用链证实,本任务不修。
  • 状态:open。复查触发:下次出现交付路径含 data/dev/data/dev 时沿写入点追查。