在架构所在之处讨论架构
有人注意到 Billing 直接写入 ledger 数据库,而 ADR-12 规定只有 Ledger API 可以这样做。他在一个 Slack 线程里提问。两条回复,一句"发现得好,我去看看",到午饭时线程已经滚出了视野。一个月后,那条箭头还在图上,ADR-12 读起来仍像从没有人质疑过它,而说"我去看看"的那个人已经调去了别的团队。问题被提出了,也得到了回答,只是在一个架构看不见的地方。
这就是我们这周处理的缺口。10 月 18 日,我们发布了六个功能,把关于架构的对话搬进模型本身:固定在图上的评论、@提及、带"被引用于"列表的 # 引用、应用内和 Slack 中的链接预览、关注,以及任务。每一个都把讨论挂到它所讨论的元素、决策或页面上,而且全部汇报到我们 10 月 10 日加入的收件箱。
同一个问题,在模型里提出
下面把那个 ledger 问题用这次发布的功能再走一遍。名字和项目是示例,行为是产品的真实行为。
Marie 在看到问题的地方固定它。 她正在 container 层级审阅 Checkout 项目。她按下 C,光标变成十字准星,然后点击从 Billing 指向 Ledger DB 的箭头。关系的中点处打开一个评论框,她写道:
Billing writes to Ledger DB directly here. #ADR-12 says ledger writes
go through the Ledger API. @Sam, is this still intended?
输入 # 时打开了项目中元素、决策和页面的列表,ADR-12 变成了一个可以打开该决策的标签。输入 @ 时列出了能打开该项目的人,负责 Billing 的 Sam 也变成了一个标签。她按下 ⌘ Enter。气泡得到一个编号 #7,所有打开图的这个视图的人都能看到它。
Sam 收到通知。 他的铃铛显示 Marie 提及了他,并以她的评论作为摘录。他不需要盯着图,也不需要待在正确的 Slack 频道里,就能知道这件事。
回答变成任务。 Sam 回复说这是 ledger 迁移留下的遗留问题,他会把它移到 Ledger API 后面。发起讨论的 Marie 在收件箱里收到他的回复。她打开完整讨论,点击 Sam 回复下方的 任务,把它分配给他,选择周五作为截止日期,然后点击 创建任务。回复下方出现一个复选框,任务进入 Sam 收件箱的 待办 标签页。
决策记得自己被质疑过。 打开 ADR-12,它展开卡片的底部现在在 被引用于 下列出了 Marie 的评论,附带引用处前后的文字。下一个读这个决策的人会知道,它所保护的数据库仍然有写入,并且可以点击进入讨论。
修复自己发出通告。 Sam 通过一个变更请求替换了这条箭头。变更请求的描述引用了 #ADR-12,并贴上了讨论 #7 的链接,链接在文字下方显示为预览卡片。所有能编辑该项目的人都会像以前一样收到变更请求已打开的通知。财务数据团队的 Léa 无法评审它,但她关注了 Checkout 项目,所以她也收到一行通知:在被关注项目中打开的变更请求,会通知那些无法评审它的关注者。
闭环完成。 Sam 勾选了任务。创建任务的 Marie 收到"Sam 完成了你创建的任务"。她把 #7 标为已解决,气泡从图上消失。当 Sam 把变更请求链接贴进 #payments 时,Archyl 机器人会展开它,显示标题、状态和项目。
这次交流的每一部分都挂在模型里的某样东西上:关系、决策、负责人、变更请求。没有任何东西依赖于某人记得线程在哪里。
每个功能做什么
图上的评论
按下 C,或点击图底部工具栏中的 评论,然后点击评论应该放置的位置:
- 在空白处,气泡停留在那个位置;
- 在元素上,气泡附着在元素上,元素移动时随之移动,讨论也会出现在元素的详情面板中;
- 在关系上,气泡位于关系的中点。
气泡按项目编号,在任何缩放比例下保持同样大小。每个气泡属于它被放置时的层级和视图,因此 system context 上的评论不会出现在某个系统内部。已解决的气泡会被隐藏;在评论模式下勾选 显示已解决,即可看到它们以灰色显示。除此之外,固定的讨论就是普通的讨论:它会出现在项目的讨论列表中,回复会通知参与其中的人。文档:图上的评论。
@提及
在评论或回复中、在 ADR 的 context、decision 或 consequences 中、在文档页面中,或在变更请求的描述、评论或评审中输入 @。列表会显示能打开该项目的人,以及至少包含其中一人的团队。提及一个团队,会通知该团队中能打开项目的成员。
每个人只会收到一次通知:再次编辑文本不会通知已经被提及过的人。标题中的提及不会被识别,所以请写在正文里。我们发布收件箱时,提及是它"还不能做什么"列表上的第一项。现在它来了。文档:提及、引用和链接。
# 引用与"被引用于"
在同样的位置输入 #,可以引用 system、container、component 或 code 元素(每个都显示其父元素)、决策(以 ADR-3 加标题的形式列出)或文档页面。点击标签会打开它引用的对象。元素会在图中它自己的层级打开,并已处于选中状态。
另一半是反向链接。每个元素、决策和页面都会列出自己在哪里被引用,最新的排在前面,并附上每处引用周围的摘录:在元素详情面板的 被引用于 部分、在决策展开卡片的底部、在页面底部。这正是 Slack 线程给不了你的部分。对话指向 ADR,ADR 也指回对话。
链接预览,在 Archyl 中也在 Slack 中
复制链接 位于元素的详情面板、每张决策卡片,以及每个文档页面的顶部。元素链接会在其所在层级打开该元素,并处于选中状态。变更请求和讨论通过地址栏分享。
把 Archyl 链接粘贴到评论、变更请求描述或评审中,它会在文字下方显示为一张卡片:标题、类型和状态、项目以及一段摘录。每条消息最多预览三个链接,而且只对能打开该项目的人显示。其他人看到的是普通链接。
在 Slack 中,机器人现在会把指向项目、元素、决策、文档页面、变更请求或讨论的链接展开为同样的预览。它遵循机器人原有的规则。预览以连接该 workspace 的 admin 的权限生成,只针对该 workspace 所连接组织的项目;在限定范围的频道中,指向范围外项目的链接保持为普通链接。指向不存在的对象、或机器人看不到的对象的链接,同样保持为普通链接,因此预览永远不会证实某个页面存在。文档:Slack 中的链接预览。
关注
通过元素详情面板、决策卡片或图工具栏上的铃铛,可以关注一个元素、一个决策或整个项目。实心铃铛表示你正在关注。元素的负责人无需任何操作就会关注它,拥有该元素的团队成员也一样。点击铃铛即可退出关注,Archyl 会记住这个选择,即使你仍是该元素的负责人。
关注者会在以下情况收到通知:所关注的对象被修改或删除(通知会列出改动的字段)、被关注的元素收到评论、变更请求涉及被关注的元素。项目关注者还会在新增元素、决策或页面时收到通知。关注不授予访问权限:失去项目的访问权限后,通知也会停止。文档:关注。
任务
在项目中任意评论或回复下方点击 任务,从能打开该项目的人中选择一位负责人(默认是你自己),可选地设置截止日期,然后点击 创建任务。一条评论最多承载一个任务。任务显示在其评论下方,带有复选框、负责人和截止日期,截止日期一旦过去就会变红。删除任务会保留评论。
你未完成的任务在收件箱的 待办 标签页中,按截止日期由近到远排列,标签页上显示数量。每个元素的详情面板都有一个 待办 部分,列出其所有讨论中的任务。任务被创建给负责人或重新分配给负责人时,负责人会收到通知;其他人完成任务时,创建者会收到通知。文档:任务。
代理也能打标签
通过 MCP 服务器连接的编码代理也在同一个模型里写东西:它们打开变更请求、记录决策、留下评论。在此之前,代理写下"@Sam,你能确认一下吗?",得到的只是一段不会通知任何人的纯文本。
现在,服务器会像应用里的选择器那样读取代理写下的内容。在评论、ADR、文档页面或变更请求中:
@Name提及一个人或一个团队,对方会像收到其他提及一样在收件箱里收到通知。代理可以调用list_mentionables获取确切的名字。#Label引用一个 C4 元素、一个决策(#ADR-12)或一个页面,被引用的对象随后会在 被引用于 下列出代理的文字。
代理发布的评论,也会像人发布的评论一样,送达已经参与讨论的人以及该元素的关注者。每次写入都会告诉代理关联了哪些对象,这样它可以确认 @Sam 确实送达了 Sam。
代理也能反向读取这些链接。get_backlinks 会返回一个元素、决策或页面在哪里被引用。在动 Ledger DB 之前,代理可以找到 Marie 的评论 #7 和引用了 ADR-12 的变更请求,而不必重新发现这个问题。
关注而不被淹没
关注与我们为收件箱定下的规则相冲突:收件箱只放等你处理的事,或者对你做过的事的回应。一个被关注的元素发生变化,并不是在等你处理。我们之所以让它进来,是因为你要求了,无论是点击了铃铛还是拥有该元素;同时我们限制了它能有多吵:
- 移动元素或修改其样式不会通知任何人。
- 一小时内对同一对象的多次编辑只会产生一条通知,前提是你还没读过它。
- 如果你关注了项目但没关注某个元素,那么对于该项目,每种类型的通知每小时最多一条。批准一次创建数百个元素的 AI discovery,只会产生一行,而不是数百行。
- 你不会被通知两次。提及你的评论,或你参与的讨论中的回复,只会通过那条通知送达。
- 你永远不会收到关于你自己操作的通知。
如果你想看到整个组织的每一处变更,邮件通知和 历史记录 页面仍然是合适的地方。
它还不能做什么
- 只有收件箱。 提及、关注和任务不会发送邮件。
- 没有截止日期提醒。 逾期任务会变红,但不会有任何东西提醒你。
- 没有关注列表。 你需要在每个元素、决策或项目上分别管理。文档页面不能单独关注;请改为关注它所在的项目。
- 气泡放在哪里就停在哪里。 气泡一旦放置就无法移动。关系的气泡位于两个元素之间的中点,而不是线条的曲线上。时间旅行打开时,气泡会被隐藏。
- Microsoft Teams 中没有预览。 目前只支持 Slack。10 月 18 日之前连接的 Slack workspace 需要在 组织 → 机器人 中重新连接,以授予两个新权限:
links:read和links:write。 - 代理看不到任务、关注和固定。 通过 MCP 服务器,它们可以提及和引用,但还不能读取或完成任务、关注元素,也不能在图上固定评论。
- 项目之外没有任务。 组织讨论不能承载任务。
试一试
打开一张图,按下 C,点击那条你一直想问的关系。提及另一端的负责人,并引用它应当遵循的决策。文档详细介绍了每一部分:
相关阅读:一个收件箱,只放等你处理的事,了解上面每条通知所遵循的规则;按频道限定机器人范围,了解一个 Slack 频道可以预览什么。