From 630efa88e6506e9ed8fd22055a842e2bb010ac1c Mon Sep 17 00:00:00 2001 From: bboonnee Date: Wed, 5 Aug 2026 23:40:01 +0800 Subject: [PATCH] gap-analysis doc: record the UI bug batch (log viewer, skill detail, artifact click-through) --- docs/implementation-gap-analysis.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+), 0 deletions(-) diff --git a/docs/implementation-gap-analysis.md b/docs/implementation-gap-analysis.md index b8058da..dbd0803 100644 --- a/docs/implementation-gap-analysis.md +++ b/docs/implementation-gap-analysis.md @@ -139,6 +139,68 @@ gap,但**全局而非按项目的并发统计**是不是有意为之,值得æ --- +## 7. 控制台 UI Bug 批次(2026-08-04/05,用户直接提供的 9 条清单) + +跟第 6 节的系统性 gap 不同,这批是用户实际用控制台时记录的具体 UI/体验问题。逐条排查代码现状后,分成三类处理: + +**7.1 已修复(3 条,全部真实走 graphlemon 自举流程,非人工改代码)** + +- **Bug1+Bug6(合并成一个任务,同根因)**:Graph 页面日志区域永远显示"暂无日志内容";下载完整日志报错跳 + 到不存在的页面。根因:`execution_log.append_log()` 函数本身完整,但生产代码从来没有调用过它,`execution_log_file` + 磁盘文件从未被真正写过内容——前端显示空是对空数据的正确反应,下载报错是 `_send_file_download()` 没接 + `FileNotFoundError`。**修复**:把 `append_log()` 接入 `work_graph_orchestrate.py` 的 `_make_run_fn()`(`conn` + 一路传进去),节点开始/完成/失败/限流各写一条真实日志事件;下载接口补上干净的 404 处理。**真实验证**:修复 + 合并后新起的任务,实时查询 `GET /api/work-nodes/:id/log` 真的能读到 `{"event": "node_start", ...}` 这类真实内 + 容(不是靠 Validator 报告,是我自己在这批任务运行过程中直接查询确认的)。 +- **Bug8**:`http://.../#/skills` 页面点击 skill 只显示"当前没有迭代记录",真实内容不显示。根因:`skill_query.py` + 只读 DB 里的 `skill`/`skill_iteration` 表(迭代记录,本来就是空的没错),从没有函数读 `skills//SKILL.md` + 这批磁盘上的真实内容(就是本文档 6.2 节顺序 3 那次迁移进来的)。**修复**:新增 `get_skill_content()`,**两层路 + 径穿越防护**(`realpath` + `commonpath` containment 双重校验,防止 `skill_id` 里带 `../` 跳出 `skills/` 目录); + Validator 用真实编码攻击字符串(`%2e%2e%2f`、`..%2f..%2f` 等)对着一个真实放在 `skills/` 外面的"秘密文件"验 + 证过防护确实拦得住;前端新增的"Skill 内容"面板跟已有的"迭代记录"面板并列展示,不是二选一。 +- **Bug2**:Planner 产出总览的文件/代码列表项点击没反应。根因:`renderArtifactSummaryList()` 渲染纯 `
  • `,零 + 点击事件。**修复**:列表项加 `data-artifact-id` + 点击跳转,复用已有的 `v_artifact_browser`(`c_artifact_get`), + 没有重新建一套内容展示机制;"查看全部"跳未过滤列表的既有行为原样保留。Validator 自己搭了一个 DOM/fetch 模拟 + 环境做端到端验证,中途发现自己搭的验证环境本身有 bug(不是被测代码问题),先修好验证工具再继续判定。 + +**7.2 明确不建任务、需要先讨论设计(2 条,按用户要求保留)** + +- **Bug3**:用户想把 Coder/Validator 的 Work Graph 规划提前统一到 Planner 阶段一并产出(brd-prd-sdd-benchmark- + workgraph for other org agent)。代码现状核实:`e2e_pipeline.py` 的 `implement_code()` 目前永远用一个写死的 + 单节点合成 manifest 调用 Coder,`work_graph_plan.py` 的 Prompt/依赖链模板硬编码死了 Planner 自己那固定的四节 + 点链,没有任何机制能扩展到覆盖其他 Agent;Validator 完全不用图。这跟第 3 节"Coder 阶段的多模块 Work Graph + 规划"是同一个此前就被判断为"超出范围的新能力"的口子,这次用户的诉求更进一步(不只是 Coder 自己会规划,而 + 是 Planner 统一规划全部三个 Agent 的图)——**没有创建 task**,属于设计决策,需要先讨论方案。 +- **Bug9**:Org-level Loop 的迭代(Validator FAIL → 重新规划/修复)应该怎么在图上展示。代码现状核实:并非从零 + 开始——`task.work_graph_runs` 本来就是一个 run 一个独立 DAG 面板,多轮 loop 天然会产生多个面板;`task.route` + 会渲染一条"重试环"的标注边。缺的是跨轮次面板之间的视觉连接,以及标注边只反映当前单一 `route` 值、没有按轮 + 次的历史。**没有创建 task**,属于设计决策,需要先讨论怎么呈现比较合理。 + +**7.3 尚未处理(Bug4、Bug5、Bug7,本次会话未排)** + +- Bug4(Org Graph 节点不可点)、Bug5(运行历史点击跳错地方,缺一整个运行详情/日志页含实时 tail -f)、Bug7 + (导航栏缺项目名+任务看板小 dashboard)——代码层面已经排查过根因(见本节对应研究记录),规模从"中"到"中 + 大"不等,Bug5 是真的缺一整个新页面,不只是接线问题。留待下一批处理。 + +**7.4 这一批顺带修复的两个基础设施 bug(不在原始 9 条清单里,运行过程中真实遇到才发现)** + +- **`manual_resume` 之前只对用户主动暂停/停止生效**:一次真实网络瞬断(`ENOTFOUND`)导致任务 `execution_error` + 阻塞,resume 后只是状态翻回去、没有真的续跑,`/execute` 又要求 `status=queued`——resume 完两边都够不着,卡死。 + 改成除 `budget_exceeded`/`loop_limit_reached`(两者各有专属续跑路径)外,其余原因 resume 后都真的会自动续跑。 +- **`scheduler.run_goal_to_completion()` 对不可路由异常没有兜底**:一次真实"API Response stalled mid-stream" + 错误(`WorkGraphExecuteError`,不在 `_ROUTABLE_EXCEPTIONS` 里)直接把调用进程崩溃,任务卡在一个既不运行也不 + 是 `blocked_pending_human` 的真空状态,`blocked_reason` 是空的,控制台上没有任何入口能恢复它。补了一个跟 + `task_execution._mark_blocked()` 对称的兜底:任何未路由异常现在都会落成 `blocked_pending_human` + + `execution_error` + 真实错误详情,不会再无声卡死。 + +**7.5 `test_deploy_rollback.RollbackPathBFailureTest` 的偶发失败,证据升级**:第 6 节顺序 3 时第一次被 Validator +报告失败、我本地复现不了;这次顺序 B 又被独立报告了一次失败(且这次 Validator 自己检出了 diff 前的父 commit +确认那个版本上同样失败,证实与本次改动无关)。**累计三次不同的真实会话报告失败,我自己手动重跑始终 3/3 通 +过**——不再当成"偶发、先不管",升级成"确认存在、待专门排查",很可能还是这个套件已知的孤儿进程/资源竞争类 +问题,但没有再深挖根因。 + +--- + ## 最值得关注的三条 1. 调度器没接入生产入口,系统还不是真正自驱动的(第 2 节)。 -- libgit2 0.21.4