Slack里报bug,GitHub上出修复

在Slack里用大白话说清一个bug。Okou会写好GitHub issue并指派负责人;如果原因集中在某一个组件上,它还会提一个带修复和回归测试的pull request,交给你审阅。

Okou连接:SlackGitHubLinear

Okou交付的成果:从一条Slack消息到一份待评审的修复

这是Okou团队#bug-report频道里的真实会话,按发生顺序原样记录。一位同事贴上客户的反馈,顺口要了个修复。4分钟后,Okou提交了带诊断结论的GitHub issue。从第一条消息算起14分钟,它开好了PR并发出预览链接。下面是两张截图:起点的那条会话,以及Okou写的PR。它们都是公开的,你可以自己去看issue、代码差异和评审记录。

Okou · 从Slack会话到PR真实运行

会话里发生了什么

一位同事在#bug-report里反馈了客户遇到的PWA布局问题,并附上截图。Okou读完会话,定位到顶栏渲染时没有计入iOS安全区域内边距,随后提交了issue #11708,带上标签和判断依据。会话里提出要修复后,Okou只改了一个文件(给移动端顶栏加上最小高度和安全区域内边距),开出PR #11709并附上预览链接,然后就停在这里。评审和合并由人完成。

从消息到建单
4分钟issue #11708,标签为bug和PWA
从消息到PR
14分钟PR #11709,附预览链接
修复改动的文件数
1由人合并,不是Okou
在GitHub上打开PR #11709

在Slack里创建GitHub issue,到底是怎么回事?

在Slack里创建GitHub issue,意思是把有人在对话中描述的bug,直接变成仓库里一条结构清晰的issue,而不用任何人退出会话去重新敲一遍。难的从来不是调用API,而是写出一个说得清的标题、把复现步骤和预期行为分开、选标签、定优先级、找到对的负责人。这些事由Okou来做:它读你的Slack消息和前后的回复,写出issue正文,打上标签、给出讲得通的优先级,把Slack昵称对应到GitHub账号来确定负责人,最后把issue链接发回同一条会话,报告人扫一眼就能核对。

为什么bug反馈总是死在Slack会话里

有人在演示时发现了一个bug,或者客户周六来信反馈。老路子很长:打开GitHub,找到仓库,按格式写一条issue,指派给人,然后等这个人接手、读代码、写修复。一个十分钟的改动,变成三个人、好几天的来回,而且有一半的反馈根本没走出那条会话。换个做法:你在Slack里把问题说清楚。Okou建好issue,附上复现步骤、标签和负责人;如果原因范围有限,它会接着提一个带修复和测试的pull request。你审阅,然后发布。

Okou如何从Slack创建GitHub issue

第一步:连接你的工具

GitHub
GitHub
必需
通过OAuth连接GitHub。Okou需要读写权限来创建issue;当它能给出修复时,还需要推送分支并开PR。
连接
Slack
Slack
必需
Okou读取你的消息,并在同一条会话里回复。
连接

第二步:交给Okou

Okou建个issue:在定时任务对话框里按ESC会直接关掉,哪怕还有没保存的修改。应该先问一下确认。指派给Lancy。打上bug、platform标签。优先级中。
Okou读整条会话
Okou不只看你那条消息,也看前后的回复,所以三条消息之后才补上的信息同样算数。它会认出该指派给谁,并根据大家实际说过的话推断标签和优先级。
issue建到GitHub上
写好的标题、描述、与预期行为分开列出的复现步骤、受影响的范围、标签,以及从Slack显示名匹配到的负责人。Okou会先查一遍未关闭的issue,遇到重复的就在原条目下留言,而不是再建一条。
Okou定位原因并提交pull request
当会话内容或代码指向同一个组件,并且能先写出一个会失败的测试时,Okou就把修复和这个测试一起写好,把pull request关联到issue,交给CI去跑。做不到时,它就停在issue这一步,并在会话里说明原因。
你审阅后发布
Okou在同一条会话里回复issue、pull request和预览链接,并向负责人发起评审请求。没有任何东西会自动合并,修复会一直等着你。

第三步:再往前一步

顺手修掉它
不只建单,直接开PR
Okou修一下#6260,开一个PR并补上回归测试。关联到对应issue,再把预览链接发到这条会话里。
补充细节
附上截图或复现步骤
Okou给#6260补上复现步骤:1. 打开定时任务弹窗 2. 随便输入一些内容 3. 按ESC。预期:弹出确认对话框。
批量建单
一次创建多个issue
Okou根据这3个bug创建issue: 1. 按ESC关闭弹窗(Lancy) 2. 日期选择器差一天(James) 3. Safari上传头像失败(Yuma)
自动分流
从频道里自动建单
Okou盯着#bugs,只要有人发以「bug:」开头的消息,就自动创建GitHub issue并回复链接。

这套工作流背后的Slack与GitHub集成

这是一套中间放了智能体的Slack与GitHub集成:Okou在Slack里读对话,在GitHub里写记录。每个连接器都单独授权,权限范围只覆盖这套工作流真正用到的部分,所以读取一个频道,绝不等于拿到你仓库的写权限。

Slack

Slack集成:Okou读的那段对话

必需

Okou会读你指给它的那条消息,以及前后的回复,所以晚三条才补上的信息同样会进到issue里。它会带上随消息附来的截图,读取报告人的昵称来确定负责人,并保留消息永久链接,让每条issue都能回到反馈的起点。它只写一件事:在同一条会话里回复issue编号和链接。Okou不会发到别的频道、不会发私信,也不会改动任何人的消息。

GitHub

GitHub集成:Okou提交的那条issue

必需

Okou在你指定的仓库里创建issue:标题是根据反馈重新写过的,而不是照抄原消息;正文包含描述、复现步骤和预期行为,会话里提到受影响范围时也会写上。它会用你指定的标签,或根据措辞推断标签,给出并解释优先级,再指派负责人。提交之前,它会先在未关闭的issue里搜同样的现象,找到匹配就改为在原issue下评论。当它还能顺手修掉这个bug时,会推一个分支,开一条关联关闭该issue并请求评审的PR。写权限只限于你授权的仓库,范围也仅此而已:issue、评论,以及提交评审的PR。Okou不会合并、不会强制推送,也不会碰仓库设置。

Okou、Slack里的GitHub应用、自动化搭建工具,三者的差别

把一个bug从Slack消息搬进GitHub,其实有三步:接住反馈、写出一条能用的issue、把它送到负责人手上。现有方案各自只解决其中一步。

Slack里的GitHub应用

输入/github会弹出一个表单,标题、正文、标签、负责人还是你自己填。它省下了切到浏览器的功夫,但写issue的人依然是你;而对话进行到一半冒出来的表单,正是让人说出「我待会儿再提」的那点阻力。

自动化搭建工具

无代码工具可以在触发器命中时,把一条Slack消息复制成一条新issue。它复制的是原始消息,所以报告人当时怎么打字,issue就长成什么样;而标签、优先级、指派和查重的规则,要你自己逐个频道定义并长期维护。

Okou的Slack到GitHub工作流

Okou读完会话再动手写issue:一个像样的标题,复现步骤与预期行为分开,标签和讲得通的优先级,以及根据报告人昵称匹配到的负责人。当原因收敛在单个组件里时,它会继续往下做,开出带修复和回归测试的PR,关联到issue,等你评审。提交前它会先查未关闭的issue,遇到重复就改成在原issue下评论,然后在会话里回复链接。

让效果更好的几个建议

记得写上负责人的名字,Okou会把Slack昵称对应到GitHub用户名。
想用指定标签就直接说明,否则Okou会根据上下文自己判断。
功能需求同样适用,把「bug」换成「功能需求」就行。
如果你要的不只是一张单子,就加一句「顺便开个PR」。要是问题牵涉面太广、改动不够稳妥,Okou会在会话里告诉你。

常见问题

怎么从一条Slack消息创建GitHub issue?

把Slack和GitHub连到Okou,然后在频道里描述这个bug并Okou。它会读这条消息和周围的回复,写出带标题、复现步骤、预期行为、标签和优先级的issue,在你指定的仓库里创建,指派负责人,再在会话里回复issue编号和链接。你不用填任何表单。

这和Slack里的GitHub应用有什么区别?

GitHub应用给你的是一个待填的表单:标题、正文、标签、负责人还是你写。Okou直接从对话里写出这些内容,提交前会查有没有相同现象的issue,而且可以按计划扫描整个频道,而不是一次只处理一条消息。

Okou只是建单,还是能把bug直接修掉?

两者都可以,而且它会告诉你这次做了哪一种、为什么。issue一定会提交。当会话或代码都指向同一个组件、预期行为没有歧义、并且能先写出一个会失败的测试时,它还会开出带修复和该测试的PR,关联到issue并请求评审。涉及公共工具函数、设计token,或者需要产品决策的,它只建单不改动。Okou从不合并;每一个修复都以PR的形式交到你手上评审。

Okou能自动把issue指派给对的人吗?

可以。Okou会拿你提到的名字,或报告人的Slack昵称,去匹配仓库里的GitHub账号,然后指派。在消息里直接写出负责人是最稳的方式;没人被点名时,Okou会指派给会话所指向那块区域的负责人,并在issue里说明它是怎么判断的。

Okou怎么避免提交重复的GitHub issue?

动手之前,Okou会按相同的现象、受影响范围和措辞搜索未关闭的issue。找到匹配时,它会把这条新的Slack会话连同报告人和时间点作为评论追加到原issue上,并在Slack里回复已有issue的链接,而不是再开一条。

如果bug反馈里没写复现步骤,会怎么样?

Okou照样提交issue,避免这条反馈丢失,同时打上需要补复现步骤的标签,并在Slack会话里向报告人追问。补充上来的答案,就落在那条已经和issue互相关联的会话里。

Okou能定时扫描整个频道来建单吗?

可以。把一个或多个频道指给Okou,再给它一个时间安排,比如每周五下午4点。它会读这一周的消息,为每条描述缺陷的消息提交issue,在重复的issue下评论,跳过功能需求和提问,最后汇报它做了什么。

不用GitHub,换成Linear或Jira可以吗?

只要是Okou连上的跟踪工具,工作流的形态都一样;本页讲的是GitHub这条路径,用的是GitHub连接器。Linear的连接方式相同,你在指令里点名要用哪个工具就行。

下一个bug,不用离开Slack就能建单

连上Slack和GitHub,像跟同事说话那样把bug讲清楚,写issue和指派交给Okou。原因收敛的时候,PR也会一并等着你。

Okou建个issue:在定时任务对话框里按ESC会直接关掉,哪怕还有没保存的修改。应该先问一下确认。指派给Lancy。打上bug、platform标签。优先级中。