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 Releases 和 npm。
有问题或反馈?GitHub Issues 或 Discussions。
GitHub: Chorus-AIDLC/Chorus | Release: v0.10.0