ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Chainlink Flaky Test 修复技能:JIRA 工单语义状态转移协议(transition-ticket)深度解析

Chainlink Flaky Test 修复技能:JIRA 工单语义状态转移协议(transition-ticket)深度解析 Chainlink Flaky Test 修复技能JIRA 工单语义状态转移协议transition-ticket深度解析【免费下载链接】chainlinknode of the decentralized oracle network, bridging on and off-chain computation项目地址: https://gitcode.com/GitHub_Trending/ch/chainlinkChainlink 仓库的tools/test模块内置了一个面向 AI Agent 的 flaky test 修复技能fix-flaky-tests其中 transition-ticket.md 定义了工单状态流转的核心操作接收一个语义化目标状态如In Review、Open解析为 JIRA 工作流中实际存在的 transition 名称后应用。本文完整继承该协议的操作步骤、别名映射表与指派人策略并结合仓库中的技能主文件、JIRA 操作索引与子代理契约讲清它为什么是语义到实际的翻译层、FIXED 工单为什么绝不能取消指派以及它与 claim / abandon 等操作如何拼成完整闭环。1. 背景fix-flaky-tests 技能与 JIRA 工单生命周期tools/test 是基于 testrig 的 Go 测试 harness提供make test ARGSdiagnose ...用于复现 flake、race、timeout。SKILL.md 是 Agent 执行 flaky test 诊断-修复循环的技能入口当用户指定了 JIRA 工单或 N 个符合条件的 flaky-test 工单作为目标时整个工作流就变成领取工单Open → In Progress→ 诊断修复diagnose 循环→ 按结果流转工单FIXED → In Review / ABANDONED、MISMATCH → Open→ 写调查更新评论。其中流转工单这一步由 jira.md 统一调度而具体的状态转移动作委托给本文主角 transition-ticket.md。它被定位为一个可包含引用includable reference自声明输入、步骤与输出供 claim-ticket、abandon-ticket 等操作文件复用。设计动机在于一个工程现实不同团队的 JIRA 工作流命名习惯差异极大——有的团队用 In Development有的用 Active有的把收尾状态叫 Closed有的叫 Resolve。如果协议硬编码某个 transition 名称换一个项目就会直接失败。因此 transition-ticket 采用语义目标 别名表的翻译层设计。2. transition-ticket 核心操作步骤完整继承原文档定义的操作输入是jira_key工单键、target语义目标状态可选accountId当前用户的 Atlassian 账号 ID与original_assigneeslim record 中记录的原始指派人。步骤如下步骤 1查询可用 transition调用mcp__atlassian__getTransitionsForJiraIssue传入jira_key拿到该工单在当前状态下所有可执行的 transition 列表。步骤 2别名匹配将target与返回的可用 transition 做匹配使用第 3 节的别名表并取响应中出现的第一个匹配别名Pick the first alias that appears in the response。步骤 3执行转移调用mcp__atlassian__transitionJiraIssue传入匹配到的 transition ID。对关闭类目标Wont Do、Done如果该 transition 支持resolution字段则设置resolution Wont Do回退值Wont Fix或对应的完成类解决码。步骤 4FIXED 交接特例target In Review 且提供了 accountId这是修复者拥有评审的交接语义调用mcp__atlassian__editJiraIssue设置assignee.accountId accountId即修复该 flake 的 investigator不要取消指派。指派人必须保持为当前用户使工单在 PR 合并前一直挂在对方的看板上对target In Review而言original_assignee仅作信息性字段不恢复、不清空原始指派人。失败路径同样被显式约束claim-ticket 流程规定若转移失败必须回滚取消指派并把失败原因写入 slim record 的skip_reason见 claim-ticket.md 步骤 3保证工单不会停留在半认领状态。3. 语义目标状态与别名映射表原文档给出的别名表是协议的核心数据必须按按序尝试、首个匹配生效的语义使用语义目标按序尝试的名称In ProgressIn Progress, In Development, Active, Start ProgressIn ReviewIn Review, In Code Review, Code Review, ReviewOpenOpen, Reopen, Backlog, To Do, ReopenedWont DoWont Do, Wont Fix, RejectDoneDone, Closed, Resolved, Close, Resolve两条关键规则顺序即优先级表中名称按尝试顺序排列匹配到响应中第一个出现的别名即停止宁错不猜若没有任何别名命中可用 transition协议要求返回错误而非静默挑选一个无关状态return an error rather than silently picking an unrelated state。这是对 Agent 幻觉行为的直接防御——错误比把工单流转到错误状态的成本低得多。从别名表覆盖的名称变体Reopened、Start Progress 这类非常规命名可以推断该协议是针对多个真实团队 JIRA 工作流归纳出的兼容层而非单一环境的约定。4. 指派人策略工单所有权协议transition-ticket 内置了一张指派策略表assignee policy把状态转移和所有权变更绑定成原子约定结果 / 目标状态转移后的指派人FIXED → In ReviewaccountIdinvestigator即修复者ABANDONED → Open取消指派null——见 abandon-ticket.mdMISMATCH → Open若设置了original_assignee则恢复之否则取消指派其中 FIXED 路径的规则值得展开。jira.md 的assignee_rules记录了这条规则背后的教训修复完成后取消指派曾是一个实际发生过的错误行为——当original_assignee accountId即工单本来就是当前用户领的时取消指派会导致领取即修复场景下工单在 In Review 阶段失去 owner。因此协议硬性规定FIXED 工单移入 In Review 时investigator 必须始终是 assignee直到 PR 合并。SKILL.md 的 JIRA 参考部分也重复强调After a FIXED outcome, the ticket must stay assigned to the investigator ... Do not unassign on FIXED。ABANDONED 路径则由 abandon-ticket.md 展开为三步固定序列①editJiraIssue取消指派assignee 置 null→ ② 按 transition-ticket 以target Open流转 → ③ 按 investigation-comment.md 模板写一条 Outcome 为 ABANDONED 的调查更新评论What was investigated 填停止原因其余段落填 N/A。其硬约束是绝不允许已领取的工单停留在 In ProgressNever leave a claimed ticket in In Progress覆盖用户取消、用户跳过、未找到可行修复、所有权冲突、会话提前结束等所有中途停止场景。original_assignee字段来源于 slim record见 slim-record.md在 claim 阶段由getJiraIssue读取fields.assignee.accountId保存无指派人为 null。MISMATCH 路径恢复它是为了把误领/跨仓库的工单交还给原主而 FIXED 路径刻意忽略它因为此时所有权已经合法地转移到了 investigator 手中。5. 在完整调度逻辑中的位置jira.md 的logic段定义了工单操作的总调度用户给出具体 JIRA 工单 → 执行 claim-ticket指派给自己并转移至 In Progress其中就调用 transition-ticket 以target In Progress流转用户要求处理 N 个符合条件工单 → 执行 fetch-flaky-tickets 的 JQL 搜索循环labels flaky-test AND status Open否则按测试名反查相关工单工作结束后无论结果如何对每个工单a. 写调查更新评论b. 按结果转移工单——abandoned →Open经 abandon-ticket 取消指派、mismatch →Open恢复 original_assignee、fixed →In Reviewtransition-ticket 步骤 4 指派给 accountId绝不取消指派。所有调用都必须透传atlassianUserInfo的accountIdabandon / mismatch 时透传 slim record 中的original_assignee。所有数据交换遵循slim record 单传原则absolute_constraints规定永不返回原始 JIRA API 对象调用方只能拿到 slim-record.md 定义的精简 JSON含jira_key、test_namecustomfield_13007、packagecustomfield_13009、previous_attempts、original_assignee、skip_reason以避免反复调用 Atlassian MCP 重复读取同一工单。执行层面SKILL.md 的子代理协议要求与 JIRA 交互时派生JiraManager子代理并按 jira-mananger-subagent.md 初始化——该子代理的系统提示中固化了同样的所有权规则FIXED → In Review: always set assignee to accountId; never unassign其输入契约为{operation, accountId, cloudId}加操作特定字段jira_key、target、original_assignee等缺失必填字段时快速失败返回success: false允许的工具白名单仅含getTransitionsForJiraIssue、transitionJiraIssue、editJiraIssue、addCommentToJiraIssue等只读/工单类 MCP 工具Temperature 固定为 0.0。这解释了 transition-ticket 步骤中那些看似啰嗦的前置参数cloudId、accountId从何而来它们是所有 JIRA 操作的公共前置条件在 jira.md 的operation_requirements中集中声明。6. 适用前提与实操约束MCP 依赖整套协议依赖 Atlassian MCP 可用且已认证否则 jira.md 要求立即停止并提示用户安装/认证不得继续参数来源固定cloudId来自getAccessibleAtlassianResourcesaccountId来自atlassianUserInfo均不可手工伪造与诊断循环的衔接SKILL.md 规定修复后至少要以 Standard profile--iterations 30见其diagnose-iterations表重跑make test ARGSdiagnose ...验证通过才允许进入 FIXED → In Review 流转即 transition-ticket 的 FIXED 入口是有验证门槛的仓库范围技能约束只在core/、deployment/包内免确认跑测试claim 阶段还会做仓库归属校验customfield_13009中的{owner}/{repo}与git remote get-url origin比对不匹配则不领取并写入skip_reason——这与 transition-ticket 的 MISMATCH → Open 恢复原指派人的路径形成首尾呼应。7. 小结transition-ticket 是一个体量很小但设计密度很高的协议文件它用一张别名表解决了跨团队 JIRA 工作流命名不一致问题用首个匹配 未匹配即报错消除了 Agent 的状态猜测用指派策略表把工单所有权随状态转移原子化并针对 FIXED 交接明确了不取消指派的教训式约束。它与 claim-ticket、abandon-ticket、investigation-comment 一起构成 Chainlink flaky test 修复技能中完整的工单生命周期管理闭环其全部设计slim record 单传、子代理白名单、temperature 0.0、fail-fast 契约都服务于同一个目标让 AI Agent 对共享 JIRA 空间的操作可预测、可审计、可回滚。【免费下载链接】chainlinknode of the decentralized oracle network, bridging on and off-chain computation项目地址: https://gitcode.com/GitHub_Trending/ch/chainlink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表