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

这个提交包含在:
2026-09-06 11:14:41 +08:00
父节点 ab82fe30c0
当前提交 c3cef5cfc4
共修改 48 个文件,包含 4588 行新增和 1053 行删除
@@ -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 可理解的工具依赖,也未改动其他工具配置。