fix(flow): triage 输出解析失败 → 单被误判「暂不开工」——应重试或降级放行,而非按业务拒工(今日两例)
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
Research direction
Start with flows/issue_pipeline_flow.py, especially the triage parse-failure handling around lines 138 and 157, then read tests/test_issue15_gh_scan_timeout.py for the suggested test style. Add a targeted test using malformed triage output and trace how the result reaches the rejection path. Done means parse failure is retried or safely downgraded rather than marked as business rejection, with the failure clearly reported and raw output recorded.
Written by the indexing model from the issue text.
Description
场景 gap 单(okguitar 提报)· 优先级 P2 · 依赖:无
基线 HEAD = fabc606(issue-keeper)。
Summary
console 管线(v2.1.1)在 triage 结构化输出解析失败时按「业务拒工」处理:就地发「暂不开工」评论并结束本轮——基础设施性解析故障被表述为业务判断,单被搁置且无人收到告警。解析 fail-safe 的沉淀点在 flows/issue_pipeline_flow.py:138("解析 fail-safe 已沉淀为 plaita-nodes 的 parse_json 节点"),拒工评论模板在 :157("为 GitHub issue 写简短中文评论(直接给正文):暂不开工。")。
证据(今日两例,跨仓)
- jeffkit/issue-keeper#13(2026-10-06T10:55:21Z 评论,run 18:54:16 起、59.3s):
本次分诊返回的输出无法解析,无法据此判断前置条件是否具备…请在查看原始输出后重新派发。——本单是 agentproc#7/#12、im-agentproc#6 等多个 engine_error 的解锁项(setup worktree 缺失族),被解析故障直接搁置。 - jeffkit/web-bridge#2(2026-10-05T20:15:05Z 评论):
本次自动分诊的结构化输出解析失败,无法从原始输出中可靠提取结论,需要人工复核原始输出后再决定是否排期…。
两例均为「解析失败 → 拒工 + 免责声明式评论」,无重试、无告警、无降级路径;每次消耗一个 run 且把待办推回人工。
影响
- 队列延迟(#13 这类解锁项被推迟,会持续吃下游重试);
- 运维噪声(人得逐条「复核原始输出」);
- 与 #5(三态混同)同族病根:把「判不出」与「判为否」混同——但 #5 覆盖的是 screener/置信度闸,本单是 triage 解析路径,不重叠。
建议
解析失败与业务拒工分离:
- 重试一次(重调或 tolerant 解析二遍),仍失败再降级;
- 降级放行或透传:triage 只影响排期建议,不该把单挡在门外——降级为「带注解进入队列(triage 失败)」比拒工更保守;
- 评论口径如实:写明「基础设施故障/解析失败,非业务判定」,并(若接线允许)带告警(如 needs-human 标签/贴内一行);
- 原始输出落盘(例如
<执行记录>/triage-raw.txt),实现侧可复现解析路径。
验收
- 构造 triage 输出不可解析(截断/非 JSON/超长)→ 该单不被标为拒工(重试或降级进入队列),run 记录里有原始输出落盘;
- 评论明示故障性质且与「业务不开工」文案可区分;
- 解析失败不再消耗「暂不开工」路径(可用定向测试钉住,形状同
tests/test_issue15_gh_scan_timeout.py)。
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from jeffkit/issue-keeper
-
Difficulty 4/5 3-5 days Newbie friendliness 15/100
jeffkit/issue-keeper#22 · 3 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
jeffkit/issue-keeper#21 · 3 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 58/100
jeffkit/issue-keeper#19 · 1 comment ·
-
keeper-ignore
Difficulty 5/5 Over a week Newbie friendliness 20/100
jeffkit/issue-keeper#16 · 2 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
jeffkit/issue-keeper#11 · 5 comments ·
All issues in jeffkit/issue-keeper
Similar issues
-
python triage
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
microsoft/semantic-kernel#14590 ·
Maintainers usually reply within 3 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
pinterest/pymemcache#662 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 Half a day Newbie friendliness 62/100
gnocchixyz/gnocchi#1527 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
tenstorrent/tt-model-manager#181 ·
Maintainers usually reply within 1 day