本仓库(zcode-worktree-plugin)的 agent 工作纪律与项目要点。
未得用户明确授权,不得进行版本发布。 本仓库的"版本发布"包括以下任一动作:
git push到master(含 merge 提交的推送);- 创建/推送版本 tag(
v0.4.x等); - 升版本号(
plugin.json的version)并对外提供(commit/push); - 更新插件发布缓存(
~/.zcode/cli/plugins/cache/zcode-worktree-plugin/...及installed_plugins.json的版本指向)。
规则边界:
- 允许:在本地分支上 commit、跑测试、写代码与文档——这些不构成发布;
- 须逐次授权:每次发布动作都需要用户当次明确同意("发布 X 版本"),历史授权 不延续到下一次发布;
- 实现 + 测试全绿后,停在待发布状态(本地分支就绪、CHANGELOG 写好),向用户 汇报并等待授权,再执行 push / 缓存更新。
发布相关的既有流程惯例(分支 fix/vX.Y.Z-* → commit → merge --no-ff → push →
手动更新缓存)保持不变——只是每个发布环节须先获用户授权。
- 仓库用途:ZCode 的 git worktree 隔离插件
zcode-worktree-guard(marketplace 目录源,根marketplace.json指向plugins/zcode-worktree-guard/)。 plugins/zcode-worktree-guard/scripts/:common.mjs—— 共享工具(git 封装、路径归一化 norm、绑定解析、状态读写), wt.mjs 与 guard_hook.mjs 共用;纯 Node 标准库、零依赖、ESM .mjs(禁止引依赖);wt.mjs—— 生命周期 CLI(create/enter/exit/remove/status/authorize-main/ revoke-main/allow);guard_hook.mjs—— PreToolUse hook:透明路径重写(hookSpecificOutput.updatedInput)- 危险 git 拦截;fail-open(内部异常放行 + 审计),勿改成 fail-closed;
session_start.mjs—— SessionStart hook:注入绑定状态提示。
tests/v2.test.mjs—— 全部测试在单文件:spawn 真实子进程 + 真实 git、自建临时 仓库;既有用例零翻转是发布惯例。docs/design.md—— 设计文档;改scripts/前先读它和CHANGELOG.md。- 敏感点:
guard_hook.mjs的block()文案、decideWrite返回的 reason/remedy 字符串被测试逐字断言(assertBlock子串)——改文案先查测试。
- 全量测试:
node --test tests/v2.test.mjs(约 2 分钟,204 用例) - 聚焦测试:
node --test --test-name-pattern "P[0-9]+:" tests/v2.test.mjs - 语法检查:
node --check plugins/zcode-worktree-guard/scripts/<x>.mjs - 引擎级插件校验:
node "<ZCode 安装目录>/resources/glm/zcode.cjs" plugins validate plugins/zcode-worktree-guard(也可加 plugin-creator 的validate-plugin.mjs预检) - 无构建/lint 步骤(零依赖,直接跑 node)。
分支 fix/vX.Y.Z-* → commit(feat/fix(vX.Y.Z): ...)→ master 上 merge --no-ff
(Merge vX.Y.Z: ...)→ push → 本机生效走引擎市场流(勿再手动 cp 缓存/手改
installed_plugins.json——引擎自带完整账本,手改会绕过缓存交易与旧版本清理):
- UI 流:插件市场 → 市场源 → 刷新
zcode-worktree-plugin(本仓库根目录已注册为 directory 市场)→ 个人 → 插件详情 → 更新 → 确认版本 → 重启 ZCode。 - CLI 流(无 PATH 上的 zcode 命令时用引擎包入口):
node "<ZCode>/resources/glm/zcode.cjs" plugins marketplace update zcode-worktree-plugin→node "<ZCode>/resources/glm/zcode.cjs" plugins update zcode-worktree-guard@zcode-worktree-plugin→ 重启 ZCode。命令与全链路已在隔离环境(ZCODE_STORAGE_DIR=<临时目录>)实测过 (add → install → manifest 升版 → marketplace update → plugins update,0.1.0→0.2.0 成功)。
版本发布前同步四处版本:plugin.json 的 version、marketplace.json 条目的
version(引擎安装/更新以插件清单为准,条目 version 是规范遵循与展示冗余)、
CHANGELOG.md 新小节、README 测试数(如用例数变化)。CHANGELOG.md 每版本一节。
历史更正(2026-09-22 复核):本节曾记载"zcode CLI 无 install 子命令"——该前提已 过时。引擎
zcode.cjs 0.16.9(Desktop 3.14.1)带完整plugins install|uninstall|enable|disable|update|validate|marketplaceCLI。2026-08-27 前 的手动 cp 流程是当时的权宜,此后弃用。
- ZCode 运行缓存副本而非本仓库源码:源码改绿后运行时不变;须走上面的市场刷新+
更新(或
plugins.dirs本地加载)才生效,且已启动的会话仍用旧 hook,新会话才生效。 - 插件会拦自己的发布 push:push master 被 push 安全网拦 →
authorize-main→ push →revoke-main,三次独立 Bash 调用(组合命令整条被拦,设计行为)。 - Bash 整行正则会误拦字符串数据:heredoc/命令文本里含字面
git push origin master、git branch -d worktree-*会被误判为命令——写含这类文本的文件用 Write 工具落盘再cat追加,别走 Bash heredoc。 - Git Bash 吃反斜杠:
echo/printf管道传含反斜杠路径的 JSON 会损坏; 改installed_plugins.json这类 JSON 一律用 Write 落 node 脚本文件再运行, 别node -e内联。 - wt.mjs 会话身份机制勿破坏:ZCode 不向 Bash 子进程注入会话变量,
guard_hook对调用 wt.mjs 的 Bash 命令注入export ZCODE_SESSION_ID=<id>;前缀(injectSessionEnv)——这是绑定按会话生效的根基。
改行为/发版本时同步:CHANGELOG.md、README.md、SKILL.md、
commands/worktree.md、脚本内提示文案(session_start / exit 回执 / block 文案)
——历史上多次只改代码漏改文档,审查时这些是固定检查项。