Skip to content

Lineage 追溯链路

lineage 是 FylloCode 实现"全程可追溯"的底层机制:一条需求从提出、讨论、形成方案到落地归档,整个过程被记录成一条可回溯的线索。三线工作方式定义了变更可以怎么走,lineage 负责把实际走过的每一步真实地串起来——无论最终走的是直接实现、Plan 还是 Proposal。

核心概念:脉络(Subject)

lineage 中的一条线索称为一条脉络(subject)。一条脉络代表一个需求意图,它包含:

字段说明
起源(origin)taskchat,记录这条脉络是从任务发起的,还是从对话直接发起的
任务快照(task)关联任务的引用和快照,包含来源(本地或研发系统);chat 起源的脉络初始为空
会话链接(links)这条脉络下的所有 Chat 会话,每个会话记录它产出的 Plan 和 Proposal 列表

一条脉络可以串联多个会话、多个 Plan 和多个 Proposal——同一个任务分多次讨论、产出多个变更,都归属同一条脉络。

链路如何建立

Task ──发起讨论──▶ Chat 会话 ──▶ Plan / Proposal ──▶ Apply & Archive
 │                   │                              │
 └───────────── 同一条 lineage 脉络 ────────────────┘

1. 从任务发起:task 起源

任务看板从任务卡片发起讨论时,FylloCode 会以该任务为锚点创建(或复用)一条脉络,并把新会话绑定到这条脉络上。对话页顶部会显示来源任务横幅,标明这次讨论属于哪个任务;之后重新进入会话,横幅依然可见。

同一个任务再次发起讨论,新会话会追加到同一条脉络,而不是另起一条。

2. 从对话发起:chat 起源

直接在对话页面开始讨论时,一旦形成最终的方案,FylloCode 会以会话为起点创建一条 chat 起源的脉络。同时展示出一张创建任务的卡片,引导你将方案落地为本地任务。

若对话只是探索,未形成 proposal,它在溯源覆盖指标中暂不计入"已关联任务"。

3. Plan 与 Proposal 自动关联

当会话中的 Agent 通过 fyllo-specscreate-plancreate-proposal 工具创建 plan 或提案时,对应的 plan slug 或 proposal changeId 会自动记录到会话所在的脉络上。你不需要做任何手动关联——无论这次讨论走的是 Plan 路径还是 Proposal 路径,脉络上都会自然留下记录。直接实现(不调用这两个 tool)则不会产生这类关联,脉络上只保留会话本身。

4. 补建任务:让开放讨论回到主线

chat 起源的脉络可以事后补建任务:

  • 在对话中主动可以要求 Agent 创建本地任务,它会通过 fyllo-actiontask.create 结构化输出提议创建任务,由你确认后执行

补建的任务会回填到同一条脉络上,起源仍标记为 chat,但溯源覆盖会把它计入"已关联任务"。这让"先聊起来再立项"的工作方式也能进入治理主线。

数据存储

lineage 数据完全存储在本地项目数据目录中:

  • 每条脉络是一个独立的 JSON 文件(lineage/subjects/<subjectId>.json
  • 一份反查索引(lineage/index.json)维护任务引用、会话 ID、proposal changeId 到脉络的映射,索引可随时从脉络文件重建

不依赖数据库,不上传外部服务,随项目数据一起留在本地。

lineage 在哪里被使用

  • 对话页:来源任务横幅,标明会话归属的任务
  • 项目概览:溯源覆盖指标、最近脉络列表,以及进行中变更的任务反查,都基于 lineage 投影
  • 工作脉络:浏览全部 subject,按状态筛选,并沿 Session 查看 Plan、Proposal 与 Commit
  • 归档追溯:变更归档后,从 proposal 反查到会话和任务,回答"这次变更为什么发生、当时讨论了什么"

为什么需要这条链路

git blame 只能告诉你谁提交了代码。lineage 补上的是另外三个问题:

  • 这次变更来自哪个任务、要解决什么问题
  • 中间经过了哪些讨论、产出了哪个方案
  • 方案的取舍和被放弃的方向记录在哪个 proposal 里

这些信息在普通 Agent 会话里会随聊天窗口一起消失;在 FylloCode 中,它们是一条脉络上的结构化数据,几个月后依然可查。

基于 MIT 发布