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 CHANGED
@@ -26,89 +26,72 @@
26
26
  - 多角色讨论用于覆盖风险并形成收敛结论。
27
27
  - 交付结果必须可验证、可追溯。
28
28
 
29
- ## 当前推荐使用方式
29
+ ## 安装与使用
30
30
 
31
- 当前版本建议只记两步:
31
+ ### 第一次使用
32
32
 
33
- 1. 获取本仓 `skills/` 下的技能目录,并安装到你的本地 skills 目录。
34
- 2. 说 “帮我安装/更新 https://github.com/dwp7399/ys-team 这里的 skills,然后用里面的 init,初始化我的项目。然后更新 agents.md 和 claude.md,使用 ys-team 作为最优先使用工作流”
33
+ **第一步:安装 skills**
35
34
 
36
- 对 Python / Java 项目,当前起步动作保持一致:
37
-
38
- - Python 项目:先安装 skills,再用 `ys-team-init` 生成项目本地 `.ys_team/`、`docs/specs/` 和现实索引
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
- 如果没有这些标志,说明当前回复还没真正进入 `ys-team` 工作流,可以直接要求:
39
+ > 默认目标为 `~/.agents/skills`,Claude Code 用户需指定 `~/.claude/skills`。
40
+ > 安装时会同时把 bundled baseline 写入 `ys-team/baseline/`,供 `ys-team-init` / `ys-team-rebuild` 读取模板。
52
41
 
53
- `请先进入 ys-team 工作流,并给出当前阶段标志。`
42
+ **第二步:在项目里初始化**
54
43
 
55
- ## npm 分发现状
44
+ 打开目标项目,对 Claude 说:
56
45
 
57
- 当前仓库已经有 npm 包元数据,并提供两种 npm 安装模式,但还不是完整的一键初始化器。
46
+ ```
47
+ 用 ys-team-init 这个 skill 初始化这个项目
48
+ ```
58
49
 
59
- 当前 npm 面提供的是:
50
+ ### 更新 skills
60
51
 
61
- - 发布 `skills/`、`examples/baseline/`、`registry/`、文档和脚本
62
- - 一个最小 CLI 入口:`npx ys-team --help`
63
- - 全局安装:把包内 skills 安装到 `~/.agents/skills`
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
- 当前 npm 面还**没有**:
56
+ # 更新到最新版
57
+ npx ys-team@latest install-skills --dest ~/.claude/skills --force
58
+ ```
68
59
 
69
- - 自动执行 `ys-team-init`
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
- ```bash
87
- npx ys-team init-project --dir /path/to/project
88
- ```
89
-
90
- 项目级安装会:
70
+ ## 工作流可见标志
91
71
 
92
- - 写入 `/path/to/project/.agents/skills`
93
- - 写入 `/path/to/project/AGENTS.md`
94
- - 写入 `/path/to/project/CLAUDE.md`
72
+ 只要当前回复处于 `ys-team` 工作流中,末尾必须出现明显标志:
95
73
 
96
- 两种模式后续都仍需在目标仓库里执行 `ys-team-init`。
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
- ## npm 发布状态
80
+ 如果没有这些标志,说明当前回复还没真正进入 `ys-team` 工作流,可以直接要求:
99
81
 
100
- 当前仓库已经具备**可发布到 npm registry** 的包形态,包括:
82
+ `请先进入 ys-team 工作流,并给出当前阶段标志。`
101
83
 
102
- - CLI 入口
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
- - npm 账号
109
- - `npm login`
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-07
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/` 用来“用 ys-team 管理 ys-team”,把方法仓的 spec、文档同步和交付约束落到仓库内部。它在 baseline 之上保留方法仓特有角色,如方法论架构、初始化接入和交付守门。
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
- - 入口:`.ys_team/team.md`, `.ys_team/methods.md`, `.ys_team/policy.md`, `.ys_team/templates/*`
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 当前的 npm 分发与安装能力:全局模式通过 `install-skills` 安装到 `~/.agents/skills`,项目模式通过 `init-project` 安装到项目内 `.agents/skills` 并下发 baseline 版 `AGENTS.md` / `CLAUDE.md`。同时它们承担 npm 可发布形态的元数据配置。
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 文案到修改前版本,并保留本次核验记录
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ys-team",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "AI 团队治理方法论:以共享现实索引为对齐基础、以 Spec 为执行与验收统一依据的轻量治理框架",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -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
  }
@@ -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
- - 如果用户想先看默认工作流长什么样,引导到 `examples/baseline/`。
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 `examples/baseline/`.
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 `examples/baseline/` as the default workflow source.
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`(从 `examples/baseline/TEAM.md` 适配,根据项目类型调整 roles 列表)
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 `examples/baseline/AGENTS.md`, adapted to the project's name and stack.
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 目录**:从 `examples/baseline/.ys_team/toolbox/` 复制模板(`_sources.md`、`_candidates.md`)
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 时从 `examples/baseline/TEAM.md` 生成项目的 `TEAM.md`:
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. 从 `examples/baseline/.ys_team/memory/policy.md` 复制记忆策略
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 时从 `examples/baseline/.ys_team/status.md` 复制空模板到项目的 `.ys_team/status.md`。
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 `examples/baseline/` as the default workflow source, not as a rigid project copy.
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 `examples/baseline/.ys_team/VERSION` from the installed ys-team skill
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