feat(playbook): add install_mode deployment config

BREAKING CHANGE: [vendor] and playbook.deploy_root are no longer supported. Use [playbook].install_mode and playbook.playbook_root instead.
This commit is contained in:
csh
2026-06-01 10:49:16 +08:00
parent 2c3a559a30
commit f2ab57b39f
15 changed files with 376 additions and 184 deletions
+23 -18
View File
@@ -58,6 +58,8 @@ python scripts/playbook.py -config playbook.toml
```toml
[playbook]
project_root = "/path/to/project"
playbook_root = "docs/standards/playbook"
install_mode = "snapshot"
[sync_rules]
# force = true # 可选
@@ -81,12 +83,12 @@ project_name = "MyProject"
```bash
# spec 写完后
python <deploy_root>/scripts/playbook.py \
python <playbook_root>/scripts/playbook.py \
-record-spec docs/superpowers/specs/<topic>-design.md \
-progress memory-bank/progress.md
# plan 写完后
python <deploy_root>/scripts/playbook.py \
python <playbook_root>/scripts/playbook.py \
-record-plan docs/superpowers/plans/<topic>.md \
-progress memory-bank/progress.md
```
@@ -199,10 +201,11 @@ TSL 相关问题直接查阅 `rulesets/tsl/index.md` 与 `docs/tsl/`。
先区分三个路径概念:
- `project_root`:目标项目根目录。
- `deploy_root`:相对于 `project_root` 的项目内目标目录。
- 外部 clone 出来的 Playbook 路径(如 `/opt/playbook`):只是执行部署脚本的位置,不是部署目标
- `playbook_root`:相对于 `project_root` 的项目内 Playbook 根目录。
- `install_mode``subtree` 表示 Playbook 已由 git subtree 放在项目内;`snapshot` 表示从外部 clone 安装裁剪快照
- 外部 clone 出来的 Playbook 路径(如 `/opt/playbook`):只是执行安装脚本的位置,不是项目内 Playbook 根目录。
以 TSL 为例,Playbook 在项目内的默认部署根是 `docs/standards/playbook`;如果你把 `deploy_root` 改成 `custom/playbook`,则部署结果会落到 `<project_root>/custom/playbook`,文档和脚本入口也会跟着变成 `custom/playbook/docs/...``custom/playbook/scripts/...`
以 TSL 为例,Playbook 在项目内的默认根是 `docs/standards/playbook`;如果你把 `playbook_root` 改成 `custom/playbook`,则快照会落到 `<project_root>/custom/playbook`,文档和脚本入口也会跟着变成 `custom/playbook/docs/...``custom/playbook/scripts/...`
#### 方式一:`git subtree`
@@ -214,6 +217,8 @@ git subtree add --prefix docs/standards/playbook https://git.mytsl.cn/csh/playbo
cat <<'EOF' > playbook.toml
[playbook]
project_root = "."
playbook_root = "docs/standards/playbook"
install_mode = "subtree"
[sync_standards]
langs = ["tsl"]
@@ -249,6 +254,8 @@ git commit -m ":package: deps(playbook): add tsl standards"
# playbook.toml
[playbook]
project_root = "."
playbook_root = "docs/standards/playbook"
install_mode = "subtree"
[sync_standards]
langs = ["tsl", "cpp"]
@@ -277,19 +284,17 @@ git commit -m ":package: deps(playbook): add tsl standards"
git clone https://git.mytsl.cn/csh/playbook.git /opt/playbook
```
2. 在目标项目根创建 `playbook.toml`,并用 `deploy_root` 指定项目内的部署根。例如:
2. 在目标项目根创建 `playbook.toml`,并用 `playbook_root` 指定项目内的 Playbook 根。例如:
- `project_root` 写目标项目根目录。
- `deploy_root` 写目标项目内的相对路径。
- 不要把外部 clone 的路径(如 `/opt/playbook`)写进 `deploy_root`;那只是你执行脚本的位置
- `playbook_root` 写目标项目内的相对路径。
- `install_mode = "snapshot"` 表示由外部 clone 安装项目内快照
- 不要把外部 clone 的路径(如 `/opt/playbook`)写进 `playbook_root`;那只是你执行脚本的位置。
```toml
[playbook]
project_root = "."
deploy_root = "custom/playbook"
[vendor]
langs = ["tsl"]
playbook_root = "custom/playbook"
install_mode = "snapshot"
[sync_standards]
langs = ["tsl"]
@@ -308,10 +313,10 @@ git commit -m ":package: deps(playbook): add tsl standards"
说明:
- 这里的 `[vendor]` 是“把 Playbook 快照部署进目标项目”的执行步骤,不是第三种正式部署路线
- `deploy_root` 永远表示目标项目内的部署目录;它不是外部 clone 出来的 Playbook 仓库路径。
- 外部 clone 场景下必须显式填写 `deploy_root`;脚本不会替你补默认部署目录。
- 如果 `deploy_root = "custom/playbook"`,部署后的项目内入口会是 `custom/playbook/scripts/playbook.py`、`custom/playbook/docs/index.md`。
- `install_mode = "snapshot"` 会先把 Playbook 裁剪快照安装到目标项目的 `playbook_root`,再执行后续同步动作
- `playbook_root` 永远表示目标项目内的 Playbook 根;它不是外部 clone 出来的 Playbook 仓库路径。
- 外部 clone 场景下必须显式填写 `playbook_root`;脚本不会替你补默认项目内根目录。
- 如果 `playbook_root = "custom/playbook"`,部署后的项目内入口会是 `custom/playbook/scripts/playbook.py`、`custom/playbook/docs/index.md`。
---
@@ -347,7 +352,7 @@ git commit -m ":package: deps(playbook): add tsl standards"
├── .gitattributes # 行尾/文本规范
├── AGENTS.md # Codex 入口(由 playbook 自动生成/更新)
├── CLAUDE.md # Claude Code 入口(自动注入 @AGENTS.md
├── <deploy_root>/ # 本 Playbook 在项目内的部署根(默认 docs/standards/playbook
├── <playbook_root>/ # 本 Playbook 在项目内的根(默认 docs/standards/playbook
│ ├── docs/
│ ├── rulesets/
│ ├── scripts/