trellis update 不需加 --migrate。
新功能
1. Joiner 引导任务
trellis init 现在按两个文件的存在状态分三种场景派发:
.trellis/ | .trellis/.developer | 生成的 task |
|---|---|---|
| 不存在 | n/a | 00-bootstrap-guidelines(creator,不变) |
| 存在 | 不存在 | 00-join-<slug>(新:joiner 流程) |
| 存在 | 存在 | 不生成 task(同人 re-init) |
.trellis/.developer 作为 per-checkout 信号的原因:它在 .trellis/.gitignore 里声明过,天然不进 git,新克隆的 checkout 永远不存在此文件。.trellis/workspace/<name>/ 不能做此信号——该目录进 git,新克隆时已经存在。
joiner task 创建时自动设为 current-task,新开发者第一次 /trellis:continue 直接落在引导 PRD 上,覆盖四项:Trellis 工作流、运行时机制(SessionStart hook、<workflow-state> 注入、trellis-implement / trellis-check sub-agent、per-task jsonl manifest)、项目 spec(.trellis/spec/)、本人分配任务(task.py list --assignee <name>)。
2. Bootstrap / Joiner PRD 改为 AI 视角
两份 onboarding PRD 现在是写给 AI 的指令,不是给开发者的文档。开头明确声明:Ask AI:、Read workflow.md)改为给 AI 的指令(Explain、Summarize X for them、If archive is empty, skip — don't invent examples)。PRD 末尾包含 “Suggested opening line” 模板,AI 第一次回应用户时原样使用。
3. Polyrepo 布局探测
detectMonorepo() 新增第 7 个 parser,向下扫最多 2 层找兄弟 .git 目录或 worktree gitlink。只在前 6 个 workspace parser 全 miss 且没声明 submodule 时才触发,workspace 配置(pnpm-workspace.yaml、Cargo workspaces 等)始终优先。
DetectedPackage加isGitRepo: boolean(与isSubmodule互斥)writeMonorepoConfig输出git: true,桥接到config.py的get_git_packages()已有运行时 schema--monorepo失败时打印 7 项检查清单 +config.yaml手写示例- init 确认 prompt 给 polyrepo 包标
(git repo) config.yaml模板文档化git: true字段
Workflow 收紧(所有平台)
4. Task 创建触发词
workflow.md [workflow-state:no_task] + shared-hooks/inject-workflow-state.py + OpenCode plugin 现在列出触发任务创建的明确关键词:
- 中文:
重构/抽成/独立/分发/拆出来/搞一个/做成/接入/集成 - 英文:
refactor/rewrite/extract/productize/publish/build X/design Y
5. 调研任务 sub-agent 化
common/skills/brainstorm.md 新增 “Delegate to trellis-research sub-agent” 段,带反面案例:
主会话里 3+ 次 inline WebFetch/WebSearch 是 anti-pattern。正确做法:通过 Task 工具启动trellis-researchsub-agent;sub-agent 写结果到{TASK_DIR}/research/<topic>.md,返回路径 + 一行摘要。
workflow.md [workflow-state:in_progress] 里的流程描述从泛泛动词(implement → check → update)改为具体 agent 类型(trellis-implement → trellis-check → trellis-update-spec → finish)。
Qoder 体验修复
6. Session 边界命令从 skill matcher 拆出
beta.9 之前 Qoder 所有 Trellis 入口——包括finish-work 和 continue——都以 .qoder/skills/trellis-*/SKILL.md 形式存在。调起方式非确定性(依赖 skill matcher 对用户措辞与 skill 描述打分)。
beta.9 把 session 边界命令拆成 Qoder Custom Command:
.qoder/commands/trellis-finish-work.md(YAML frontmatter:name、description).qoder/commands/trellis-continue.md
/trellis-finish-work / /trellis-continue 调起(精确匹配)。
自动触发的 workflow(brainstorm、before-dev、check、update-spec、break-loop)仍保留为 .qoder/skills/trellis-<name>/SKILL.md。
configurators/shared.ts 基础设施变更:
- 新
wrapWithCommandFrontmatter(filePath, content)helper - 新
COMMAND_DESCRIPTIONSregistry(短、祈使句,与 matcher 用的SKILL_DESCRIPTIONS长文本分离) collectBothTemplates增加可选wrapCmd回调
内部清理
7. task.json schema 统一
packages/cli/src/utils/task-json.ts 新增共享工厂:
.trellis/scripts/common/task_store.py cmd_create 产出的 shape。现在以下 writer 都走这个工厂:
init.ts getBootstrapTaskJson(bootstrap task writer)update.tsmigration-task 写入块
cmd_create 已规范化,但两个 TypeScript writer 保持各自偏差 shape。
连带变更:
- Migration task 不再写 legacy
current_phase: 0/next_action: [...](Multi-Agent Pipeline 下线后即为死字段) - Bootstrap task checklist 从 task.json 里结构化
subtasks: [{name, status}]迁到 prd.md 的- [ ]markdown。所有 task 的task.json.subtasks现在统一为string[](子 task 目录名)。
8. 孤儿文件清理
Manifest 里 hash 验证的safe-file-delete 条目:
| 路径 | 原因 | Hash 数 |
|---|---|---|
.trellis/scripts/common/phase.py | Multi-Agent Pipeline 时代遗留,0.5 无 importer | 1 |
.trellis/scripts/create_bootstrap.py | 早期第 4 个 task.json writer,0.4 被 init.ts getBootstrapTaskJson 替换 | 3(覆盖 0.3+ 用户) |
TaskDataTypedDict(common/types.py)删掉current_phase: int和next_action: list[dict]字段script-conventions.mdspec 目录树删掉phase.py/create_bootstrap.py/multi_agent/
9. 删掉孤儿 markdown 模板
packages/cli/src/templates/markdown/spec/ 下 5 个从未被 markdown/index.ts import 的 .md 文件:
spec/backend/index.mdspec/backend/directory-structure.mdspec/backend/script-conventions.mdspec/guides/code-reuse-thinking-guide.mdspec/guides/cross-platform-thinking-guide.md
dist/,从未铺到用户盘(configurator 写的是对应的 .md.txt stub)。不需要 migration 条目。修复存在于早期 0.1.x 以来的重复 bug。
升级
- 所有平台:
workflow.md+ shared hooks 自动同步触发词 + 调研委派改动。没改过的 hash 匹配自动更新;改过的标准Modified by youprompt。 - Qoder:旧
.qoder/skills/trellis-{finish-work,continue}/SKILL.md走 hash 验证自动删;新.qoder/commands/trellis-{finish-work,continue}.md由 configure 步骤写入。 - Python 脚本:
phase.py+create_bootstrap.py走 hash 验证从.trellis/scripts/自动删。 - 已有 task:不动。Python readers(
task.py、get_context.py)对缺失规范字段当None处理。beta.9 起新建的 bootstrap / migration task 按规范 shape 落。
npm install -g @mindfoldhq/trellis@beta