@zmice/zc 0.2.6 → 0.2.8

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.
Files changed (75) hide show
  1. package/README.md +430 -420
  2. package/dist/cli/__tests__/platform.test.js +158 -89
  3. package/dist/cli/__tests__/platform.test.js.map +1 -1
  4. package/dist/cli/__tests__/surface.test.js +1 -1
  5. package/dist/cli/__tests__/surface.test.js.map +1 -1
  6. package/dist/cli/platform.d.ts.map +1 -1
  7. package/dist/cli/platform.js +92 -10
  8. package/dist/cli/platform.js.map +1 -1
  9. package/dist/cli/setup.d.ts +3 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +41 -0
  12. package/dist/cli/setup.js.map +1 -0
  13. package/dist/node_modules/@zmice/platform-core/dist/index.test.js +5 -3
  14. package/dist/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  15. package/dist/runtime/worktree-manager.js +2 -2
  16. package/dist/runtime/worktree-manager.js.map +1 -1
  17. package/dist/utils/codex-config-merge.d.ts +3 -0
  18. package/dist/utils/codex-config-merge.d.ts.map +1 -0
  19. package/dist/utils/codex-config-merge.js +43 -0
  20. package/dist/utils/codex-config-merge.js.map +1 -0
  21. package/dist/utils/codex-config-merge.test.d.ts +2 -0
  22. package/dist/utils/codex-config-merge.test.d.ts.map +1 -0
  23. package/dist/utils/codex-config-merge.test.js +64 -0
  24. package/dist/utils/codex-config-merge.test.js.map +1 -0
  25. package/dist/utils/install-target.test.js +3 -2
  26. package/dist/utils/install-target.test.js.map +1 -1
  27. package/dist/utils/qwen-extension-cli.d.ts.map +1 -1
  28. package/dist/utils/qwen-extension-cli.js +4 -4
  29. package/dist/utils/qwen-extension-cli.js.map +1 -1
  30. package/dist/utils/qwen-extension-cli.test.js +9 -6
  31. package/dist/utils/qwen-extension-cli.test.js.map +1 -1
  32. package/dist/utils/workspace.js +1 -1
  33. package/dist/utils/workspace.js.map +1 -1
  34. package/dist/utils/workspace.test.js +14 -0
  35. package/dist/utils/workspace.test.js.map +1 -1
  36. package/package.json +3 -3
  37. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js +5 -3
  38. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  39. package/vendor/packages/platform-claude/dist/index.js +75 -75
  40. package/vendor/packages/platform-claude/dist/index.test.js +11 -8
  41. package/vendor/packages/platform-claude/dist/index.test.js.map +1 -1
  42. package/vendor/packages/platform-codex/dist/index.d.ts.map +1 -1
  43. package/vendor/packages/platform-codex/dist/index.js +262 -165
  44. package/vendor/packages/platform-codex/dist/index.js.map +1 -1
  45. package/vendor/packages/platform-codex/dist/index.test.js +42 -20
  46. package/vendor/packages/platform-codex/dist/index.test.js.map +1 -1
  47. package/vendor/packages/platform-opencode/dist/index.js +75 -75
  48. package/vendor/packages/platform-opencode/dist/index.test.js +19 -15
  49. package/vendor/packages/platform-opencode/dist/index.test.js.map +1 -1
  50. package/vendor/packages/platform-qwen/dist/index.js +75 -75
  51. package/vendor/packages/platform-qwen/dist/index.test.js +9 -7
  52. package/vendor/packages/platform-qwen/dist/index.test.js.map +1 -1
  53. package/vendor/packages/toolkit/src/content/agents/architect/body.md +42 -42
  54. package/vendor/packages/toolkit/src/content/agents/code-reviewer/body.md +41 -41
  55. package/vendor/packages/toolkit/src/content/agents/product-owner/body.md +40 -40
  56. package/vendor/packages/toolkit/src/content/commands/plan-review/body.md +31 -31
  57. package/vendor/packages/toolkit/src/content/commands/start/body.md +197 -197
  58. package/vendor/packages/toolkit/src/content/commands/start/meta.yaml +55 -55
  59. package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/body.md +172 -172
  60. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/body.md +111 -111
  61. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/body.md +86 -86
  62. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/body.md +140 -140
  63. package/vendor/packages/toolkit/src/content/skills/code-simplification/body.md +80 -80
  64. package/vendor/packages/toolkit/src/content/skills/context-engineering/body.md +67 -67
  65. package/vendor/packages/toolkit/src/content/skills/continuous-learning/body.md +102 -102
  66. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/body.md +81 -81
  67. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/body.md +113 -113
  68. package/vendor/packages/toolkit/src/content/skills/performance-optimization/body.md +75 -75
  69. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/body.md +83 -83
  70. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/body.md +95 -95
  71. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/body.md +99 -99
  72. package/vendor/packages/toolkit/src/content/skills/team-orchestration/body.md +126 -126
  73. package/vendor/packages/toolkit/src/content/skills/test-driven-development/body.md +78 -78
  74. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/body.md +193 -193
  75. package/vendor/references/upstreams.yaml +94 -94
@@ -1,172 +1,172 @@
1
- # 分支收尾与清理
2
-
3
- ## 概述
4
-
5
- 任务“做完”不等于 branch 可以安全结束。只有当变更已经验证、去向已确定、残留工作区已清理,branch / worktree 才算真正收尾。
6
-
7
- 这个技能只处理收尾判定与清理:
8
-
9
- - 这个 branch 现在应该 merge、开 PR、继续保留,还是直接丢弃
10
- - 关联 worktree 是否还需要保留
11
- - 失败实验、半成品和临时分支如何安全退出
12
-
13
- 它不替代实现、审查或发布流程;它只负责把这些流程的结果变成一个干净、可追踪、可回滚的结束状态。
14
-
15
- ## 何时使用
16
-
17
- 在以下时点进入本技能:
18
-
19
- - 一个功能或修复已经完成实现,准备结束开发分支
20
- - 一个 worktree 中的实验已经得出结论,需要保留或放弃
21
- - 多 agent 并行执行结束,准备 fan-in 之后清理各自分支
22
- - PR 已合并、被拒绝,或决定不继续推进,需要处置残留 branch / worktree
23
-
24
- ## 收尾决策树
25
-
26
- ```
27
- 任务结果明确了吗? ─── 否 ──→ 不收尾,先补齐验证或结论
28
-
29
-
30
-
31
- 变更应该进入主线吗? ─── 否 ──→ 丢弃或归档实验分支
32
-
33
-
34
-
35
- 当前团队通过 PR 合入吗? ─── 是 ──→ 推送 + 开/更新 PR + 等待合入
36
-
37
-
38
-
39
- 直接 merge 到目标分支 → 验证目标分支状态 → 删除已完成分支
40
- ```
41
-
42
- 关键点:
43
-
44
- - 先判定“是否保留”,再判定“如何合入”
45
- - 未经验证的 branch 不能因为“差不多完成了”就进入收尾
46
- - 未合入主线的实验分支,只有明确保留价值时才继续存在
47
-
48
- ## 收尾前门禁
49
-
50
- 收尾前必须确认:
51
-
52
- - 任务范围已经冻结,没有继续顺手改的内容
53
- - 当前 branch 的测试、lint、构建或本任务要求的验证已完成
54
- - 审查结论已明确:可合入、待修复或放弃
55
- - branch 的目标去向已明确:merge、PR、保留、归档或删除
56
- - 没有未解释的脏文件、临时脚本或生成物
57
-
58
- 如果上述任一项不明确,就不要进入 cleanup 动作。
59
-
60
- ## 四种结束状态
61
-
62
- ### 1. 合入主线
63
-
64
- 适用于:功能完成、验证通过、审查通过,且应该进入目标分支。
65
-
66
- 动作:
67
-
68
- 1. 确认 branch 相对目标分支的差异是预期范围
69
- 2. 使用团队约定的方式 merge 或 rebase 后合入
70
- 3. 在目标分支重新运行必要验证
71
- 4. 删除已完成 branch
72
- 5. 若 branch 绑定 worktree,清理对应 worktree
73
-
74
- ### 2. 提交 PR 等待合入
75
-
76
- 适用于:变更已准备好,但团队要求经由 PR 流程进入主线。
77
-
78
- 动作:
79
-
80
- 1. 推送 branch 并创建或更新 PR
81
- 2. 在 PR 描述中写明范围、验证证据和风险点
82
- 3. branch 保持最小存活时间,只为等待审查和合入而存在
83
- 4. PR 合并后删除 branch,并清理关联 worktree
84
-
85
- ### 3. 暂时保留
86
-
87
- 适用于:实验有价值,但当前不合入;或后续还会基于该分支继续工作。
88
-
89
- 动作:
90
-
91
- 1. 记录为什么保留、保留多久、谁负责
92
- 2. 标明当前状态是 `paused`、`blocked` 或 `needs-follow-up`
93
- 3. 清理无关临时文件,避免下次恢复时状态不明
94
- 4. 定期复核,过期未恢复的分支要么合入,要么删除
95
-
96
- 保留不是默认值。没有明确后续计划的 branch,不应长期悬挂。
97
-
98
- ### 4. 丢弃或清理失败实验
99
-
100
- 适用于:方案被否定、实现失败、或成本明显高于价值。
101
-
102
- 动作:
103
-
104
- 1. 先保留需要沉淀的结论、数据或复盘记录
105
- 2. 确认 branch 上没有还要转移的变更
106
- 3. 删除分支或直接移除 worktree
107
- 4. 清除临时文件、缓存和不再需要的脚本
108
-
109
- 不要把“也许以后有用”的实验分支长期留着替代文档。
110
-
111
- ## Worktree 收尾协议
112
-
113
- 如果 branch 通过 worktree 运行,收尾时把 branch 和 worktree 视为一个整体:
114
-
115
- - branch 已合入或放弃后,worktree 也应同步清理
116
- - 仅当该 worktree 仍承担后续明确任务时才保留
117
- - 清理前先确认没有未提交变更或未转移的调试资料
118
- - 移除 worktree 后,确保主仓库或其他工作区不再引用该路径
119
-
120
- worktree 是隔离手段,不是长期存档机制。
121
-
122
- ## 多分支 / 多 Agent 场景
123
-
124
- 并行执行结束后,不要只做“合并成功”检查,还要逐个确认各分支的收尾状态:
125
-
126
- - 哪些分支已经合入,可以删除
127
- - 哪些分支因失败或冲突需要重做,应清理现场后重新开始
128
- - 哪些分支暂时保留,原因和负责人是什么
129
- - 哪些 worktree 已经没有活跃任务,应立即移除
130
-
131
- 如果一个并行批次完成后还残留大量无主分支,说明收尾协议没有真正执行。
132
-
133
- 使用 `zc team` 时,先运行 dry-run:
134
-
135
- ```bash
136
- zc team shutdown <team-name> --plan
137
- ```
138
-
139
- 它只读取 fan-in 状态,不关闭 tmux、不删除 worktree。重点看每个 worker worktree:
140
-
141
- - `clean`:没有未提交变更,可以继续判断是否合入或删除
142
- - `dirty`:仍有未提交变更,必须先转移、提交或明确丢弃
143
- - `ahead`:分支领先目标引用,需要判断是否合入或开 PR
144
- - `merged`:已合入的分支可以进入删除流程
145
- - `unknown`:状态无法判断,必须人工检查后再清理
146
-
147
- 只有每个 worktree 的去向明确后,才运行不带 `--plan` 的 `zc team shutdown <team-name>`。
148
-
149
- ## 最小收尾清单
150
-
151
- - [ ] branch 的最终去向已明确
152
- - [ ] 必要验证已完成,证据可追溯
153
- - [ ] 需要保留的信息已转移到 PR、任务系统或文档
154
- - [ ] `zc team shutdown <team-name> --plan` 没有暴露未解释的 `dirty` / `unknown`
155
- - [ ] 不再需要的 branch 已删除
156
- - [ ] 不再需要的 worktree 已移除
157
- - [ ] 没有遗留未解释的脏文件或临时产物
158
-
159
- ## 与其他技能的衔接
160
-
161
- - **git-workflow-and-versioning** — 定义提交、分支和 worktree 的日常纪律;本技能负责这些对象的结束状态
162
- - **parallel-agent-dispatch** — 并行批次 fan-in 后,逐个分支进入收尾判定
163
- - **team-orchestration** — 团队停机前,先明确每个 worker 的 branch / worktree 去向
164
- - **verification-before-completion** — 收尾前的验证证据必须真实存在,不能凭感觉删除或合入分支
165
-
166
- ## Red Flags
167
-
168
- - 任务未验证完成就急着删分支
169
- - PR 已合并但 branch / worktree 长期残留
170
- - 失败实验既不记录结论,也不清理现场
171
- - 用“先留着吧”替代明确的保留期限和责任人
172
- - 多 agent fan-in 后只关心代码合并,不处理分支残留
1
+ # 分支收尾与清理
2
+
3
+ ## 概述
4
+
5
+ 任务“做完”不等于 branch 可以安全结束。只有当变更已经验证、去向已确定、残留工作区已清理,branch / worktree 才算真正收尾。
6
+
7
+ 这个技能只处理收尾判定与清理:
8
+
9
+ - 这个 branch 现在应该 merge、开 PR、继续保留,还是直接丢弃
10
+ - 关联 worktree 是否还需要保留
11
+ - 失败实验、半成品和临时分支如何安全退出
12
+
13
+ 它不替代实现、审查或发布流程;它只负责把这些流程的结果变成一个干净、可追踪、可回滚的结束状态。
14
+
15
+ ## 何时使用
16
+
17
+ 在以下时点进入本技能:
18
+
19
+ - 一个功能或修复已经完成实现,准备结束开发分支
20
+ - 一个 worktree 中的实验已经得出结论,需要保留或放弃
21
+ - 多 agent 并行执行结束,准备 fan-in 之后清理各自分支
22
+ - PR 已合并、被拒绝,或决定不继续推进,需要处置残留 branch / worktree
23
+
24
+ ## 收尾决策树
25
+
26
+ ```
27
+ 任务结果明确了吗? ─── 否 ──→ 不收尾,先补齐验证或结论
28
+
29
+
30
+
31
+ 变更应该进入主线吗? ─── 否 ──→ 丢弃或归档实验分支
32
+
33
+
34
+
35
+ 当前团队通过 PR 合入吗? ─── 是 ──→ 推送 + 开/更新 PR + 等待合入
36
+
37
+
38
+
39
+ 直接 merge 到目标分支 → 验证目标分支状态 → 删除已完成分支
40
+ ```
41
+
42
+ 关键点:
43
+
44
+ - 先判定“是否保留”,再判定“如何合入”
45
+ - 未经验证的 branch 不能因为“差不多完成了”就进入收尾
46
+ - 未合入主线的实验分支,只有明确保留价值时才继续存在
47
+
48
+ ## 收尾前门禁
49
+
50
+ 收尾前必须确认:
51
+
52
+ - 任务范围已经冻结,没有继续顺手改的内容
53
+ - 当前 branch 的测试、lint、构建或本任务要求的验证已完成
54
+ - 审查结论已明确:可合入、待修复或放弃
55
+ - branch 的目标去向已明确:merge、PR、保留、归档或删除
56
+ - 没有未解释的脏文件、临时脚本或生成物
57
+
58
+ 如果上述任一项不明确,就不要进入 cleanup 动作。
59
+
60
+ ## 四种结束状态
61
+
62
+ ### 1. 合入主线
63
+
64
+ 适用于:功能完成、验证通过、审查通过,且应该进入目标分支。
65
+
66
+ 动作:
67
+
68
+ 1. 确认 branch 相对目标分支的差异是预期范围
69
+ 2. 使用团队约定的方式 merge 或 rebase 后合入
70
+ 3. 在目标分支重新运行必要验证
71
+ 4. 删除已完成 branch
72
+ 5. 若 branch 绑定 worktree,清理对应 worktree
73
+
74
+ ### 2. 提交 PR 等待合入
75
+
76
+ 适用于:变更已准备好,但团队要求经由 PR 流程进入主线。
77
+
78
+ 动作:
79
+
80
+ 1. 推送 branch 并创建或更新 PR
81
+ 2. 在 PR 描述中写明范围、验证证据和风险点
82
+ 3. branch 保持最小存活时间,只为等待审查和合入而存在
83
+ 4. PR 合并后删除 branch,并清理关联 worktree
84
+
85
+ ### 3. 暂时保留
86
+
87
+ 适用于:实验有价值,但当前不合入;或后续还会基于该分支继续工作。
88
+
89
+ 动作:
90
+
91
+ 1. 记录为什么保留、保留多久、谁负责
92
+ 2. 标明当前状态是 `paused`、`blocked` 或 `needs-follow-up`
93
+ 3. 清理无关临时文件,避免下次恢复时状态不明
94
+ 4. 定期复核,过期未恢复的分支要么合入,要么删除
95
+
96
+ 保留不是默认值。没有明确后续计划的 branch,不应长期悬挂。
97
+
98
+ ### 4. 丢弃或清理失败实验
99
+
100
+ 适用于:方案被否定、实现失败、或成本明显高于价值。
101
+
102
+ 动作:
103
+
104
+ 1. 先保留需要沉淀的结论、数据或复盘记录
105
+ 2. 确认 branch 上没有还要转移的变更
106
+ 3. 删除分支或直接移除 worktree
107
+ 4. 清除临时文件、缓存和不再需要的脚本
108
+
109
+ 不要把“也许以后有用”的实验分支长期留着替代文档。
110
+
111
+ ## Worktree 收尾协议
112
+
113
+ 如果 branch 通过 worktree 运行,收尾时把 branch 和 worktree 视为一个整体:
114
+
115
+ - branch 已合入或放弃后,worktree 也应同步清理
116
+ - 仅当该 worktree 仍承担后续明确任务时才保留
117
+ - 清理前先确认没有未提交变更或未转移的调试资料
118
+ - 移除 worktree 后,确保主仓库或其他工作区不再引用该路径
119
+
120
+ worktree 是隔离手段,不是长期存档机制。
121
+
122
+ ## 多分支 / 多 Agent 场景
123
+
124
+ 并行执行结束后,不要只做“合并成功”检查,还要逐个确认各分支的收尾状态:
125
+
126
+ - 哪些分支已经合入,可以删除
127
+ - 哪些分支因失败或冲突需要重做,应清理现场后重新开始
128
+ - 哪些分支暂时保留,原因和负责人是什么
129
+ - 哪些 worktree 已经没有活跃任务,应立即移除
130
+
131
+ 如果一个并行批次完成后还残留大量无主分支,说明收尾协议没有真正执行。
132
+
133
+ 使用 `zc team` 时,先运行 dry-run:
134
+
135
+ ```bash
136
+ zc team shutdown <team-name> --plan
137
+ ```
138
+
139
+ 它只读取 fan-in 状态,不关闭 tmux、不删除 worktree。重点看每个 worker worktree:
140
+
141
+ - `clean`:没有未提交变更,可以继续判断是否合入或删除
142
+ - `dirty`:仍有未提交变更,必须先转移、提交或明确丢弃
143
+ - `ahead`:分支领先目标引用,需要判断是否合入或开 PR
144
+ - `merged`:已合入的分支可以进入删除流程
145
+ - `unknown`:状态无法判断,必须人工检查后再清理
146
+
147
+ 只有每个 worktree 的去向明确后,才运行不带 `--plan` 的 `zc team shutdown <team-name>`。
148
+
149
+ ## 最小收尾清单
150
+
151
+ - [ ] branch 的最终去向已明确
152
+ - [ ] 必要验证已完成,证据可追溯
153
+ - [ ] 需要保留的信息已转移到 PR、任务系统或文档
154
+ - [ ] `zc team shutdown <team-name> --plan` 没有暴露未解释的 `dirty` / `unknown`
155
+ - [ ] 不再需要的 branch 已删除
156
+ - [ ] 不再需要的 worktree 已移除
157
+ - [ ] 没有遗留未解释的脏文件或临时产物
158
+
159
+ ## 与其他技能的衔接
160
+
161
+ - **git-workflow-and-versioning** — 定义提交、分支和 worktree 的日常纪律;本技能负责这些对象的结束状态
162
+ - **parallel-agent-dispatch** — 并行批次 fan-in 后,逐个分支进入收尾判定
163
+ - **team-orchestration** — 团队停机前,先明确每个 worker 的 branch / worktree 去向
164
+ - **verification-before-completion** — 收尾前的验证证据必须真实存在,不能凭感觉删除或合入分支
165
+
166
+ ## Red Flags
167
+
168
+ - 任务未验证完成就急着删分支
169
+ - PR 已合并但 branch / worktree 长期残留
170
+ - 失败实验既不记录结论,也不清理现场
171
+ - 用“先留着吧”替代明确的保留期限和责任人
172
+ - 多 agent fan-in 后只关心代码合并,不处理分支残留
@@ -1,111 +1,111 @@
1
- # Browser QA Testing
2
-
3
- ## 角色定位
4
-
5
- 用真实浏览器验证用户是否真的能完成关键路径。单元测试和 API 测试不能证明页面可用、交互可达、网络错误可见或视觉没有严重错位;浏览器 QA 用运行中的应用和可复查证据补上这层门禁。
6
-
7
- 本文只给执行骨架。项目已有 Playwright/Cypress/Puppeteer 时优先沿用;没有既有选择时默认 Playwright。
8
-
9
- ## 何时使用
10
-
11
- - 前端页面、组件、导航、表单或状态流改动后。
12
- - 后端 API 改动会影响前端体验时。
13
- - 发布前需要最终用户路径证据时。
14
- - bug 报告来自浏览器行为、视觉错位或交互失败时。
15
- - 单元/API 测试通过,但仍需要确认真实页面没有空白、控制台错误或不可操作状态时。
16
-
17
- 不适用:纯后端逻辑、纯文档、无需浏览器渲染的配置改动。
18
-
19
- ## 快速路径
20
-
21
- 1. 明确 1-3 条失败就不能放行的关键路径。
22
- 2. 启动应用或确认目标 URL 可访问。
23
- 3. 准备稳定测试数据,避免依赖生产数据。
24
- 4. 驱动真实浏览器执行关键路径。
25
- 5. 同时检查 DOM 可见结果、控制台错误、网络失败和基本响应式。
26
- 6. 失败时保留截图、trace、控制台或网络证据。
27
- 7. 修复后重跑原始失败路径,证明不再复发。
28
-
29
- ## 工具选择
30
-
31
- | 工具 | 默认判断 |
32
- |---|---|
33
- | Playwright | 默认推荐,适合跨浏览器、trace、截图、自动等待和 CI |
34
- | Cypress | 项目已经使用 Cypress 时沿用 |
35
- | Puppeteer | 只在需要 Chrome DevTools Protocol 细节时使用 |
36
- | Browser plugin / in-app browser | 适合快速人工式走查和本地交互验证 |
37
-
38
- 不要为了浏览器 QA 引入第二套 E2E 框架,除非现有工具无法覆盖目标。
39
-
40
- ## 关键路径选择
41
-
42
- 优先级:
43
-
44
- - P0:应用能打开,核心页面不是空白。
45
- - P1:主要业务动作能完成,并看到可验证结果。
46
- - P2:错误路径有明确反馈,不是静默失败。
47
- - P3:关键移动端/桌面布局没有阻塞性重叠。
48
-
49
- bug 修复场景必须先覆盖:
50
-
51
- - 原始失败如何复现。
52
- - 修复后如何证明失败不再发生。
53
-
54
- ## 验收记录格式
55
-
56
- 浏览器 QA 的结果必须能被复查:
57
-
58
- ```text
59
- Browser QA transcript:
60
- - Target:
61
- - Build/server:
62
- - Paths tested:
63
- - Data setup:
64
- - Evidence:
65
- - Console/network:
66
- - Screenshots/traces:
67
- - Result:
68
- - Follow-up:
69
- ```
70
-
71
- 没有证据的“我点过了”不算完成。
72
-
73
- ## 最小检查清单
74
-
75
- - 页面加载成功,没有白屏或阻塞性错误。
76
- - 关键按钮、输入框、菜单、弹窗可访问。
77
- - 主流程成功结果可见。
78
- - 失败路径有用户可理解的错误反馈。
79
- - 控制台没有与本次改动相关的新错误。
80
- - 网络请求状态和错误处理符合预期。
81
- - 关键视口下文本和控件不重叠。
82
-
83
- ## 与自动化测试的关系
84
-
85
- - 已有稳定 E2E:优先运行并补充必要断言。
86
- - 没有 E2E:先做最小浏览器走查,再决定是否把路径沉淀为 Playwright 测试。
87
- - 一次性验证:可以只保留 transcript 和截图。
88
- - 高风险回归:应补自动化测试,避免下次靠人工记忆。
89
-
90
- ## 常见失败处理
91
-
92
- - 白屏:先看控制台、构建输出和入口资源 404。
93
- - 点击无效:检查元素是否被遮挡、disabled、事件未绑定或异步状态未完成。
94
- - 表单失败:检查校验、提交 payload、接口响应和错误反馈。
95
- - 布局错位:截 desktop/mobile 两个视口,定位固定宽度、溢出和层级遮挡。
96
- - 间歇失败:避免 `sleep`,使用明确的可见性、URL、网络或状态等待条件。
97
-
98
- ## 边界
99
-
100
- - 不把浏览器 QA 当成完整可访问性审计;需要深挖时转专项工具。
101
- - 不把视觉主观偏好当成阻塞问题,除非它影响可用性或验收标准。
102
- - 不连接生产数据做破坏性动作。
103
- - 不在没有目标路径的情况下机械铺满长尾场景。
104
-
105
- ## 推荐输出
106
-
107
- ```text
108
- Recommendation: <放行 / 修复后重测 / 补自动化测试> because <浏览器证据、失败影响和替代方案 trade-off>。
109
- ```
110
-
111
- 推荐必须说明证据来自哪条路径,以及未覆盖风险是什么。
1
+ # Browser QA Testing
2
+
3
+ ## 角色定位
4
+
5
+ 用真实浏览器验证用户是否真的能完成关键路径。单元测试和 API 测试不能证明页面可用、交互可达、网络错误可见或视觉没有严重错位;浏览器 QA 用运行中的应用和可复查证据补上这层门禁。
6
+
7
+ 本文只给执行骨架。项目已有 Playwright/Cypress/Puppeteer 时优先沿用;没有既有选择时默认 Playwright。
8
+
9
+ ## 何时使用
10
+
11
+ - 前端页面、组件、导航、表单或状态流改动后。
12
+ - 后端 API 改动会影响前端体验时。
13
+ - 发布前需要最终用户路径证据时。
14
+ - bug 报告来自浏览器行为、视觉错位或交互失败时。
15
+ - 单元/API 测试通过,但仍需要确认真实页面没有空白、控制台错误或不可操作状态时。
16
+
17
+ 不适用:纯后端逻辑、纯文档、无需浏览器渲染的配置改动。
18
+
19
+ ## 快速路径
20
+
21
+ 1. 明确 1-3 条失败就不能放行的关键路径。
22
+ 2. 启动应用或确认目标 URL 可访问。
23
+ 3. 准备稳定测试数据,避免依赖生产数据。
24
+ 4. 驱动真实浏览器执行关键路径。
25
+ 5. 同时检查 DOM 可见结果、控制台错误、网络失败和基本响应式。
26
+ 6. 失败时保留截图、trace、控制台或网络证据。
27
+ 7. 修复后重跑原始失败路径,证明不再复发。
28
+
29
+ ## 工具选择
30
+
31
+ | 工具 | 默认判断 |
32
+ |---|---|
33
+ | Playwright | 默认推荐,适合跨浏览器、trace、截图、自动等待和 CI |
34
+ | Cypress | 项目已经使用 Cypress 时沿用 |
35
+ | Puppeteer | 只在需要 Chrome DevTools Protocol 细节时使用 |
36
+ | Browser plugin / in-app browser | 适合快速人工式走查和本地交互验证 |
37
+
38
+ 不要为了浏览器 QA 引入第二套 E2E 框架,除非现有工具无法覆盖目标。
39
+
40
+ ## 关键路径选择
41
+
42
+ 优先级:
43
+
44
+ - P0:应用能打开,核心页面不是空白。
45
+ - P1:主要业务动作能完成,并看到可验证结果。
46
+ - P2:错误路径有明确反馈,不是静默失败。
47
+ - P3:关键移动端/桌面布局没有阻塞性重叠。
48
+
49
+ bug 修复场景必须先覆盖:
50
+
51
+ - 原始失败如何复现。
52
+ - 修复后如何证明失败不再发生。
53
+
54
+ ## 验收记录格式
55
+
56
+ 浏览器 QA 的结果必须能被复查:
57
+
58
+ ```text
59
+ Browser QA transcript:
60
+ - Target:
61
+ - Build/server:
62
+ - Paths tested:
63
+ - Data setup:
64
+ - Evidence:
65
+ - Console/network:
66
+ - Screenshots/traces:
67
+ - Result:
68
+ - Follow-up:
69
+ ```
70
+
71
+ 没有证据的“我点过了”不算完成。
72
+
73
+ ## 最小检查清单
74
+
75
+ - 页面加载成功,没有白屏或阻塞性错误。
76
+ - 关键按钮、输入框、菜单、弹窗可访问。
77
+ - 主流程成功结果可见。
78
+ - 失败路径有用户可理解的错误反馈。
79
+ - 控制台没有与本次改动相关的新错误。
80
+ - 网络请求状态和错误处理符合预期。
81
+ - 关键视口下文本和控件不重叠。
82
+
83
+ ## 与自动化测试的关系
84
+
85
+ - 已有稳定 E2E:优先运行并补充必要断言。
86
+ - 没有 E2E:先做最小浏览器走查,再决定是否把路径沉淀为 Playwright 测试。
87
+ - 一次性验证:可以只保留 transcript 和截图。
88
+ - 高风险回归:应补自动化测试,避免下次靠人工记忆。
89
+
90
+ ## 常见失败处理
91
+
92
+ - 白屏:先看控制台、构建输出和入口资源 404。
93
+ - 点击无效:检查元素是否被遮挡、disabled、事件未绑定或异步状态未完成。
94
+ - 表单失败:检查校验、提交 payload、接口响应和错误反馈。
95
+ - 布局错位:截 desktop/mobile 两个视口,定位固定宽度、溢出和层级遮挡。
96
+ - 间歇失败:避免 `sleep`,使用明确的可见性、URL、网络或状态等待条件。
97
+
98
+ ## 边界
99
+
100
+ - 不把浏览器 QA 当成完整可访问性审计;需要深挖时转专项工具。
101
+ - 不把视觉主观偏好当成阻塞问题,除非它影响可用性或验收标准。
102
+ - 不连接生产数据做破坏性动作。
103
+ - 不在没有目标路径的情况下机械铺满长尾场景。
104
+
105
+ ## 推荐输出
106
+
107
+ ```text
108
+ Recommendation: <放行 / 修复后重测 / 补自动化测试> because <浏览器证据、失败影响和替代方案 trade-off>。
109
+ ```
110
+
111
+ 推荐必须说明证据来自哪条路径,以及未覆盖风险是什么。