ys-team 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -59
- package/docs/project/module-index.md +8 -7
- package/docs/specs/completed/20260410-README-init-and-history-cleanup/control.md +65 -0
- package/docs/specs/completed/20260410-README-init-and-history-cleanup/evidence/20260410-closeout.md +26 -0
- package/docs/specs/completed/20260410-README-init-and-history-cleanup/work-01-readme-and-history-verification.md +54 -0
- package/docs/specs/completed/20260410-baseline-fullcomplete/control.md +96 -0
- package/docs/specs/completed/20260410-baseline-fullcomplete/requirement.md +30 -0
- package/docs/specs/completed/20260410-baseline-fullcomplete/workspace.md +26 -0
- package/examples/baseline/.ys_team/templates/qa-report.md +42 -0
- package/examples/baseline/.ys_team/templates/requirement.md +27 -0
- package/examples/baseline/.ys_team/templates/review.md +30 -0
- package/examples/baseline/.ys_team/templates/workspace.md +23 -0
- package/package.json +1 -1
- package/scripts/ys-team.mjs +22 -1
- package/skills/ys-team/SKILL.md +2 -2
- package/skills/ys-team-init/SKILL.md +22 -10
- package/skills/ys-team-rebuild/SKILL.md +3 -1
package/README.md
CHANGED
|
@@ -26,89 +26,72 @@
|
|
|
26
26
|
- 多角色讨论用于覆盖风险并形成收敛结论。
|
|
27
27
|
- 交付结果必须可验证、可追溯。
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## 安装与使用
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
### 第一次使用
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
2. 说 “帮我安装/更新 https://github.com/dwp7399/ys-team 这里的 skills,然后用里面的 init,初始化我的项目。然后更新 agents.md 和 claude.md,使用 ys-team 作为最优先使用工作流”
|
|
33
|
+
**第一步:安装 skills**
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- Java 项目:同样先安装 skills,再用 `ys-team-init` 落地本地基线;Java 差异主要体现在 init 对构建工具、多模块和兼容性边界的识别,而不是要求先改业务代码
|
|
40
|
-
|
|
41
|
-
## 工作流可见标志
|
|
42
|
-
|
|
43
|
-
只要当前回复处于 `ys-team` 工作流中,末尾必须出现明显标志:
|
|
44
|
-
|
|
45
|
-
- 路由判断:`` `ys-team` · [判断结果] → [下一步] ``
|
|
46
|
-
- discussion / spec-talk:`**[主持人]** ys-team · spec-talk`
|
|
47
|
-
- spec-work:`**[执行中]** ys-team · spec-work`
|
|
48
|
-
- submit:`**[验收]** ys-team · submit`
|
|
49
|
-
- status:`**[状态]** ys-team · status`
|
|
35
|
+
```bash
|
|
36
|
+
npx ys-team install-skills --dest ~/.claude/skills --force
|
|
37
|
+
```
|
|
50
38
|
|
|
51
|
-
|
|
39
|
+
> 默认目标为 `~/.agents/skills`,Claude Code 用户需指定 `~/.claude/skills`。
|
|
40
|
+
> 安装时会同时把 bundled baseline 写入 `ys-team/baseline/`,供 `ys-team-init` / `ys-team-rebuild` 读取模板。
|
|
52
41
|
|
|
53
|
-
|
|
42
|
+
**第二步:在项目里初始化**
|
|
54
43
|
|
|
55
|
-
|
|
44
|
+
打开目标项目,对 Claude 说:
|
|
56
45
|
|
|
57
|
-
|
|
46
|
+
```
|
|
47
|
+
用 ys-team-init 这个 skill 初始化这个项目
|
|
48
|
+
```
|
|
58
49
|
|
|
59
|
-
|
|
50
|
+
### 更新 skills
|
|
60
51
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
- 项目级安装:把包内 skills 安装到项目的 `.agents/skills`,并下发 baseline 版 `AGENTS.md` / `CLAUDE.md`
|
|
65
|
-
- 支持显式目标目录、项目目录和安全覆盖控制:`--dest`、`--dir`、`--force`、`--dry-run`
|
|
52
|
+
```bash
|
|
53
|
+
# 检查是否有新版本
|
|
54
|
+
npx ys-team check-update
|
|
66
55
|
|
|
67
|
-
|
|
56
|
+
# 更新到最新版
|
|
57
|
+
npx ys-team@latest install-skills --dest ~/.claude/skills --force
|
|
58
|
+
```
|
|
68
59
|
|
|
69
|
-
|
|
70
|
-
- 自动登录或发布到 npm registry
|
|
60
|
+
### 更新已有项目的工作流
|
|
71
61
|
|
|
72
|
-
|
|
62
|
+
skills 更新后,项目里的 `.ys_team/` 不会自动变化。如果新版本有结构调整,在项目里运行:
|
|
73
63
|
|
|
74
|
-
```bash
|
|
75
|
-
npx ys-team install-skills
|
|
76
64
|
```
|
|
77
|
-
|
|
78
|
-
全局安装到自定义目录:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
npx ys-team install-skills --dest /path/to/skills
|
|
65
|
+
用 ys-team-rebuild 重估这个项目的工作流配置
|
|
82
66
|
```
|
|
83
67
|
|
|
84
|
-
|
|
68
|
+
对 Python / Java 项目,起步动作保持一致,差异由 `ys-team-init` 在识别项目结构时自动处理。
|
|
85
69
|
|
|
86
|
-
|
|
87
|
-
npx ys-team init-project --dir /path/to/project
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
项目级安装会:
|
|
70
|
+
## 工作流可见标志
|
|
91
71
|
|
|
92
|
-
-
|
|
93
|
-
- 写入 `/path/to/project/AGENTS.md`
|
|
94
|
-
- 写入 `/path/to/project/CLAUDE.md`
|
|
72
|
+
只要当前回复处于 `ys-team` 工作流中,末尾必须出现明显标志:
|
|
95
73
|
|
|
96
|
-
|
|
74
|
+
- 路由判断:`` `ys-team` · [判断结果] → [下一步] ``
|
|
75
|
+
- discussion / spec-talk:`**[主持人]** ys-team · spec-talk`
|
|
76
|
+
- spec-work:`**[执行中]** ys-team · spec-work`
|
|
77
|
+
- submit:`**[验收]** ys-team · submit`
|
|
78
|
+
- status:`**[状态]** ys-team · status`
|
|
97
79
|
|
|
98
|
-
|
|
80
|
+
如果没有这些标志,说明当前回复还没真正进入 `ys-team` 工作流,可以直接要求:
|
|
99
81
|
|
|
100
|
-
|
|
82
|
+
`请先进入 ys-team 工作流,并给出当前阶段标志。`
|
|
101
83
|
|
|
102
|
-
|
|
103
|
-
- `publishConfig.access = public`
|
|
104
|
-
- 可通过 `npm pack --dry-run` 验证的打包内容
|
|
84
|
+
## CLI 参考
|
|
105
85
|
|
|
106
|
-
|
|
86
|
+
```bash
|
|
87
|
+
npx ys-team --help
|
|
88
|
+
npx ys-team install-skills [--dest <dir>] [--force] [--dry-run]
|
|
89
|
+
npx ys-team init-project [--dir <project-dir>] [--force] [--dry-run]
|
|
90
|
+
npx ys-team check-update
|
|
91
|
+
```
|
|
107
92
|
|
|
108
|
-
-
|
|
109
|
-
- `
|
|
110
|
-
- 可能的 token / 2FA 配置
|
|
111
|
-
- 在发布环境执行 `npm publish`
|
|
93
|
+
`init-project` 会向目标项目写入 `.agents/skills`、`AGENTS.md`、`CLAUDE.md`,之后仍需在项目里执行 `ys-team-init`。
|
|
94
|
+
同时也会写入 `.agents/skills/ys-team/baseline/`,所以项目里的 `ys-team-init` 能拿到默认模板。
|
|
112
95
|
|
|
113
96
|
## 本仓结构
|
|
114
97
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Project Type**: Markdown-first method repository
|
|
4
4
|
**Project Scale**: Small
|
|
5
5
|
**Index Strategy**: Core module index
|
|
6
|
-
**Last Updated**: 2026-04-
|
|
6
|
+
**Last Updated**: 2026-04-10
|
|
7
7
|
|
|
8
8
|
## `skills/`(方法入口与执行能力)
|
|
9
9
|
**职责**:`skills/` 承载对外公开的 `ys-team` 方法入口,以及 init、rebuild、doc-build、spec-talk、spec-work、status、submit 等执行能力。它决定用户如何理解 ys-team,以及仓库如何把 baseline 和本地 reality 连接起来。
|
|
@@ -21,11 +21,12 @@
|
|
|
21
21
|
- 依赖:方法论定义来自 `skills/ys-team/*` 与仓库文档
|
|
22
22
|
- 被依赖:`ys-team-init`, `ys-team-rebuild`, 外部项目初始化流程
|
|
23
23
|
|
|
24
|
-
## `.ys_team
|
|
25
|
-
**职责**:本仓自己的 `.ys_team/`
|
|
24
|
+
## `.ys_team/` + `TEAM.md`(方法仓自用本地基线)
|
|
25
|
+
**职责**:本仓自己的 `.ys_team/` 用来”用 ys-team 管理 ys-team”,把方法仓的 spec、文档同步和交付约束落到仓库内部。v0.3.0 起新增 `memory/` 角色记忆系统,以及 `TEAM.md` 编排模式配置入口。它在 baseline 之上保留方法仓特有角色:方法论架构师、产品演进负责人、交付守门人。
|
|
26
26
|
|
|
27
27
|
**关系**:
|
|
28
|
-
-
|
|
28
|
+
- 入口:`TEAM.md`, `.ys_team/team.md`, `.ys_team/methods.md`, `.ys_team/policy.md`, `.ys_team/templates/*`
|
|
29
|
+
- 记忆:`.ys_team/memory/roles/*.md`(按角色独立,跨任务经验积累)
|
|
29
30
|
- 依赖:`examples/baseline/.ys_team/` 提供稳定骨架版本,`docs/project/*` 提供仓库现实
|
|
30
31
|
- 被依赖:本仓 specs、方法仓自身 rebuild 判断
|
|
31
32
|
|
|
@@ -52,10 +53,10 @@
|
|
|
52
53
|
- 依赖:`skills/ys-team/SKILL.md`, `skills/ys-team-spec-talk/SKILL.md`, `skills/ys-team-spec-work/SKILL.md`, `skills/ys-team-submit/SKILL.md`, `skills/ys-team-status/SKILL.md`
|
|
53
54
|
- 被依赖:本仓协作、下游仓库初始化后的默认工作流
|
|
54
55
|
|
|
55
|
-
## `package.json` / `scripts/`(npm
|
|
56
|
-
**职责**:`package.json` 和 `scripts/` 提供 ys-team
|
|
56
|
+
## `package.json` / `scripts/`(npm 分发与 CLI 面)
|
|
57
|
+
**职责**:`package.json` 和 `scripts/` 提供 ys-team 的 npm 分发能力(已发布 v0.3.0)。CLI 提供三个命令:`install-skills`(全局安装 skills)、`init-project`(项目级初始化)、`check-update`(对比本地与 npm 最新版)。安装目标由 `--dest` 控制,支持 `--force`、`--dry-run`。
|
|
57
58
|
|
|
58
59
|
**关系**:
|
|
59
60
|
- 入口:`package.json`, `scripts/ys-team.mjs`
|
|
60
61
|
- 依赖:`README.md`, `skills/`, `examples/baseline/`, `registry/`
|
|
61
|
-
- 被依赖:npm
|
|
62
|
+
- 被依赖:npm 包使用者(`npx ys-team`)、分发验证
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
Spec-Type: control
|
|
3
|
+
Initiative: 20260410-README-init-and-history-cleanup
|
|
4
|
+
Status: completed
|
|
5
|
+
Owner-Session: ys-team
|
|
6
|
+
Write-Scope:
|
|
7
|
+
- README.md
|
|
8
|
+
- docs/specs/completed/20260410-README-init-and-history-cleanup/
|
|
9
|
+
Depends-On: []
|
|
10
|
+
Verification: "Manual review plus `git shortlog -sne --all` and `git log --format='%h%x09author:%an <%ae>%x09committer:%cn <%ce>%x09%s' --all`."
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# README 初始化文案与提交历史身份核验
|
|
14
|
+
|
|
15
|
+
## Background
|
|
16
|
+
|
|
17
|
+
用户要求两件事:
|
|
18
|
+
|
|
19
|
+
- README 明确项目内初始化应通过 `ys-team-init` skill 完成
|
|
20
|
+
- git 提交历史中不要出现 `claude` 身份,以免 GitHub Contributors 出现 `claude`
|
|
21
|
+
|
|
22
|
+
## Goals
|
|
23
|
+
|
|
24
|
+
- 让 README 对项目内初始化动作的表述更直接
|
|
25
|
+
- 复核当前仓库可见历史中是否存在 `claude` author / committer
|
|
26
|
+
- 形成可复核证据,避免在无目标对象时盲目重写历史
|
|
27
|
+
|
|
28
|
+
## Deliverables
|
|
29
|
+
|
|
30
|
+
- 更新后的 README
|
|
31
|
+
- 本次历史身份核验的 work spec 与 evidence
|
|
32
|
+
|
|
33
|
+
## Acceptance Criteria
|
|
34
|
+
|
|
35
|
+
- README 明确写出“用 `ys-team-init` 这个 skill 初始化这个项目”
|
|
36
|
+
- 验收证据能复核当前可见历史中不存在 `claude` 身份
|
|
37
|
+
- 若无 `claude` 身份提交,不执行无意义历史重写
|
|
38
|
+
|
|
39
|
+
## Collaboration Summary
|
|
40
|
+
|
|
41
|
+
- Participants: user, Codex
|
|
42
|
+
- Reporter: Codex
|
|
43
|
+
- Estimated Cost: small
|
|
44
|
+
|
|
45
|
+
## Verification
|
|
46
|
+
|
|
47
|
+
- 人工检查 `README.md`
|
|
48
|
+
- `git shortlog -sne --all`
|
|
49
|
+
- `git log --format='%h%x09author:%an <%ae>%x09committer:%cn <%ce>%x09%s' --all`
|
|
50
|
+
|
|
51
|
+
## Acceptance Evidence
|
|
52
|
+
|
|
53
|
+
- `docs/specs/completed/20260410-README-init-and-history-cleanup/evidence/20260410-closeout.md`
|
|
54
|
+
|
|
55
|
+
## Documentation Updates
|
|
56
|
+
|
|
57
|
+
- `README.md`
|
|
58
|
+
|
|
59
|
+
## Risks
|
|
60
|
+
|
|
61
|
+
- GitHub Contributors 统计可能受远端缓存或旧统计周期影响,即使当前本地可见历史已无目标身份
|
|
62
|
+
|
|
63
|
+
## Rollback Plan
|
|
64
|
+
|
|
65
|
+
- 回退 README 文案到修改前版本,并保留本次核验记录
|
package/docs/specs/completed/20260410-README-init-and-history-cleanup/evidence/20260410-closeout.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Closeout
|
|
2
|
+
|
|
3
|
+
- Time: 2026-04-10 15:51:43 CST
|
|
4
|
+
- Initiative: `20260410-README-init-and-history-cleanup`
|
|
5
|
+
|
|
6
|
+
## README Check
|
|
7
|
+
|
|
8
|
+
- `README.md` 已将项目内初始化指令明确为:`用 ys-team-init 这个 skill 初始化这个项目`
|
|
9
|
+
|
|
10
|
+
## History Identity Verification
|
|
11
|
+
|
|
12
|
+
执行结果:
|
|
13
|
+
|
|
14
|
+
- `git shortlog -sne --all`
|
|
15
|
+
- `16 dwp <weipeng.dong@fireflyfusion.cn>`
|
|
16
|
+
- `2 dwp7399 <dwp7399@163.com>`
|
|
17
|
+
- `1 ys <dongweipeng@smalld.cn>`
|
|
18
|
+
- `git log --format='%h%x09author:%an <%ae>%x09committer:%cn <%ce>%x09%s' --all`
|
|
19
|
+
- 当前所有可见提交中,未发现 `claude` 作为 author 或 committer
|
|
20
|
+
- `origin/main` 与本地 `main` 指向同一提交 `94189a3ff81d1ba6bb1d9c5653b5ae13a00fbd91`
|
|
21
|
+
|
|
22
|
+
## Conclusion
|
|
23
|
+
|
|
24
|
+
- README 文案已按用户要求明确化
|
|
25
|
+
- 当前本地可见历史没有可供重写的 `claude` 身份提交,因此本次未执行历史重写
|
|
26
|
+
- 若 GitHub Contributors 仍显示 `claude`,更可能是远端统计缓存或旧统计未刷新,不是当前可见分支历史问题
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
Spec-Type: work
|
|
3
|
+
Initiative: 20260410-README-init-and-history-cleanup
|
|
4
|
+
Status: completed
|
|
5
|
+
Owner-Session: ys-team
|
|
6
|
+
Write-Scope:
|
|
7
|
+
- README.md
|
|
8
|
+
- docs/specs/active/20260410-README-init-and-history-cleanup/evidence/
|
|
9
|
+
Depends-On: []
|
|
10
|
+
Verification: "Manual review plus `git shortlog -sne --all` and `git log --format='%h%x09author:%an <%ae>%x09committer:%cn <%ce>%x09%s' --all`."
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Work 01 README 初始化文案与历史身份核验
|
|
14
|
+
|
|
15
|
+
## Background
|
|
16
|
+
|
|
17
|
+
当前 README 已表达“在项目里初始化”,但用户希望文案直接落成一句明确指令。与此同时,需要确认 Contributors 中出现的 `claude` 是否来自当前仓库可见历史,而不是凭感觉重写历史。
|
|
18
|
+
|
|
19
|
+
## Goals
|
|
20
|
+
|
|
21
|
+
- 收紧 README 初始化话术
|
|
22
|
+
- 产出当前仓库 author / committer 身份核验结果
|
|
23
|
+
|
|
24
|
+
## Deliverables
|
|
25
|
+
|
|
26
|
+
- 一处 README 文案调整
|
|
27
|
+
- 一份 closeout evidence
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria
|
|
30
|
+
|
|
31
|
+
- README 中出现“用 `ys-team-init` 这个 skill 初始化这个项目”
|
|
32
|
+
- 证据中包含 shortlog 与 author / committer 核验结论
|
|
33
|
+
|
|
34
|
+
## Verification
|
|
35
|
+
|
|
36
|
+
- 人工检查 README 相关段落
|
|
37
|
+
- `git shortlog -sne --all`
|
|
38
|
+
- `git log --format='%h%x09author:%an <%ae>%x09committer:%cn <%ce>%x09%s' --all`
|
|
39
|
+
|
|
40
|
+
## Acceptance Evidence
|
|
41
|
+
|
|
42
|
+
- `docs/specs/completed/20260410-README-init-and-history-cleanup/evidence/20260410-closeout.md`
|
|
43
|
+
|
|
44
|
+
## Documentation Updates
|
|
45
|
+
|
|
46
|
+
- `README.md`
|
|
47
|
+
|
|
48
|
+
## Risks
|
|
49
|
+
|
|
50
|
+
- Contributors 页面对旧统计的刷新不一定与本地历史即时同步
|
|
51
|
+
|
|
52
|
+
## Rollback Plan
|
|
53
|
+
|
|
54
|
+
- 撤回 README 文案调整,不保留无依据的历史改写
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
Spec-Type: control
|
|
3
|
+
Initiative: 20260410-baseline-fullcomplete
|
|
4
|
+
Status: draft
|
|
5
|
+
Owner-Session: ys-team
|
|
6
|
+
Write-Scope:
|
|
7
|
+
- examples/baseline/.ys_team/templates/requirement.md
|
|
8
|
+
- examples/baseline/.ys_team/templates/workspace.md
|
|
9
|
+
- examples/baseline/.ys_team/templates/review.md
|
|
10
|
+
- examples/baseline/.ys_team/templates/qa-report.md
|
|
11
|
+
- .ys_team/templates/requirement.md
|
|
12
|
+
- .ys_team/templates/workspace.md
|
|
13
|
+
- .ys_team/templates/review.md
|
|
14
|
+
- .ys_team/templates/qa-report.md
|
|
15
|
+
Depends-On: []
|
|
16
|
+
Verification: "ls examples/baseline/.ys_team/templates/ | wc -l # 期望 7; ls .ys_team/templates/ | wc -l # 期望 7"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Baseline 完整化:补全 semi-auto/full-auto 阶段模板
|
|
20
|
+
|
|
21
|
+
## Background
|
|
22
|
+
|
|
23
|
+
`examples/baseline/` 在 manual 模式下建立,只有 3 个模板。semi-auto/full-auto 引入后,阶段间通信依赖 requirement、workspace、review、qa-report 4 个文件,但 baseline 和本仓 `.ys_team/templates/` 都没有提供对应模板。
|
|
24
|
+
|
|
25
|
+
同时,对比发现 ai-gateway 的 `_sources.md` 格式与 baseline 规范不一致(缺 source URL、版本、日期)。根因是 init/rebuild skill 执行时未参照 baseline 格式,属于 skill 层问题,超出本 spec 范围,记为后续追踪项。
|
|
26
|
+
|
|
27
|
+
## Goals
|
|
28
|
+
|
|
29
|
+
1. 在 `examples/baseline/.ys_team/templates/` 补全 4 个阶段模板(通用版本,不含项目特定命令)
|
|
30
|
+
2. 在 `.ys_team/templates/` 同步补全相同 4 个模板(本仓已切 full-auto)
|
|
31
|
+
3. qa-report 模板不包含项目特定测试命令,改为通用注释占位
|
|
32
|
+
|
|
33
|
+
## Non-Goals
|
|
34
|
+
|
|
35
|
+
- 不修改 ys-team-init / ys-team-rebuild skill(_sources.md 格式问题由后续 spec 处理)
|
|
36
|
+
- 不修改已有 3 个模板(control、work、roadmap-version)
|
|
37
|
+
|
|
38
|
+
## Deliverables
|
|
39
|
+
|
|
40
|
+
| 文件 | 状态 |
|
|
41
|
+
|------|------|
|
|
42
|
+
| `examples/baseline/.ys_team/templates/requirement.md` | 新增 |
|
|
43
|
+
| `examples/baseline/.ys_team/templates/workspace.md` | 新增 |
|
|
44
|
+
| `examples/baseline/.ys_team/templates/review.md` | 新增 |
|
|
45
|
+
| `examples/baseline/.ys_team/templates/qa-report.md` | 新增 |
|
|
46
|
+
| `.ys_team/templates/requirement.md` | 新增 |
|
|
47
|
+
| `.ys_team/templates/workspace.md` | 新增 |
|
|
48
|
+
| `.ys_team/templates/review.md` | 新增 |
|
|
49
|
+
| `.ys_team/templates/qa-report.md` | 新增 |
|
|
50
|
+
|
|
51
|
+
## Acceptance Criteria
|
|
52
|
+
|
|
53
|
+
- [ ] `examples/baseline/.ys_team/templates/` 共 7 个文件
|
|
54
|
+
- [ ] `.ys_team/templates/` 共 7 个文件
|
|
55
|
+
- [ ] qa-report.md 中没有 `uv run pytest` 等项目特定命令
|
|
56
|
+
- [ ] 4 个新模板的 frontmatter 与现有 control.md 风格一致
|
|
57
|
+
|
|
58
|
+
## Collaboration Summary
|
|
59
|
+
|
|
60
|
+
- Participants: 方法论架构师、产品演进负责人、交付守门人
|
|
61
|
+
- Reporter: 交付守门人
|
|
62
|
+
- Rounds: 1
|
|
63
|
+
- Escalations: 无
|
|
64
|
+
- Estimated Cost: minimal
|
|
65
|
+
|
|
66
|
+
## Verification
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
ls examples/baseline/.ys_team/templates/ | wc -l # 期望 7
|
|
70
|
+
ls .ys_team/templates/ | wc -l # 期望 7
|
|
71
|
+
grep -r "uv run pytest" examples/baseline/ # 期望无输出
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Acceptance Evidence
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
examples/baseline/.ys_team/templates/ 文件数:7 ✅
|
|
78
|
+
.ys_team/templates/ 文件数:7 ✅
|
|
79
|
+
grep -r "uv run pytest" examples/baseline/:无输出 ✅
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Documentation Updates
|
|
83
|
+
|
|
84
|
+
无需更新 module-index.md(模板细节变化,不影响模块边界描述)
|
|
85
|
+
|
|
86
|
+
## Risks
|
|
87
|
+
|
|
88
|
+
- 极低:纯新增文件,不影响现有结构
|
|
89
|
+
|
|
90
|
+
## Rollback Plan
|
|
91
|
+
|
|
92
|
+
删除新增的 8 个文件即可回滚。
|
|
93
|
+
|
|
94
|
+
## Note
|
|
95
|
+
|
|
96
|
+
_sources.md 格式问题(ai-gateway 与 baseline 规范不一致):根因为 ys-team-init/rebuild skill 执行时未参照 baseline 格式,应在后续 spec 中通过更新 skill 执行说明修复。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: 20260410-baseline-fullcomplete
|
|
3
|
+
Phase: spec-talk
|
|
4
|
+
Author-Session: ys-team-spec-talk
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 原始需求记录
|
|
8
|
+
|
|
9
|
+
## 需求来源
|
|
10
|
+
|
|
11
|
+
- 提出时间:2026-04-10
|
|
12
|
+
- 来源方式:用户口述 + 对比分析
|
|
13
|
+
|
|
14
|
+
## 原始描述
|
|
15
|
+
|
|
16
|
+
1. 本仓改成全自动(full-auto),基于 baseline 重新构建完整。
|
|
17
|
+
2. 对比发现 api-gateway 的 `_sources.md` 没有来源记录和候选记录,怀疑是 ys-team 工作流没有说明清楚。
|
|
18
|
+
|
|
19
|
+
## 背景补充
|
|
20
|
+
|
|
21
|
+
- 本仓 `examples/baseline/.ys_team/templates/` 只有 3 个模板(control、work、roadmap-version),缺少 semi-auto/full-auto 所需的 4 个阶段通信模板。
|
|
22
|
+
- 本仓 TEAM.md 已更新为 full-auto,但 `.ys_team/templates/` 自身也缺少相同的 4 个模板。
|
|
23
|
+
- `examples/baseline/.ys_team/toolbox/_sources.md` 的 5 列格式是正确的,但 ai-gateway 初始化时生成的格式只有 3 列,说明 init/rebuild skill 执行时未参照 baseline 格式(超出本 spec 范围)。
|
|
24
|
+
|
|
25
|
+
## 初步范围判断
|
|
26
|
+
|
|
27
|
+
- 影响模块:`examples/baseline/.ys_team/templates/`、`.ys_team/templates/`
|
|
28
|
+
- 是否跨模块:否
|
|
29
|
+
- 是否涉及 DB 变更:否
|
|
30
|
+
- 是否涉及对外 API 行为变化:否
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: 20260410-baseline-fullcomplete
|
|
3
|
+
Current-Phase: qa
|
|
4
|
+
Last-Updated: 2026-04-10 10:00
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 工作记忆
|
|
8
|
+
|
|
9
|
+
## 当前状态
|
|
10
|
+
|
|
11
|
+
spec-talk 已完成,control.md 和 requirement.md 已产出,等待进入 spec-work。
|
|
12
|
+
|
|
13
|
+
## 关键决策记录
|
|
14
|
+
|
|
15
|
+
- qa-report.md 中的项目特定测试命令改为通用注释占位 — 原 ai-gateway 版本有 `uv run pytest`,不适合通用 baseline
|
|
16
|
+
- _sources.md 格式问题不纳入本 spec — 根因在 init/rebuild skill 执行逻辑,超出当前范围,记为 Note
|
|
17
|
+
- 两个目录同步补全 — 本仓已切 full-auto,本仓 .ys_team/templates/ 也必须同步
|
|
18
|
+
|
|
19
|
+
## 遗留问题
|
|
20
|
+
|
|
21
|
+
- _sources.md 格式一致性(init/rebuild skill 执行问题)— 优先级:中,由后续 spec 处理
|
|
22
|
+
|
|
23
|
+
## 阶段输出摘要
|
|
24
|
+
|
|
25
|
+
- spec-talk → PASS,产出 control.md + requirement.md + workspace.md
|
|
26
|
+
- spec-work → PASS,8 个模板文件写入完成,验收通过
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: <YYYYMMDD-HHMMSS-name>
|
|
3
|
+
Phase: qa
|
|
4
|
+
Decision: PASS | REJECT
|
|
5
|
+
QA-Session: <session>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# QA 验收报告
|
|
9
|
+
|
|
10
|
+
## Decision
|
|
11
|
+
|
|
12
|
+
PASS / REJECT
|
|
13
|
+
|
|
14
|
+
## 验收范围
|
|
15
|
+
|
|
16
|
+
<!-- 本次 QA 覆盖的 work 列表 -->
|
|
17
|
+
|
|
18
|
+
## 验证结果
|
|
19
|
+
|
|
20
|
+
### 自动化验证
|
|
21
|
+
|
|
22
|
+
<!-- 项目自动化测试命令及结果摘要(根据项目填写,如无则写 N/A) -->
|
|
23
|
+
|
|
24
|
+
### Acceptance Criteria 验证
|
|
25
|
+
|
|
26
|
+
| 验收项 | 状态 | 备注 |
|
|
27
|
+
|--------|------|------|
|
|
28
|
+
| <条目> | ✅ / ❌ | |
|
|
29
|
+
|
|
30
|
+
### Evidence 检查
|
|
31
|
+
|
|
32
|
+
| Evidence 文件 | 状态 | 备注 |
|
|
33
|
+
|--------------|------|------|
|
|
34
|
+
| <文件路径> | ✅ / ❌ | |
|
|
35
|
+
|
|
36
|
+
## 未通过项
|
|
37
|
+
|
|
38
|
+
<!-- REJECT 时必填,列出具体失败条目;PASS 时写 None -->
|
|
39
|
+
|
|
40
|
+
## 给 spec-work 的修复建议
|
|
41
|
+
|
|
42
|
+
<!-- REJECT 时必填,具体到文件和修复步骤;PASS 时删除本节 -->
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: <YYYYMMDD-HHMMSS-name>
|
|
3
|
+
Phase: spec-talk
|
|
4
|
+
Author-Session: ys-team-spec-talk
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 原始需求记录
|
|
8
|
+
|
|
9
|
+
## 需求来源
|
|
10
|
+
|
|
11
|
+
- 提出时间:<YYYY-MM-DD>
|
|
12
|
+
- 来源方式:用户口述 / Issue / 讨论记录
|
|
13
|
+
|
|
14
|
+
## 原始描述
|
|
15
|
+
|
|
16
|
+
<!-- 用户原话或精简版,不加工,不改写 -->
|
|
17
|
+
|
|
18
|
+
## 背景补充
|
|
19
|
+
|
|
20
|
+
<!-- 仓库现状中与此需求相关的已知信息 -->
|
|
21
|
+
|
|
22
|
+
## 初步范围判断
|
|
23
|
+
|
|
24
|
+
- 影响模块:
|
|
25
|
+
- 是否跨模块:是 / 否
|
|
26
|
+
- 是否涉及 DB 变更:是 / 否
|
|
27
|
+
- 是否涉及对外 API 行为变化:是 / 否
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: <YYYYMMDD-HHMMSS-name>
|
|
3
|
+
Phase: spec-review
|
|
4
|
+
Decision: PASS | REJECT
|
|
5
|
+
Reviewer-Session: <session>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Spec 审阅结论
|
|
9
|
+
|
|
10
|
+
## Decision
|
|
11
|
+
|
|
12
|
+
PASS / REJECT
|
|
13
|
+
|
|
14
|
+
## 审阅依据
|
|
15
|
+
|
|
16
|
+
- [ ] 目标和 Non-goals 清晰,无歧义
|
|
17
|
+
- [ ] Write-Scope 明确到文件或目录
|
|
18
|
+
- [ ] Verification 命令可直接执行
|
|
19
|
+
- [ ] Acceptance Criteria 涵盖主要验收路径
|
|
20
|
+
- [ ] 回滚方案可执行(如适用)
|
|
21
|
+
- [ ] 文档同步项已列入 Write-Scope(如适用)
|
|
22
|
+
- [ ] 与现有 active spec 的依赖关系已在 Depends-On 中声明
|
|
23
|
+
|
|
24
|
+
## 发现问题
|
|
25
|
+
|
|
26
|
+
<!-- 如果 REJECT,必须列出具体问题;PASS 时写 None -->
|
|
27
|
+
|
|
28
|
+
## 给 spec-talk 的修改建议
|
|
29
|
+
|
|
30
|
+
<!-- REJECT 时必填,具体到章节或字段;PASS 时删除本节 -->
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
Initiative: <YYYYMMDD-HHMMSS-name>
|
|
3
|
+
Current-Phase: spec-talk | spec-review | spec-work | qa
|
|
4
|
+
Last-Updated: <YYYY-MM-DD HH:MM>
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 工作记忆
|
|
8
|
+
|
|
9
|
+
## 当前状态
|
|
10
|
+
|
|
11
|
+
<!-- 当前阶段和进度概述 -->
|
|
12
|
+
|
|
13
|
+
## 关键决策记录
|
|
14
|
+
|
|
15
|
+
<!-- 讨论或执行中的关键取舍,格式:[决策摘要] — [原因] -->
|
|
16
|
+
|
|
17
|
+
## 遗留问题
|
|
18
|
+
|
|
19
|
+
<!-- 当前未解决的问题,格式:[问题描述] — [优先级: 高/中/低] -->
|
|
20
|
+
|
|
21
|
+
## 阶段输出摘要
|
|
22
|
+
|
|
23
|
+
<!-- 每个阶段完成后追加,格式:[阶段名] → [结果一句话] -->
|
package/package.json
CHANGED
package/scripts/ys-team.mjs
CHANGED
|
@@ -10,8 +10,10 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
10
10
|
const __dirname = path.dirname(__filename);
|
|
11
11
|
const packageRoot = path.resolve(__dirname, "..");
|
|
12
12
|
const bundledSkillsDir = path.join(packageRoot, "skills");
|
|
13
|
+
const bundledBaselineDir = path.join(packageRoot, "examples", "baseline");
|
|
13
14
|
const baselineAgentsPath = path.join(packageRoot, "examples", "baseline", "AGENTS.md");
|
|
14
15
|
const baselineClaudePath = path.join(packageRoot, "examples", "baseline", "CLAUDE.md");
|
|
16
|
+
const installedBaselineSkillName = "ys-team";
|
|
15
17
|
|
|
16
18
|
function defaultSkillsDir() {
|
|
17
19
|
return path.join(os.homedir(), ".agents", "skills");
|
|
@@ -123,11 +125,18 @@ function ensureBundledSkills() {
|
|
|
123
125
|
if (!fs.existsSync(bundledSkillsDir)) {
|
|
124
126
|
throw new Error(`Bundled skills directory not found: ${bundledSkillsDir}`);
|
|
125
127
|
}
|
|
128
|
+
if (!fs.existsSync(bundledBaselineDir)) {
|
|
129
|
+
throw new Error(`Bundled baseline directory not found: ${bundledBaselineDir}`);
|
|
130
|
+
}
|
|
126
131
|
if (!fs.existsSync(baselineAgentsPath) || !fs.existsSync(baselineClaudePath)) {
|
|
127
132
|
throw new Error("Baseline AGENTS.md / CLAUDE.md templates not found");
|
|
128
133
|
}
|
|
129
134
|
}
|
|
130
135
|
|
|
136
|
+
function sharedBaselineInstallPath(dest) {
|
|
137
|
+
return path.join(dest, installedBaselineSkillName, "baseline");
|
|
138
|
+
}
|
|
139
|
+
|
|
131
140
|
function listBundledSkills() {
|
|
132
141
|
ensureBundledSkills();
|
|
133
142
|
return fs.readdirSync(bundledSkillsDir, { withFileTypes: true })
|
|
@@ -167,6 +176,8 @@ function installSkills({ dest, force, dryRun }) {
|
|
|
167
176
|
const skills = listBundledSkills();
|
|
168
177
|
const operations = [];
|
|
169
178
|
const skipped = [];
|
|
179
|
+
const baselineTargetPath = sharedBaselineInstallPath(dest);
|
|
180
|
+
const baselineExists = fs.existsSync(baselineTargetPath);
|
|
170
181
|
|
|
171
182
|
for (const skill of skills) {
|
|
172
183
|
const sourcePath = path.join(bundledSkillsDir, skill);
|
|
@@ -189,15 +200,24 @@ function installSkills({ dest, force, dryRun }) {
|
|
|
189
200
|
}
|
|
190
201
|
copyDirectoryRecursive(op.sourcePath, op.targetPath);
|
|
191
202
|
}
|
|
203
|
+
|
|
204
|
+
if (baselineExists && force) {
|
|
205
|
+
fs.rmSync(baselineTargetPath, { recursive: true, force: true });
|
|
206
|
+
}
|
|
207
|
+
if (!baselineExists || force) {
|
|
208
|
+
copyDirectoryRecursive(bundledBaselineDir, baselineTargetPath);
|
|
209
|
+
}
|
|
192
210
|
}
|
|
193
211
|
|
|
194
212
|
const lines = [
|
|
195
213
|
dryRun ? "ys-team install-skills dry-run" : "ys-team install-skills",
|
|
196
214
|
"",
|
|
197
215
|
`destination: ${dest}`,
|
|
216
|
+
`shared baseline: ${baselineTargetPath}`,
|
|
198
217
|
`bundled skills: ${skills.length}`,
|
|
199
218
|
`scheduled installs: ${operations.length}`,
|
|
200
|
-
`skipped existing: ${skipped.length}
|
|
219
|
+
`skipped existing: ${skipped.length}`,
|
|
220
|
+
`baseline action: ${baselineExists ? (force ? "replace" : "skip") : "create"}`
|
|
201
221
|
];
|
|
202
222
|
|
|
203
223
|
if (operations.length > 0) {
|
|
@@ -251,6 +271,7 @@ function initProject({ dir, force, dryRun }) {
|
|
|
251
271
|
"next:",
|
|
252
272
|
"- open the target repository",
|
|
253
273
|
"- run ys-team-init in that repository",
|
|
274
|
+
`- baseline assets are available at ${sharedBaselineInstallPath(skillsDest)}`,
|
|
254
275
|
"- verify AGENTS.md and CLAUDE.md match your project-local needs"
|
|
255
276
|
].join("\n");
|
|
256
277
|
}
|
package/skills/ys-team/SKILL.md
CHANGED
|
@@ -35,7 +35,7 @@ Its job is to keep the conversation anchored in:
|
|
|
35
35
|
|
|
36
36
|
不要把内部实现细节包装成用户必须理解的流程图。
|
|
37
37
|
|
|
38
|
-
默认工作流由 `examples/baseline
|
|
38
|
+
默认工作流由 bundled baseline 承载:仓库内为 `examples/baseline/`,npm 安装后为 `ys-team/baseline/`。
|
|
39
39
|
|
|
40
40
|
## Core Invariants
|
|
41
41
|
|
|
@@ -49,7 +49,7 @@ Its job is to keep the conversation anchored in:
|
|
|
49
49
|
- 如果用户想先理解方法论,直接解释 `ys-team`,不要急着让用户执行初始化。
|
|
50
50
|
- 如果仓库还没有 `.ys_team/`,引导到 `ys-team-init`。
|
|
51
51
|
- 如果仓库已有 `.ys_team/`,但团队、模板或约束已经不符合项目现实,引导到 `ys-team-rebuild`。
|
|
52
|
-
- 如果用户想先看默认工作流长什么样,引导到
|
|
52
|
+
- 如果用户想先看默认工作流长什么样,引导到 bundled baseline。
|
|
53
53
|
- 如果当前只是澄清理念、边界或推广方式,不强行写 spec。
|
|
54
54
|
|
|
55
55
|
## Trigger Default
|
|
@@ -14,7 +14,10 @@ Create the first project-local ys-team baseline with the lightest useful footpri
|
|
|
14
14
|
`ys-team-init` is not a project modeling ceremony.
|
|
15
15
|
It is a one-time repository specialization step.
|
|
16
16
|
|
|
17
|
-
Its default workflow source is
|
|
17
|
+
Its default workflow source is the bundled baseline.
|
|
18
|
+
|
|
19
|
+
- Repository source: `examples/baseline/`
|
|
20
|
+
- npm-installed source: `ys-team/baseline/` inside the installed skill directory set
|
|
18
21
|
|
|
19
22
|
## 语言检测
|
|
20
23
|
|
|
@@ -33,7 +36,7 @@ Init 的第一步是确认用户主语言,所有角色名、角色卡、team.m
|
|
|
33
36
|
## Core Rules
|
|
34
37
|
|
|
35
38
|
- Read repository reality before generating anything.
|
|
36
|
-
- Start from
|
|
39
|
+
- Start from the bundled baseline as the default workflow source.
|
|
37
40
|
- Prefer the smallest useful local baseline.
|
|
38
41
|
- Do not require the user to understand internal ys-team structure first.
|
|
39
42
|
- Do not block init only because some docs are missing; generate a minimal skeleton when needed.
|
|
@@ -43,7 +46,7 @@ Init 的第一步是确认用户主语言,所有角色名、角色卡、team.m
|
|
|
43
46
|
|
|
44
47
|
Generate or adapt:
|
|
45
48
|
|
|
46
|
-
- `TEAM.md`(从 `
|
|
49
|
+
- `TEAM.md`(从 bundled baseline 的 `TEAM.md` 适配,根据项目类型调整 roles 列表)
|
|
47
50
|
- `.ys_team/README.md`
|
|
48
51
|
- `.ys_team/team.md`
|
|
49
52
|
- `.ys_team/methods.md`
|
|
@@ -56,7 +59,16 @@ Generate or adapt:
|
|
|
56
59
|
|
|
57
60
|
When the repository lacks a current-state project doc, create a minimal `docs/project/overview.md` skeleton.
|
|
58
61
|
|
|
59
|
-
If the repository does not have an `AGENTS.md`, generate one from `
|
|
62
|
+
If the repository does not have an `AGENTS.md`, generate one from the bundled baseline `AGENTS.md`, adapted to the project's name and stack.
|
|
63
|
+
|
|
64
|
+
## Baseline Source Resolution
|
|
65
|
+
|
|
66
|
+
When `ys-team-init` runs, resolve baseline assets in this order:
|
|
67
|
+
|
|
68
|
+
1. `examples/baseline/` inside the current `ys-team` repository
|
|
69
|
+
2. `../ys-team/baseline/` relative to the installed skill directory
|
|
70
|
+
|
|
71
|
+
If neither exists, stop and report that the installed ys-team package is incomplete.
|
|
60
72
|
|
|
61
73
|
## Language Sensitivity
|
|
62
74
|
|
|
@@ -83,7 +95,7 @@ That means:
|
|
|
83
95
|
|
|
84
96
|
### 步骤
|
|
85
97
|
|
|
86
|
-
1. **创建 toolbox 目录**:从
|
|
98
|
+
1. **创建 toolbox 目录**:从 bundled baseline 的 `.ys_team/toolbox/` 复制模板(`_sources.md`、`_candidates.md`)
|
|
87
99
|
|
|
88
100
|
2. **扫描项目类型**:根据仓库中的文件特征判断项目类型:
|
|
89
101
|
- `requirements.txt` / `pyproject.toml` / `setup.py` → python-backend
|
|
@@ -143,9 +155,9 @@ internalized: [日期]
|
|
|
143
155
|
|
|
144
156
|
## TEAM.md 生成
|
|
145
157
|
|
|
146
|
-
Init 时从 `
|
|
158
|
+
Init 时从 bundled baseline 的 `TEAM.md` 生成项目的 `TEAM.md`:
|
|
147
159
|
|
|
148
|
-
1. 复制 baseline TEAM.md 到项目根目录
|
|
160
|
+
1. 复制 bundled baseline TEAM.md 到项目根目录
|
|
149
161
|
2. 根据项目类型调整 roles 列表(如纯前端项目去掉 domain-integrator,加 frontend-accessibility-reviewer)
|
|
150
162
|
3. 默认 mode 为 manual
|
|
151
163
|
4. 提示用户可按需调整配置
|
|
@@ -154,14 +166,14 @@ Init 时从 `examples/baseline/TEAM.md` 生成项目的 `TEAM.md`:
|
|
|
154
166
|
|
|
155
167
|
Init 时初始化记忆目录:
|
|
156
168
|
|
|
157
|
-
1. 从
|
|
169
|
+
1. 从 bundled baseline 的 `.ys_team/memory/policy.md` 复制记忆策略
|
|
158
170
|
2. 创建 `.ys_team/memory/roles/` 目录
|
|
159
171
|
3. 根据 TEAM.md 的 roles 列表,为每个角色创建空记忆文件(`<role>.md`)
|
|
160
172
|
4. 提示用户记忆系统已就绪
|
|
161
173
|
|
|
162
174
|
## Status 初始化
|
|
163
175
|
|
|
164
|
-
Init 时从
|
|
176
|
+
Init 时从 bundled baseline 的 `.ys_team/status.md` 复制空模板到项目的 `.ys_team/status.md`。
|
|
165
177
|
|
|
166
178
|
提示用户可选配置 hooks 以增强状态追踪:
|
|
167
179
|
|
|
@@ -175,7 +187,7 @@ Init 时从 `examples/baseline/.ys_team/status.md` 复制空模板到项目的 `
|
|
|
175
187
|
## After Init
|
|
176
188
|
|
|
177
189
|
- Use the generated local `.ys_team/` as the project's baseline.
|
|
178
|
-
- Treat
|
|
190
|
+
- Treat the bundled baseline as the default workflow source, not as a rigid project copy.
|
|
179
191
|
- Do not rerun init for normal project work.
|
|
180
192
|
- Use `ys-team-rebuild` only when project reality has materially changed.
|
|
181
193
|
|
|
@@ -31,7 +31,9 @@ Refresh the local ys-team baseline without reintroducing heavy process or unnece
|
|
|
31
31
|
Before rebuilding, check version alignment:
|
|
32
32
|
|
|
33
33
|
1. Read project `.ys_team/VERSION` (if exists)
|
|
34
|
-
2. Compare with
|
|
34
|
+
2. Compare with the bundled baseline `.ys_team/VERSION`
|
|
35
|
+
- 仓库内来源:`examples/baseline/.ys_team/VERSION`
|
|
36
|
+
- npm 安装来源:`ys-team/baseline/.ys_team/VERSION`
|
|
35
37
|
3. If versions differ, inform user: "ys-team baseline 有更新(当前 X.Y.Z → 最新 A.B.C)。是否同步?"
|
|
36
38
|
4. On user confirmation: merge baseline updates into project `.ys_team/`, preserving project-local customizations
|
|
37
39
|
5. Update project `.ys_team/VERSION` to match baseline
|