Chorus v0.10.0: 一个想法,能牵出一串

细化一个想法的过程里,经常会牵出别的东西。聊着聊着发现有个独立的问题值得单开一条,或者一个大想法看着看着就该拆成几条小的。于是你新建了一条想法。列表里多了一条,但没有任何地方记得它是从哪条来的。

一个项目跑上一两个月,这样的想法攒到几十条,全平铺在一个列表里。哪条分出了哪条,这些线只活在你脑子里。过两周再回来打开其中一条,得想半天它当初是干嘛建的,又分出去过什么。

Chorus v0.10.0 让想法之间能连起来:一条想法可以派生出新的子想法,也可以把已有的想法挂到某条之下。父想法看得到自己牵出过哪些,但仅此而已,不替它们做任何决定。


连起来,但谁也不管谁

给想法连上父子关系,最容易做过头的方向是让父去管子想法:父没做完,子想法就不许动;子想法全做完,父自动算完成;想改子想法的状态,得先问过父。Jira 的 epic 和 sub-task、很多 issue tracker 的父子关系都是这么设计的。看着整齐,用起来到处是约束,约束一多,大家就懒得建这层关系了。

Chorus 这层关系反过来:父只记得自己牵出过谁,别的什么都不管。

一条想法算没算完,只看它自己的提案和任务。它挂在谁底下、派生过几条、那几条做到哪一步,全都不影响。决定想法状态的那段逻辑这版一行没改,这条线对它来说根本不存在。父想法上能看到的只有一个只读的 “+N derived” 小标,告诉你它派生过几条,点一下能跳过去,没别的了。删掉一个父想法,子想法不会跟着消失,只是断开这条线,自己升回顶层。

这条线还故意不分类型。没有”派生”和”包含”两种边的区分,就一种没名字的线。现实里想法之间的关系太杂,硬要分类,每次建关系都得先纠结一下”这算派生还是包含”,纠结几次就懒得建了。所以干脆不分,具体什么关系,看上下文就知道。

只让一条想法挂一个父,是同一个取舍。整张图就是一片森林,不是一张网。多父、跨项目挂靠、拖拽换父这些先都不做。森林好走、好画、好记;图一旦铺开,看的人就晕了。

说到底,这条线是拿来记的,不是拿来管的。它帮你记住想法从哪来、又分出去过什么,至于每条想法自己怎么走,它一概不插手。


怎么画上这条线

两个入口,对应两种场景。

派生。 你正在看一条想法,发现要从它里面单拆出一条。在详情页点”派生”,新建弹窗会自动把当前这条带上当父。chorus_pm_create_idea 也多了个 parentUuid 参数,智能体在头脑风暴或细化阶段把一个想法拆成几条的时候,能直接把父子关系标上。

挂靠。 两条想法已经各自存在,事后才发现其中一条该挂到另一条下面。详情页的 Lineage 区有个设置父想法的选择器,挑一条就接上了。这一步会查环:不能把自己设成自己的父,也不能挂到自己派生出去的后代下面,那会绕成一个圈。选择器里直接把可能成环的候选置灰,服务端再兜一道底,两层都拦。

这两件事走的是同一段服务逻辑,MCP 这边收进一个新工具 chorus_edit_idea,改标题、改正文、改父,一个工具全包了。


Dashboard 成了想法的家

有了这条线,就得有个地方把它铺出来看,一个平铺的列表展示不了一棵树。

所以这版把项目 Dashboard 的 Overview 重做了。以前这里散着两排控件,切到 Stats 还会让下面一排整个消失,内容跟着往上跳。现在收成一个三档开关:Ideas / Lineage / Stats,新建按钮单独靠右,切换不再跳。

默认看哪档是自适应的:项目里只要有想法挂了父或者派生过子想法,进来默认就是 Lineage 视图;没有这层关系的项目还是平铺的状态分组。这个判断只在首次进来算一次,之后哪怕来了条新派生的,也不会硬把你的视图切走。你手动选过一次,这个选择按项目记在 localStorage 里,下次进来听你的。

Lineage 视图不是文件夹那种树,是带缩进的想法行,每条还是完整一行,前面一个 表示派生关系,父行挂一个 “+N derived” 小标。不藏进文件夹,每条想法都还在明面上。

既然想法的浏览和管理整个搬到了 Dashboard,那个独立的 Idea List 页面就成了重复建设,这版把它删了。老的 /projects/:p/ideas/ideas/:id 链接不会断,改成 308 永久重定向,直接落到 Dashboard 对应的位置。顺带,Dashboard 标题以前永远写着干巴巴的 “Overview”,现在换成项目名当大标题、项目描述当副标题。


顺带几件事

超管在邮箱撞车时登不进去的问题修了。 本地开发常把 SUPER_ADMIN_EMAIL 配成跟某个注册用户或默认用户同一个邮箱,撞上之后超管就没路进了:identify() 碰到第一个匹配的角色就提前返回,默认密码登录的表单又整个绕过了 identify()/login/admin 根本到不了。这版让 identify() 在撞车时把所有匹配的登录路径都收齐,登录页拿到之后弹一个角色选择器,选哪个就走哪条原来的流程。/login/admin 在这种前置选择的流程里也支持手填邮箱了。认证逻辑本身没动,中英文案都补齐了。

三个插件版本对齐到 0.10.0。 Claude Code 和 Codex 插件跟着主版本号一起到 0.10.0,OpenClaw 插件从它自己的 0.5.3 序列并过来,也对齐到 0.10.0。四套 skill 文档(Claude Code、Codex、OpenClaw、独立 /skill/ 包)都加了派生、挂靠、父级只读汇总的说明,以及 chorus_edit_idea 工具。


升级

npx @chorus-aidlc/chorus@latest

Claude Code 插件:

/plugin marketplace update chorus-plugins

Codex 插件按 release 文档重新装一次。

OpenClaw 插件:

npm i -g @chorus-aidlc/openclaw-plugin@latest

这版带一个 DDL 迁移(Idea 上加一列 parentUuid 加一个索引),没有数据迁移,跑一次 prisma migrate 即可。

v0.10.0 已发布到 GitHub Releasesnpm

有问题或反馈?GitHub IssuesDiscussions


GitHub: Chorus-AIDLC/Chorus | Release: v0.10.0