You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
提案摘要
本提案建议 Trellis 使用相互独立的逐会话权威记录,以及可重新生成的工作区索引。
它的目的不只是规避 #415 中尚未解决的
index.md冲突,而是在完整保留并增强 Trellis 工作区记忆能力的同时,消除并行任务和工作树之间因共享受跟踪文件写入而产生的合并冲突。我们已经在 #415 的这条评论 中给出了详细分析和实施经验。本讨论将其整理为一个独立的架构提案,方便维护者和使用者脱离即时缺陷,单独评估这一长期方向。
建议建立以下核心不变量:
如果维护者认可这一方向,我们愿意协助把已经在 Guru Team 中验证过的实现适配回 Trellis 上游,并提交相应的 PR。
工作区记忆真正要实现的目标
根据 Trellis 当前的工作区文档和
finish-work流程:journal-N.md记录每次会话的进展、决策、变更、测试和后续步骤;workspace/<developer>/index.md汇总近期会话和日志位置,帮助后续智能体快速恢复上下文;.trellis/tasks/**保存需求、设计、实现状态和任务级证据;.trellis/spec/**保存应长期指导后续工作的工程知识。因此,工作区记忆的根本目标是:
journal-N.md和index.md是实现这些目标的机制,而不是目标本身。当前存储模型为什么会与并行工作树冲突
当前工作区记忆按开发者划分写入路径:
当同一名开发者同时使用多个工作树时,多个相互独立的工作流执行单元会:
这使开发者身份同时承担了两个彼此无关的职责:
在单窗口工作流中,这两个职责看起来一致;在同一开发者并行处理多个任务时,它们并不一致。
v0.6.9 引入的
merge=union是针对只追加日志的有效短期修复,但它无法正确合并两个分别基于同一旧状态重新生成的索引。选择任意一边虽然不会破坏task.json中的任务权威状态,却仍然会:为每个工作树创建不同的 Trellis 开发者身份,可以绕开一部分路径冲突,但会拆散同一个人的历史,并迫使人员身份适应存储布局,因此不适合作为长期正确性边界。
建议的信息模型
将权威记忆事实与面向智能体和人类的投影视图分离:
一、相互独立的会话记录
每次会话应创建一个可以稳定寻址的独立记录,而不是追加到所有工作树共享的权威日志文件中:
如果更倾向于使用 Markdown,也可以采用:
每条记录可以包含:
与任务相关的会话可以关联
.trellis/tasks/**;没有正式任务的普通会话也仍然可以记录,从而完整保留 Trellis 当前的通用会话记忆能力。文件名不应依赖一个需要跨工作树共同递增的全局会话序号。展示顺序和面向人类的序号可以根据时间和稳定标识派生。
二、可重新生成的索引
开发者级索引和全局工作区索引可以改为以下任一形式:
它们仍然可以展示:
区别只在于,索引不再承担权威记忆职责,也不再要求每个功能分支都提交对它的修改。
如果使用者希望继续直接阅读现有的
journal-N.md,日志可以保留为根据独立会话记录聚合生成的兼容视图,而不再是唯一的权威存储。为什么该模型能够彻底消除这一类合并冲突
使用独立记录后,同一开发者的两个工作树会写入不同路径:
合并操作由“合并两个竞争性的整文件重写结果”,变成“合并两个不同的文件集合”。
无论采用哪一种合并顺序:
这一方案解决的是写入归属的根本问题,而不是在未来每出现一个新的共享文件时,再为该文件增加一条特殊合并规则。
如何增强原始工作区记忆目标
该模型不是以削弱记忆能力换取合并安全,而是进一步增强原始目标:
Guru Team 中已经实施的方案
Guru Team 是以任务为中心的工作流,因此其具体实现采用任务本地的完成记录:
每份摘要包含:
历史发现不会维护一个受跟踪的全局索引。它会扫描已归档任务的
finish-summary.json,返回少量候选,再由智能体按需读取选中的任务材料、Issue、PR、Git 差异或原始会话记录。最终形成以下知识分层:
既有归档任务通过保守的一次性回填获得自己的
finish-summary.json。无法恢复的信息会被明确报告,而不是凭空推断;整个迁移不会创建新的受跟踪全局索引。将该模型移植回 Trellis 上游的大致工作
Guru Team 的改动包含扩展特有的工作流、Skill 和任务收尾合同,因此不能直接拣选提交。但底层信息模型可以分阶段适配回 Trellis 上游。
一、定义上游记忆合同
需要先确定:
该合同应保持平台中立,并且不依赖 Guru Team 工作流。
二、增加独立会话记录写入器
重构
add_session.py,使其:迁移期间可以继续生成兼容的日志和索引视图,但新的独立记录应成为权威来源。
三、增加统一的读取器和投影器
提供统一读取能力,用于:
get_context.py输出精简上下文;index.md和journal-N.md阅读视图。投影过程应当只读,或者只写入被 Git 忽略、可以重新生成的缓存。
四、调整工作流消费者和模板
需要同步检查和修改:
finish-work命令和 Skill;add_session.py;get_context.py和session_context.py;finish-work仍然负责记录会话,只是把记录目标改为独立的权威会话记录。五、提供保守的兼容迁移
对于既有仓库:
journal-N.md和index.md;trellis update不覆盖用户定制的工作区内容;可以采用以下渐进发布顺序:
add_session.py同时写入新旧结构,读取端优先使用新记录;六、增加并行工作树验收
最终验收应验证完整的记忆不变量,而不只是某一条合并属性:
A -> B和B -> A两种合并顺序;trellis update都必须通过。验收矩阵还应包含没有任务的普通会话,确保该方案适用于 Trellis 通用工作流,而不是只服务任务型工作流。
已有实现与验证参考
Guru Team 的实现和验证历史均可公开查看:
集成验证会从同一个干净基线启动两个任务,分别完成创建、收尾、归档和提交,然后验证两种合并顺序。两份历史记录都会被保留和发现,两个分支也不会写入共享的受跟踪工作区、索引或缓存路径。该回归与 644 项测试、干净安装、更新后重新应用、平台投影和漂移检查一同通过。
协作建议
如果维护者认可“独立权威会话记录加可重新生成索引”这一总体方向,我们愿意协助把该设计适配到 Trellis 上游并提交 PR。
在开始实现之前,希望得到以下方向的反馈:
index.md应改为查询时输出、被 Git 忽略的缓存,还是显式渲染产物;如果方向获得认可,我们可以先提交一份只包含上游数据合同、迁移计划和验收矩阵的设计 PR。之后再分阶段实现写入器、投影器、迁移能力和工作树集成测试。
All reactions