chore: 升级 Trellis 并精简规则(09-05-trellis-upgrade-rule-cleanup)

这个提交包含在:
2026-09-06 11:14:41 +08:00
父节点 ab82fe30c0
当前提交 c3cef5cfc4
共修改 48 个文件,包含 4588 行新增和 1053 行删除
@@ -0,0 +1 @@
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
@@ -0,0 +1,181 @@
# 升级与规则治理设计
## 基线和证据
2026-09-05:全局 CLI 与项目模板均为 0.6.12;npm latest 为 0.6.16,beta 为 0.7.0-beta.3。Node.js 22.22.2 满足目标包要求,CLI 软链接目标与 npm 全局 prefix 一致。
已通过 npm 元数据确认上游为 mindfold-ai/Trellis,并读取 v0.6.16 标签下的 0.6.13 至 0.6.16 迁移清单;四份清单均声明 breaking=false、recommendMigrate=false、migrations=[]。来源为该仓库 packages/cli/src/migrations/manifests/ 下对应版本 JSON,不依赖无法读取的网页摘要。
旧 CLI 的只读预览发现四处本地定制:`.trellis/config.yaml`、`.trellis/.gitignore`、`.trellis/workflow.md`、`.agents/skills/trellis-channel/references/command-reference.md`。这不是 0.6.16 的完整差异清单。
任务创建前有 37 项未提交修改或未跟踪条目;实施前重新核对,不覆盖其他任务成果。
## 分层与边界
1. 全局 CLI 升级不等于更新项目;先恢复和验证工具能力,再在批准范围内备份、升级、只读预览。
2. 全局规则只承载通用安全与协作;项目承载业务与交付约束;Trellis 受管模板按来源合并。
3. 项目模板更新后再落实精简,避免上游更新重新引入被删规则。
4. 项目仅使用 Codex,不顺带安装其他平台;不启用自动提交或生产操作。
## 兼容性重点
上游 0.6.16 的 task.py start 新增空上下文门禁,并提供 --allow-empty-context。当前 inline 模式要求跳过 JSONL 整理,应在未来更新项目时核对该例外的适用性,不伪造上下文条目,也不全局取消门禁。CLI 升级本身不会更新本地 task.py。
上游 check 技能新增任务范围约束,但仍存在较宽的测试要求。因此升级不是规则治理的替代,仍需按任务风险审查。
## 待审查位置
| 位置 | 影响 | 建议 |
| --- | --- | --- |
| AGENTS.md:15 | 非微小改动分类不明确 | 定义风险分类与一次批准的执行范围 |
| AGENTS.md:17 | 强制不存在的计划工具导致停工 | 定义工具不可用时的最小替代 |
| AGENTS.md:23 | 公网门禁可能泛化到纯治理 | 保留业务交付保障,明确治理豁免 |
| AGENTS.md:53 | 独立 reviewer 与 inline 限制需协调 | 高风险复核保留,明确兼容方式与未验证状态 |
| .agents/skills/trellis-start/SKILL.md | 简单咨询也初始化多份资料 | 先分类,再按需读取 |
| .trellis/spec/guides/index.md | ANY/ALWAYS 搜索约束过宽 | 按共享契约和跨层风险触发 |
用户级存在同名 Trellis 技能和若干候选重复技能,尚未核对内容与加载关系,不按名称删除。用户级 AGENTS 读取为空;不能假设所有会话指令都来自该文件。
## 回滚
备份保存在技能发现路径及仓库之外,权限收紧,记录 CLI 原安装、版本、受管文件与元数据。全局恢复沿用原 npm 安装体系安装固定 0.6.12;项目文件按本次清单恢复,不整仓 reset、不笼统删除未跟踪文件。恢复旧 CLI 不等于恢复项目模板,两者分别验证。
## 新 CLI 实际预览与下一阶段
2026-09-05 已完成全局升级;新版预览实际识别 31 个待更新文件、51 个未变文件及以下 5 个需人工决定的路径:
| 路径 | 下一阶段合并重点 |
| --- | --- |
| `.trellis/scripts/common/task_context.py` | 新发现的冲突,先核对本地上下文规则与上游空上下文门禁,保留 inline 合同 |
| `.trellis/config.yaml` | 保留关闭自动提交、Codex 平台及 inline 模式,不用上游默认覆盖 |
| `.trellis/.gitignore` | 保留项目现有个人日志、运行状态的忽略边界 |
| `.trellis/workflow.md` | 对照规划、确认、检查和收尾要求,避免更新重新引入冗余门禁 |
| `.agents/skills/trellis-channel/references/command-reference.md` | 核对本地定制的来源与必要性,当前 inline 不启用 channel 代理 |
31 个更新涉及任务运行脚本、before-dev/brainstorm/check/continue/meta 技能及 Codex 配置和 hooks。本阶段只预览,未修改这些文件。
建议下一阶段先只读比较以上冲突和同名全局技能,再给出最小补丁与验证清单。项目模板写入、全局技能删除/重装、治理规则精简仍需针对实际差异批准;不将本阶段 CLI 升级授权扩大解释为所有后续写入授权。
## 第二阶段审查结论(2026-09-05)
### 五处冲突的真实性质
| ID | 位置与证据 | 影响 | 拟处理 |
| --- | --- | --- | --- |
| P1 | `.trellis/scripts/common/task_context.py` 与备份中的 0.6.12 原厂模板逐字一致;0.6.16 task.py:71-76 新增导入 curated_entry_count | 冲突标签不代表业务定制;若全部 skip,混合脚本将 ImportError,task 工具不可用 | 接受新运行时的完整依赖,再加窄范围 inline 兼容;不能只保留旧冲突文件 |
| P2 | `.trellis/config.yaml:33` 关闭自动提交,并显式设置 inline;上游两项均是注释默认 | 直接覆盖会丢失项目安全与编排约束 | 合并注释与新版选项,明确保留 session_auto_commit=false 和 dispatch_mode=inline |
| P3 | `.trellis/.gitignore:18` 比上游多 workspace/ 及解释 | 覆盖可能暴露个人日志到 Git 状态 | 保留该忽略规则,无需清理已有日志 |
| P4 | `.trellis/workflow.md:3` 有项目 overlay;新版另有 task_error 状态和平台路由更新 | 盲目覆盖丢本地边界;仅保留旧版又漏新运行时契约 | 保留必要项目边界并压缩重复说明,合入新状态块,不启用其他平台 |
| P5 | `.agents/skills/trellis-channel/references/command-reference.md:479` 与新版仅差一个末尾空行 | 无语义定制,不值得成为人工门禁 | 接受新版格式,不修改 channel 行为 |
不能以 --skip-all 代替合并,也不能直接 --force。模板回执与版本由官方 update 管理,不伪造哈希来隐藏本地改动。
### 已复现的兼容风险
隔离目录位于私有备份内,不改项目。完整 0.6.12 与完整 0.6.16 的 task.py --help 均通过;0.6.16 脚本搭配旧 task_context.py 退出码 1,明确报缺少 curated_entry_count。
在临时项目配置 inline 后,直接调用新版验证器:空清单与旧 _example 清单均返回 1。start 的 --allow-empty-context 仅绕过启动计数,不修复 validate 的拒绝;因此前阶段建议必须补充验证器适配。当前项目两份清单均含旧 seed 行,治理脚本允许 inline seed,与上游不同。
拟合同:inline 可为空;现存 seed 仅作为兼容历史输入处理,不作为真实上下文;真实条目仍严格检查格式、路径和引用。子代理模式必须有真实上下文,保留上游路径安全加固。不批量重写历史任务,不生成虚假条目凑门禁。start 与 validate 使用同一模式判断,避免两套判断漂移。
### 全局盘点
以下用户级路径使用相对用户目录表达,不记录完整本地路径。
| ID | 位置与证据 | 影响 | 拟处理 |
| --- | --- | --- | --- |
| G1 | `.codex/skills/china-contract-review` 与 `.agents/skills/china-contract-review` 的 2 个文件完全相同;document-review 的两个目录各 6 个文件也完全相同,内容与模式均一致 | 同一技能有两份可发现副本,重复描述和后续更新易分叉 | Codex 仅启用 .agents 共享副本;先用用户级 skills.config 停用冗余 .codex 路径,不删其他工具可能依赖的目录 |
| G2 | find-skills 两个入口解析到同一文件;安装锁指向 vercel-labs/skills | 是链接,不是两套实现 | 保留目标和兼容链接;只审查描述触发,不当作重复资产删除 |
| G3 | 9 组同名全局/项目 Trellis 技能中 7 组正文不同,finish-work 和 update-spec 相同;另有全局 trellis-spec-bootstarp 拼写遗留 | 不能假设项目同名技能覆盖全局;会混用不同代际流程 | 10 个全局 Trellis 技能改为显式调用的兼容后备,项目内优先使用项目路径;暂不移除,避免影响尚未迁移的其他项目 |
| G4 | 用户级 trellis-start:44 仅凭 PRD 存在就路由到实施;全局 brainstorm:8 要求穷尽式问答,:39 又要求总是先有 task | 与本项目按状态及已批准方案推进的合同冲突 | 后备描述注明项目 workflow 为准;不继续把旧全局正文当最新项目合同 |
| G5 | 合同/文档审核描述列举大量类型;find-skills 描述含普通 how-do-I 问法;ui-ux-pro-max 描述常驻大量数据库数量 | 描述负担与宽触发风险,不代表技能功能应删除 | 缩短描述,保留法律/非法律排除条件;普通业务问答不触发技能发现;库数量与功能清单放正文 |
全局 Trellis 目录均没有 agents/openai.yaml 的显式调用限制;用户 Codex 配置未发现 skills.config 条目。两套审核技能没有安装锁记录,不能编造上游或自动重装。当前确认的 find-skills 上游之外,其余自建/复制来源暂保留为未核实。
### 项目规则精简清单
| ID | 位置 | 问题与拟改合同 |
| --- | --- | --- |
| R1 | `.trellis/workflow.md:178,219,232`、项目 trellis-start、trellis-brainstorm:8,61 | 先按意图分流;纯咨询无需先询问建 task。规划未批准时停留;已完成方案且用户已批准该版本则 start 并继续,不因回填文档或重复注入 planning 文字重新申请同一授权 |
| R2 | `AGENTS.md:15,17`、project-governance | 明确小改/普通/高风险边界;update_plan 不可用时使用已有任务执行文档记录,不为工具缺失无限停工,也不另建计划系统 |
| R3 | 项目 trellis-start:12、trellis-before-dev:33、`.trellis/spec/guides/index.md:54` | 先分类后加载;已读且未变化的上下文不重复读取;跨层/共享契约变更再读思考指南和查引用,取消 ANY value/ALWAYS 的无差别规则 |
| R4 | 项目 trellis-check:39、`.trellis/workflow.md:583` | 先按当前任务识别改动,不把工作区其他任务的 dirty 文件算进来;相关增量验证后做一次任务级最终验证,不等于全仓每轮测试;既有失败报告,不越界修业务代码 |
| R5 | 项目 trellis-finish-work:22,32,56 | 取消无条件归档当前任务、顺带盘点其他任务和声称总会自动提交;区分阶段完成与整个任务完成;提交/归档按明确授权,保留 session_auto_commit=false |
| R6 | `AGENTS.md:23,53,54` | 纯规则治理不要求公网部署;业务本地验证完成与可公网测试分别陈述;生产、资金、真实数据仍另批;高风险独立复核不能被主会话自查冒充 |
| R7 | `AGENTS.md:22,29,55` | 当前可用技能目录及会话未提供 frontend-design,规则引用不可直接执行;不擅自安装或用其他视觉体系替换,明确缺失时仅受限维护既有样式,需视觉裁决时报告缺项 |
规则内容分工:AGENTS 保留入口、风险和边界;project-governance 承载项目合同;workflow 保留状态路由与阶段索引;Skills 承载对应步骤。优先消除语义重复,不以文件长度为删除依据,不删除解析器依赖的状态标签或阶段编号。
### 官方与上游参考
- OpenAI Codex Skills:`https://developers.openai.com/codex/skills/`;说明渐进加载、同名技能不合并、allow_implicit_invocation 及按路径 enabled=false。仅借用这些加载能力,不把网站跳转后的其他产品内容混入项目规则。
- Trellis 固定源码:`https://github.com/mindfold-ai/Trellis/tree/v0.6.16/packages/cli/src/templates`;本轮逐文件比较以已安装的同版本模板为实际证据。
- Trellis 版本清单:同仓库 `packages/cli/src/migrations/manifests/0.6.16.json`,前阶段已读取。
- find-skills:安装锁确认 `https://github.com/vercel-labs/skills`;其他无来源记录的自建技能不臆测更新地址。
本轮只读比较、完整目录摘要和隔离复现完成;上述 G/P/R 处置均为拟改方案,尚未应用。
## 第三阶段:加载验收与全局覆盖(2026-09-05)
### 实际加载结果与前述结论更正
此前从当前会话仍显示重复名称推断去重未生效,证据不充分。本轮独立启动本机 app-server 进程,仅调用 initialize 和 skills/list(forceReload=true),未启动模型 turn、代理或新业务任务。
- 项目上下文发现 47 个技能条目,用户上下文发现 35 个,均 0 个加载错误;条目总数包含停用项,不能当作启用总数。
- china-contract-review 与 document-review 各仅一份 enabled=true(共享目录);旧 Codex 目录副本均 enabled=false。停用配置已由真实加载器确认,而非仅由 TOML 文本推断。
- 10 个全局旧 Trellis 技能仍可显式调用,其 openai.yaml 均 allow_implicit_invocation=false;12 个项目技能正常发现。
- 两份停用审核副本的旧 YAML 仍设置 allow_implicit_invocation=true。按已批准去重目标补为 false,保留共享副本 true,不修改 UI 文本或删除目录。备份和 YAML 语义对比通过。
- skills/list 未返回 invocation policy 字段,因此策略值由 YAML 解析验证,不把它说成 API 已返回的字段;模型实际选技行为未运行。
- 当前客户端提示词可能保留旧列表或展示停用目录清单,具体来源未确认;不能以当前会话显示的名称断言新加载器失效。若以后客户端仍重复注入,需检查其生成列表是否过滤 enabled 和 implicit policy,不能继续盲目删除文件。
证据:私有第二阶段备份目录的 skill-discovery-final.json,包含两次上下文结果与方法/限制;本轮没有模型请求或子代理。
### 全局覆盖清单
审查采用“发现清单与描述全覆盖、正文按风险抽查”,不把所有 reference、assets 和脚本强制通读,也不声称已验证各领域算法、法律条款或输出内容。
| 范围 | 已覆盖与结论 | 处置 |
| --- | --- | --- |
| 用户 AGENTS 与覆盖入口 | 用户 AGENTS 为 0 字节,未发现该用户目录的覆盖文件或 .agents AGENTS | 无需新增一份通用约束来填空 |
| 用户通用配置 | 未配置 instructions/developer_instructions 等额外规则注入;hooks 只有状态根和 3 条项目审核状态,未配置全局 executable command | 保留配置与其他项目状态,不把历史审核状态当全局工作流删除 |
| 系统内置技能 | 检查描述与来源边界,发现目录中也存在未向当前会话暴露的内部技能 | 随官方工具更新,不把它们当项目可改规则,也不擅自调用隐藏审查代理 |
| 10 个旧全局 Trellis 技能 | 已隔离为显式调用后备;项目运行流程由项目技能和 workflow 承担 | 保留以兼容尚未逐个迁移的项目 |
| 两组审核技能 | 完整目录重复已验证,实际启用状态已验证 | 共享副本保留;旧副本停用并禁用隐式调用 |
| find-skills、UI 技能 | 已缩短描述与宽触发;find-skills 链接保持一个实现 | 已完成批准调整;正文资源按需读取 |
| grill-me | 穷尽式问答是用户明确请求的特殊用途,不是默认 brainstorm | 保留,不因描述强势就删掉该能力 |
| security-best-practices、playwright | 触发对象和排除条件相对明确 | 保留;本轮不执行浏览器或审计业务安全 |
| gjb438c-doc-factory、regulated-sdk-delivery、new-project-research、paper-aigc-review、letpub-skills | 领域触发明确,阅读入口指向相应流程和参考资料 | 元数据/入口检查后保留;不审核专业内容或运行领域任务 |
| testing、workspace-hygiene、agents-bootstrap、mcp-tools-catalog、high-fidelity-sim-core | 正文抽查发现下表五项可复用旧约束 | 形成具体提案,未纳入上一阶段四批写入,不擅自修改 |
### 新增全局精简建议(已批准并于第四阶段实施)
以下路径相对用户技能根 .codex/skills,不记录完整本地路径。
| ID | 文件位置 | 影响 | 最小建议与保留保障 |
| --- | --- | --- | --- |
| G6 | testing/SKILL.md:19-20,41 | 每条回复都输出状态胶囊且跨轮保持技能活跃,易形成重复状态噪声 | 仅测试阶段变化、交接或用户要求时输出紧凑状态;保留真实命令、结果、确定性与风险匹配验证 |
| G7 | workspace-hygiene/SKILL.md:13-20,28-29 | 将本地产物默认视为可删,硬编码不存在于多数项目的脚本,并把证据/日志目录归入可删除清单 | 先识别归属、可再生性和保留价值;未知/审计数据不默认删除;发现当前项目实际命令再按风险验证 |
| G8 | agents-bootstrap/SKILL.md:18,29,37-38 | 强制 MCP 目录、跨轮重新激活、旧 issues 流程和当前不存在的 plan 技能,可能把旧门禁重新生成进新 AGENTS | 沿用目标项目实际 task/issue 合同;可选工具和目录不作为无条件门禁;保留覆盖前方案和备份 |
| G9 | mcp-tools-catalog/SKILL.md:23,31 | 硬编码 functions.mcp__ 前缀和必须回复 CONFIRM,不适配不同客户端及已经给出的批准 | 从实际暴露工具名称生成目录,缺失如实报告;自然语言明确批准即可,不因换词再次确认 |
| G10 | high-fidelity-sim-core/SKILL.md:55,70 | 把每个模块提交作为继续工作的条件,技能暗含 Git 写入授权 | 改为模块级验证与可独立提交的变更范围,提交仅在明确要求时执行;保留数值精度、状态边界与可回滚证据 |
以上为第三阶段提出的 G6–G10 修改清单;用户随后明确批准,第四阶段已逐项实施,证据见 implement.md。没有重做 Trellis 升级、删除技能资源或运行无关业务任务。
### 来源和其他模型边界
- 内置 Codex 技能与 enabled/implicit 能力:官方 OpenAI 文档及当前本机真实加载器,避免套用其他客户端实现。
- 项目和旧全局 Trellis:固定 0.6.16 上游模板与原安装备份。
- find-skills:安装锁指向 vercel-labs/skills;其余五项新增提案未发现可信安装来源记录,不编造上游更新地址或自动重装。
- 其他模型继续使用清晰的文本适用范围、确认边界与完成标准;Codex 的 YAML/TOML 策略是平台适配,不宣称它能控制其他客户端。保留实体目录,未修改其他工具配置或业务项目。
独立只读复核仍未完成:当前会话明确要求主会话直接实施/检查,禁止派发 implement/check 子代理,不通过改名代理或另启模型进程绕过。真实加载器进程只验证配置发现,不是独立 reviewer。
## 第四阶段:G6–G10 实施结论(2026-09-05)
- testing 保留确定性、实际命令和最小有效验证;状态胶囊仅在结果/阻塞变化、交接或用户要求时输出,不跨任务强制保持技能活跃。
- workspace-hygiene 先识别归属、引用、可再生性和保留价值;生成物或未跟踪状态不等于可删。删除前明确路径与恢复方式,日志、报告和备份不默认归类为垃圾,使用当前项目实际检查命令。
- agents-bootstrap 沿用目标项目的真实工作流,不再生成强制 Issue CSV、plan 技能、提交循环或 MCP 目录门禁。保留覆盖前审阅、可恢复备份和原有用户修改保护。
- mcp-tools-catalog 从当前客户端实际工具清单取证,不假设命名前缀或配置即连通;明确自然语言批准有效,不要求特定确认词,不暗含 AGENTS 或服务器配置写入授权。
- high-fidelity-sim-core 仅调整两条提交纪律,改为模块级验证、可独立提交的变更集和明确授权后提交;数值精度、状态/时序、测量与参考资料要求未变。
五个技能均保留现有资源。描述排除条件和文本契约适用于其他模型;没有新增仅 Codex 可理解的工具依赖,也未改动其他工具配置。
@@ -0,0 +1 @@
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
@@ -0,0 +1,168 @@
# 执行清单
## 授权与阶段
用户已审阅落盘方案并批准 CLI 升级与项目只读预览,随后于 2026-09-05 批准本文件第二阶段四个补丁批次。任务为 in_progress,按该范围实施并验证,不重复申请同一授权;提交、归档、部署与业务修改仍未授权。
当前无原生 update_plan 工具,以工作流要求的本文件记录清单,不使用外部计划系统。已找到本机 Codex 二进制内置 apply_patch 入口,可用于规范编辑,无需更换会话或安装另一套工具。
## 已完成
- [x] 核对 0.6.12 安装来源与 Node.js 兼容性。
- [x] 查询目标固定版本 0.6.16,读取四个版本的上游迁移清单。
- [x] 执行旧 CLI 的 update --dry-run,并明确其预览限制。
- [x] 核对目标版本 inline 空上下文门禁例外。
- [x] 补齐 PRD、设计和执行文件,保留已批准范围。
## CLI 升级与只读预览
1. 在规划门禁允许进入实施后,核对当前 task 和受保护工作区基线;不启动其他任务。
2. 在仓库与技能发现目录外建立私有备份,覆盖本次拟影响的 CLI 安装及项目受管文件清单,校验归档可读。
3. 执行 trellis upgrade --tag 0.6.16,失败时先检查安装结果,不自动使用 sudo、force 或另建 npm prefix。
4. 验证 trellis --version 和可执行文件来源;异常则按设计回滚。
5. 执行 trellis update --dry-run,不加 --force、--migrate 或 --allow-downgrade,不应用模板。
6. 对比项目前后摘要,验证只读预览未改写项目模板;记录新增冲突与兼容性事项。
## 后续需单独审阅
输出全局和项目逐文件精简清单后,再请求相应写入授权。默认不强制覆盖、不重装技能、不启用其他平台、不部署。若改动工作流,遵循高风险只读复核要求;当前 inline 不派发代理,不虚报独立复核通过。
## 本阶段执行结果(2026-09-05)
- 已备份原 CLI 安装及 89 个项目受管路径;两份 tar.gz 均通过归档可读性与 SHA-256 校验。
- 私有备份 ID:`hyb-oa-0.6.12-to-0.6.16-hOadBvGw`,位于用户本地状态目录的 trellis-maintenance 下,不在仓库或 Skills 发现路径内。
- 已执行 `trellis upgrade --tag 0.6.16`,退出码 0;`trellis --version` 和 npm 安装检查均确认 0.6.16,npm root 与可执行文件来源保持一致。
- 已执行新版 `trellis update --dry-run`,退出码 0:31 个模板更新、5 个本地定制冲突、51 个未变文件;未应用更新。
- 升级与预览前后核对 2,897 个 Git 跟踪及非忽略未跟踪文件,摘要和模式变化为 0。此核验发生在本次验收记录回填之前;回填仅修改当前任务文档。
- 项目 `.trellis/.version` 保持 0.6.12;CLI 提醒项目可更新属于预期,不是升级失败。
- 原项目 `task.py validate` 通过,inline 的两个上下文清单均为 0 个真实条目;没有为新门禁伪造条目。
- 原始升级日志、预览日志、安装信息、项目前置摘要和 verification.json 保留在同一私有备份目录,不复制完整本地路径到仓库文档。
- 本阶段没有修改业务代码、全局规则、项目模板,没有部署、提交或归档;未运行无关业务测试。
恢复旧 CLI 可沿原 npm 安装体系执行 `npm install -g @mindfoldhq/[email protected]`,随后核对 CLI 和安装来源;离线安装目录备份作为补充恢复材料。恢复操作本轮未执行。
## 验证与完成
- 本轮检查任务 JSON、规划文档非占位内容及尾随空白。
- CLI 阶段验证版本、安装来源、备份和项目不变性,不跑业务测试。
- 规则阶段按触及范围运行治理检查及正反触发场景;先记录既有失败,不为过门禁改业务代码。
- 交付汇报明确实际执行命令、未执行项和下一阶段边界;不自动提交或归档。
## 第二阶段执行与待批准补丁批次
已完成五处冲突对照、全局技能描述盘点、两组完整目录重复校验、旧模板对照和隔离兼容性复现。没有运行真实项目 update,没有修改全局配置/技能或项目治理文件。任务材料中的审查结论是本轮唯一仓库写入。
建议一次审阅以下写入范围,再在该范围内自主完成实现和针对性验证,不逐文件反复询问:
1. 项目模板:经官方 update 合并 31 个新版模板与五个冲突,保持现有配置、workspace 忽略和项目边界;任务运行时作为完整依赖组更新。
2. inline 兼容:最小适配 `.trellis/scripts/task.py`、`.trellis/scripts/common/task_context.py` 及必要的共享模式读取;同步已有治理规约和针对性测试,保持子代理门禁。不得只使用 --allow-empty-context 声称 validate 已解决。
3. 项目规则:调整 AGENTS、workflow、project-governance、guides/index 及 start/before-dev/brainstorm/check/finish-work 五个技能,使批准、读取、验证、收尾合同一致。只改本任务规则,不改现有业务实现。
4. 全局最小治理:两套完全重复审核技能在 Codex 中仅启用共享副本;10 个全局 Trellis 技能增加显式调用限制并明确兼容后备定位;缩短审核、find-skills、UI 技能描述。先备份拟改用户文件,保留其他工具可访问的目录,不重装或批量删除。
### 风险匹配验证矩阵
| 变化 | 最小验证 | 不默认执行 |
| --- | --- | --- |
| 模板运行时 | task.py --help、get_context.py、当前任务 validate、Python 语法、完整依赖导入 | 业务全量测试/部署 |
| inline 适配 | inline 空清单、历史 seed、合法条目、坏 JSON、越界路径;子代理空清单仍失败;start/validate 一致 | 重写历史任务、伪造 JSONL |
| 状态与确认 | 无任务咨询、未批准规划、已批准规划、只回填文档、范围实质变化分别检查预期路由 | 每轮重新批准同一方案 |
| 读取与质量 | 单层小改只读相关规约;既有未变资料不重读;其他任务失败不越界修复 | 所有技能与业务文档通读 |
| 全局技能 | 元数据/配置语法、明确/隐式调用场景;新会话检查重复描述和发现结果 | 批量升级技能或其他平台配置 |
| 收尾 | 已授权阶段完成但整体未完成时不归档;无提交/生产授权不越界 | 自动提交、归档、真实数据操作 |
高风险工作流/运行时修改仍需只读复核;当前 inline 不派发 implement/check 代理,不能把主会话验证冒充独立 reviewer,交付记录必须明确复核方式与剩余缺口。
## 第二阶段实施结果(2026-09-05)
- 用户已批准上述四批写入,实际完成,不再停留于提案。CLI 与项目版本均为 0.6.16。
- 官方 `trellis update --create-new` 更新 31 个模板;五个冲突逐项处理,全部新生成的 .new 副本已处置。配置合入新版说明,保留关闭自动提交和 inline;保留 workspace 忽略及项目 workflow overlay;task_context 更新后作 inline 适配;channel 文档保留现有末尾空白规范,语义与上游一致。
- task.py 与 task_context.py 使用同一 get_codex_dispatch_mode。inline 空清单和历史 seed-only 可用,真实条目仍验证;子代理空上下文仍拒绝。验证器拒绝坏 JSON、缺失/空路径、空 reason、不存在文件及越界路径/符号链接。
- AGENTS、workflow、project-governance、guides/index 和五个步骤技能已精简:按风险读资料与验证;已批准规划可启动;缺少可选工具不循环停工;不自动提交、归档、部署或清理其他任务。
- 全局两份重复审核技能通过 Codex 路径配置停用,保留共享副本与原目录;10 个全局 Trellis 技能增加显式调用限制和兼容后备说明。四个技能描述缩短,法律/非法律边界保留,其他工具配置未改。
- 第二阶段私有备份 ID:`hyb-oa-rules-stage2-FcbImknm`,包含修改前 92 个项目路径与 15 个全局备份入口;两份归档可读并通过 SHA-256。官方 update 自动创建的仓库内备份触发敏感路径检查,已完整移入同一私有目录并收紧权限,未删除备份内容。
### 验证结果
- `cd server && npm test -- tests/unit/scripts/trellis-runtime-contract.test.js tests/unit/scripts/check-trellis-governance.test.js`:19/19 通过。涵盖两种模式的 start/validate、历史 seed、合法及非法条目、路径逃逸、真实 hook 状态解析与提交/归档边界。
- `python3 .trellis/scripts/task.py --help`、当前任务 validate、`get_context.py --mode phase --step 2.1 --platform codex`:通过;31 个 Python 文件 AST 语法检查通过。
- `node scripts/qa/check-trellis-governance.mjs`:PASS,0 errors / 0 warnings;已修复本任务 PRD 章节与 scope 缺失,未改业务检查规则。
- `node scripts/qa/check-process-contract.mjs --baseline --json` 与 `node scripts/qa/audit-docs.mjs --check-registry`:通过。
- 26 个技能 frontmatter、10 个显式调用策略、项目 YAML 解析通过;本机 Codex `features list` 能加载用户配置。与备份逐字对比确认原用户配置保留,仅追加两项已批准的停用设置。
- `git diff --check`:通过。保护基线核验:46 个路径变化均在批准范围;业务代码、原先用户修改的前后端 spec 均未触碰。
- 新版 update 只读复查无待自动更新项;剩余 11 个提示为明确保留的本地定制或末尾空白差异,不伪造回执哈希隐藏这些差异。
### 未完成的独立验收
- 新会话技能发现与实际隐式/显式调用尚未验证,当前运行会话可能仍使用旧的技能列表与已注入指令。配置解析成功不是实际新会话发现通过。
- 当前 inline 禁止派发 implement/check 代理,未启动独立 reviewer。高风险工作流与运行时独立只读复核仍待完成;19 项测试和主会话自查不冒充该门禁。
- 本轮没有提交、推送、归档、部署、业务代码修改或其他项目更新。任务保持 in_progress,以便继续复核,不声称整个治理任务完成。
## 第三阶段执行结果(2026-09-05)
- 补齐全局描述/来源/配置覆盖及有疑点技能正文审查;具体保留和新增五项建议见 design.md 第三阶段。
- 启动新的本机 app-server,仅执行 initialize 与 skills/list(forceReload=true),分别验证项目和用户上下文;不发送 turn/start、不启动模型或子代理。
- 真实发现断言通过:两组审核技能各一份启用,旧副本停用;项目 12 个技能可发现;10 个全局 Trellis 后备仍显式可用。两个停用副本同时补 allow_implicit_invocation=false,共享副本保持 true。
- 原先“重复名称仍出现即去重未生效”的说法不准确,已在 design.md 更正;总发现条目包括停用项。当前客户端提示词来源与模型实际选择行为未测试,不夸大为端到端 UI 验收。
- 额外备份 duplicate-policy-before.tar.gz 已校验;两份 YAML 语义对比确认只有调用策略布尔值改变。脱敏真实加载证据为 skill-discovery-final.json,位于既有私有备份目录。
- 未修改 testing/workspace-hygiene/agents-bootstrap/mcp-tools-catalog/high-fidelity-sim-core:它们是新增的明确提案,不属于前阶段已批准的实际写入清单。
- 剩余强制验收为独立只读复核;主会话和现有 19 项回归不充当独立 reviewer。当前模式不允许派发该 reviewer,不能以“继续”反复申请已经充分的操作授权。
## 第四阶段执行结果(2026-09-05)
用户已批准 G6–G10 五个具体技能文件。已使用本机原生补丁入口完成 testing、workspace-hygiene、agents-bootstrap、mcp-tools-catalog 和 high-fidelity-sim-core 的 SKILL.md 修改;未扩大到附属模板、脚本、调用元数据或其他技能。
- 私有备份 ID:hyb-oa-global-five-VmWeZjgM。skills-before.tar.gz 保存五个原目录,通过归档可读性和 SHA-256 校验;不存放在技能发现路径中。
- 完整备份比对确认只有预期五个 SKILL.md 内容变化;所有附属文件、链接和文件权限保持一致,无意外新增资源。
- YAML frontmatter、资源引用、尾随空白及针对性规则断言通过。保留测试确定性、删除前审批/证据保护、覆盖前备份、实际工具取证和仿真物理语义;移除每轮状态输出、硬编码验证、旧流程依赖、特殊确认词和暗含提交授权。
- 新的 app-server 进程执行 skills/list(forceReload=true),用户与项目上下文各找到五个唯一启用技能,返回描述与更新文件一致,加载错误为 0;未发送模型 turn 或派发代理。
- validation.json 和 discovery.json 保存在同一私有备份目录。真实加载验证不等于模型逐场景行为测试,后者未运行。
- 本轮修改为技能文本和当前任务记录,Trellis 运行时代码及业务代码未变化;复用此前 19 项运行时回归结果,不重复执行无关测试。
至此,所有已审查并获批的修改批次均已实施。任务仍不标记整体完成:唯一剩余强制门禁是独立只读复核,受当前 inline 模式限制未执行。没有提交、归档、部署或修改其他项目。
## 本轮收尾(2026-09-05)
用户要求先完成本轮工作。获批修改和可执行验证均已完成,任务由 in_progress 转为 review,停止继续扩展清理范围。复用输入未变化的 19 项回归与真实技能发现结果,完成最终治理、上下文和差异格式检查。
独立只读复核保留为唯一未完成的强制验收,不将本轮收尾解释为豁免或通过,不设置 completedAt。未提交、归档、部署或清理其他任务;后续只需针对本任务已有差异完成独立复核,不重做升级和已完成的精简。
## 项目复核更正与增量加固(2026-09-06)
用户已认可原项目 diff 的规则删改、hooks 和来源/哈希审查,并用 main 实测纠正 TR-01 归因。main 对假值 file 一律跳过;升级已拒绝无 marker 的空 file,仅保留带 marker 的遗留宽松。相对固定 0.6.16 原厂的本地差异,不等于相对 main 新引入回归;撤回因此阻断升级的结论。旧探针结果及原报告保留,三方对照另存 seed-attribution.json,不把旧失败改写成修后通过。
本会话选择用户允许的“原 task 内先小修再合”路径,不新建 task,不重做规划。只修改纯历史 seed 的识别条件、现有回归和对应 spec;不改 start、hooks、模板回执或用户级技能。原项目审查 PASS 与本次新增补丁待增量复核分别记录;G1–G10 用户级修改不在此次项目 diff 的独立复核范围。
- [x] 保存 48 文件增量前基线;main 保持干净,不覆盖其他升级改动。
- [x] main / 原厂 0.6.16 / 升级未修版用同一组合成输入、独立 Python 子进程完成对照。
- [x] 先补负向回归并在旧实现上确认失败,再将豁免缩到 inline 且对象仅有 `_example` 一个键。
- [x] 验证纯 seed 仍为零上下文、混合字段必拒绝,保留非 inline 门禁;同步精确 spec。
- [x] 跑针对性回归、治理/敏感扫描、语法/差异检查,交仅本轮增量 diff;不自动提交、合并、推送、归档或部署。
- [x] 用户对本次新增 seed 补丁完成独立增量复核并判定通过;独立探针及红绿复现见本文件最终验收记录,未借用原升级 PASS。
### 增量验证与交接
- 运行时代码只替换一行判定为 `inline and set(data) == {"_example"}`。混合 marker 统一进入既有 placeholder 拒绝分支,start、hooks 与模板哈希未改。
- 现有测试增加 30 个组合(10 种混合字段 × inline/sub-agent/auto)和 1 个纯 seed 后跟坏条目的场景;纯 seed 原用例补零计数及显式 sub-agent 断言。两份 manifest 均断言具体行号、完整 placeholder 诊断与 exit 1,没有宽泛正则。
- 新测试 + 修改前实现:exit 1,9 failed / 41 passed;9 个失败均为 inline 混合 seed 的假通过。应用一行加固后:exit 0,50/50 PASS,约 13 秒。负向结果保留于 seed-red-tests.log,正向结果另存 seed-green-tests.log。
- 四方对照见 seed-attribution-after.json:纯 seed 及合法条目仍通过,带 marker 的空/false/null file 从 0 收紧为 1;没有覆盖旧三方结果文件。
- 测试命令在复用的隔离 fixture 内执行,修改后的源码与测试先同步并逐字比对;只复用主工作区已有 node_modules,不安装依赖,测试所用 task/session 均为合成数据,不连接生产:
```bash
review_root="$(cat /tmp/hyb-trellis-upgrade-review-pointer)"
(cd "$review_root/fixture/server" && env -i PATH="$PATH" HOME="$review_root/home" PYTHONDONTWRITEBYTECODE=1 node node_modules/vitest/vitest.mjs run --config vitest.review.config.cjs)
```
- `python3 .trellis/scripts/task.py validate .trellis/tasks/09-05-trellis-upgrade-rule-cleanup`、`node --check server/tests/unit/scripts/trellis-runtime-contract.test.js`、28 个运行时 Python 文件 AST 语法检查通过。
- `node scripts/qa/check-trellis-governance.mjs`(含敏感扫描):0 errors / 0 warnings;`node scripts/qa/check-process-contract.mjs --baseline --json`、`node scripts/qa/audit-docs.mjs --check-registry`、`git diff --check`:exit 0。文档注册检查仍有既有 1 项 warning(22 个未登记文件),不计成零告警,也不顺手修复。
- 本轮仅 6 文件有增量:validator、既有回归文件、governance spec 与当前 task 的 prd/implement/task.json;其余 42 文件、全部文件模式、hooks、task.py 及哈希回执与增量前基线一致。main 未写入升级改动,保持干净。
- 本轮增量在主工作区忽略目录 `artifacts/qa-flow/trellis-upgrade-review/seed-hardening.diff`,报告更正位于同目录 review.md;旧完整 diff 和原探针结果均保留。任务回到 review,不以主会话加固验证冒充新的独立复核,不设置 completedAt。
## 独立复核通过与合入授权(2026-09-06)
- 用户独立逐文件对照两个审查 diff:48 文件、无增删,seed 增量仅 6 文件变化、42 文件不变;hooks、task.py 和模板哈希未变。独立复制 common 包验证各输入,仅收紧混合 marker,纯 seed、合法条目和具体诊断/行号符合合同。
- 用户先 cmp 核对 fixture 与受审源码/测试,再独立运行:修后 50/50 PASS(14.3 秒);另拷并还原旧判定后 9 failed / 41 passed。9 个失败均为 inline 混合 seed 的假通过,不是采信本会话日志。
- 历史兼容性分清扫描范围:main(492920c)有 138 行纯 `_example`;受审 worktree 有 136 行,混合键均为 0。两侧差异仅为 main 的错误可解释性/部署隔离两任务共 4 行,以及 worktree 的本任务 2 行;合并后预期为 140 行纯 seed。升级版 task_store 不再生成 seed 行。本会话复扫已确认提交前两侧计数,合入后再核验 140 行,不将不同基线计数混写。
- 两项非阻断观察已沉淀到现有 governance spec:固定上游 hook 按 file/file-or-path 真值计数或注入,不能替代更严的 validator;sub-agent 的纯 seed 先报 placeholder,而空清单报零上下文,区分 Python 文案与 governance 诊断键。不改 hooks、运行时代码、测试或哈希回执。
- 用户明确批准:只补上述文档收尾,把受审的 48 文件作为一个项目升级提交,在独立 worktree 提交后合入 main,保留 main 已有业务提交。不 push、归档、部署、修改业务或用户级技能,也不移除独立 worktree。
- 执行时仅 4 个文档/任务文件相对已审版本补充收尾:project-governance.md、prd.md、implement.md、task.json;其他 44 文件内容及模式必须保持一致。复用输入未变的独立运行时验收,补跑治理/敏感扫描、文档/上下文检查及合入后的针对性回归。
- 项目原 diff 与 seed 增量的独立复核均已通过;G1–G10 用户级全量独立复核仍不在这份项目 diff 的证明范围,不标记整体 completed、不设置 completedAt、不自动归档。提交和合并的实际标识以 Git 历史及本次交付回复为准。
@@ -0,0 +1,54 @@
# Trellis 升级与规则精简
## Goal
先完成全局 Trellis CLI 稳定版升级与当前项目只读更新预览,再提出按来源、任务和风险分层的规则精简方案。全局只做一轮,项目分别处理,不因模型升级直接删除必要保障。
## Scope
用户已明确批准 CLI 升级与只读预览,并于 2026-09-05 审阅逐文件方案后批准:项目模板合并至 0.6.16、inline 启动与验证适配、项目规则精简、全局重复技能停用及旧 Trellis 技能显式调用限制;随后批准 G6–G10 五个全局技能文件精简。无需再次询问相同范围。
2026-09-06:用户已完成原项目 diff 与 seed 加固增量的独立复核并判定通过,明确授权补齐文档收尾后,将此次项目升级独立提交并合入 main;不 push、归档或部署。G1–G10 用户级修改不在本次项目 diff 复核范围。
## 需求
- R1:升级前核对安装来源、兼容性和恢复路径,升级后验证 CLI 版本。
- R2:使用新 CLI 预览项目模板差异,识别本地定制;不得将旧 CLI 的预览当成目标版本预览。
- R3:记录同名技能、链接、全局与项目冲突及不合理门禁,先给逐文件方案再修改。
- R4:保护已有工作区改动、隐私及关闭自动提交的配置;按风险确定验证与完成边界。
## Out Of Scope
除上述明确获准的项目升级独立提交及合入 main 外,不执行未列入方案的迁移、强制覆盖、项目清理、push、部署、真实数据操作、stash、重置或归档。不审查或修改业务代码,不读取凭据或无关会话历史,不批量更新其他项目,不删除其他工具可能依赖的全局技能目录。
## Acceptance
- [x] 备份可验证,记录原版本、安装来源和恢复步骤。
- [x] 全局 CLI 为 0.6.16,实际可执行文件仍来自原安装体系。
- [x] 新版 CLI 的项目只读预览完成;项目模板版本和受保护文件未被改写。
- [x] 输出冲突清单、inline 上下文门禁处理建议和后续精简范围。
- [x] 如实区分规划完成、CLI 升级完成和项目规则治理完成,不以业务部署作为本任务完成条件。
以上为第一阶段历史验收。第二阶段已批准并实施;整体验收以第二阶段清单与待复核项为准,不自动归档。
## 第二阶段:逐文件审查
用户先批准只读冲突与重复技能审查,随后明确批准具体补丁写入;实施结果记录于 implement.md。
- [x] 五个预览冲突逐项区分真实定制、格式差异与旧模板内容。
- [x] 核对同名技能的正文及候选重复技能的完整目录,不凭名称删除。
- [x] 通过隔离复现验证混合版本导入风险及 inline 清单兼容性。
- [x] 给出最小改动批次、确认与完成标准、上游来源及验证矩阵。
- [x] 用户批准第二阶段方案中的项目和全局写入。
- [x] 模板与 inline 兼容完成并通过针对性测试。
- [x] 项目与全局规则精简完成,保留安全与质量边界。
- [x] 记录新会话发现验证和独立只读复核的实际完成状态,不虚报交付。
- [x] 新进程真实技能发现验证:app-server skills/list 强制刷新,项目/用户两种上下文均通过;停用副本与调用策略校验通过。现有客户端提示列表刷新和模型实际选技不在此项证明范围内。
- [x] 原项目 diff 的高风险工作流及运行时只读复核经用户认可;2026-09-06 已更正 TR-01 为遗留宽松的后续加固,不是升级回归。用户级 G1–G10 不在本次项目 diff 复核范围,不能据此标记其全量独立复核通过。
- [x] 本次 seed 加固及负向回归经用户独立增量复核通过:独立行为探针、50/50 绿与还原判定后的 9 红/41 绿均重现;历史 seed 兼容性及 6 变/42 不变的范围核验通过,不借用原升级 PASS 替代。
- [x] 补齐全局审查覆盖与保留/调整清单;G6–G10 五个技能文件经用户批准后已实施并验证。
- [x] 第四阶段仅修改五个 SKILL.md;附属资源、调用元数据、文件权限及专业仿真约束保持不变,新进程加载新描述通过。
## Test Plan
按 implement.md 风险矩阵执行隔离运行时回归、技能/配置解析、工作流状态与引用检查、当前任务治理及任务外文件保护核验;不运行无关业务测试。新会话技能发现和独立只读复核需分别记录,不以静态检查替代。
@@ -0,0 +1,26 @@
{
"id": "trellis-upgrade-rule-cleanup",
"name": "trellis-upgrade-rule-cleanup",
"title": "Trellis 升级与规则精简",
"description": "全局 CLI 与项目模板升级至 0.6.16,适配 inline 并精简已批准的项目及用户级规则,不涉及业务代码。",
"status": "review",
"dev_type": null,
"scope": "workflow-governance",
"package": null,
"priority": "P2",
"creator": "shunli",
"assignee": "shunli",
"createdAt": "2026-09-05",
"completedAt": null,
"branch": null,
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [],
"notes": "2026-09-06 原项目升级及 seed 增量均经用户独立复核 PASS;TR-01 是遗留宽松的后续加固,不是升级回归。独立重现 50/50 绿与旧判定 9 红/41 绿,确认增量 6 变/42 不变;main 历史 138 行 seed 全为纯 marker。已补 hook/validator 不对称及诊断差异规约,用户明确授权本次项目升级独立提交并合入 main,执行结果以 Git 历史为准。不 push、归档或部署;保留 review 和空 completedAt,不将未覆盖的 G1–G10 用户级全量独立复核算作通过。",
"meta": {}
}