claude-coder 1.9.2 → 1.10.0

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 (81) hide show
  1. package/README.md +236 -214
  2. package/bin/cli.js +170 -155
  3. package/package.json +55 -55
  4. package/recipes/_shared/roles/developer.md +11 -11
  5. package/recipes/_shared/roles/product.md +12 -12
  6. package/recipes/_shared/roles/tester.md +12 -12
  7. package/recipes/_shared/test/report-format.md +86 -86
  8. package/recipes/backend/base.md +27 -27
  9. package/recipes/backend/components/auth.md +18 -18
  10. package/recipes/backend/components/crud-api.md +18 -18
  11. package/recipes/backend/components/file-service.md +15 -15
  12. package/recipes/backend/manifest.json +20 -20
  13. package/recipes/backend/test/api-test.md +25 -25
  14. package/recipes/console/base.md +37 -37
  15. package/recipes/console/components/modal-form.md +20 -20
  16. package/recipes/console/components/pagination.md +17 -17
  17. package/recipes/console/components/search.md +17 -17
  18. package/recipes/console/components/table-list.md +18 -18
  19. package/recipes/console/components/tabs.md +14 -14
  20. package/recipes/console/components/tree.md +15 -15
  21. package/recipes/console/components/upload.md +15 -15
  22. package/recipes/console/manifest.json +24 -24
  23. package/recipes/console/test/crud-e2e.md +47 -47
  24. package/recipes/h5/base.md +26 -26
  25. package/recipes/h5/components/animation.md +11 -11
  26. package/recipes/h5/components/countdown.md +11 -11
  27. package/recipes/h5/components/share.md +11 -11
  28. package/recipes/h5/components/swiper.md +11 -11
  29. package/recipes/h5/manifest.json +21 -21
  30. package/recipes/h5/test/h5-e2e.md +20 -20
  31. package/src/commands/auth.js +420 -420
  32. package/src/commands/setup-modules/helpers.js +100 -100
  33. package/src/commands/setup-modules/index.js +25 -25
  34. package/src/commands/setup-modules/mcp.js +115 -115
  35. package/src/commands/setup-modules/provider.js +260 -260
  36. package/src/commands/setup-modules/safety.js +47 -47
  37. package/src/commands/setup-modules/simplify.js +52 -52
  38. package/src/commands/setup.js +172 -172
  39. package/src/common/assets.js +259 -245
  40. package/src/common/config.js +147 -125
  41. package/src/common/constants.js +55 -55
  42. package/src/common/indicator.js +260 -260
  43. package/src/common/interaction.js +170 -170
  44. package/src/common/logging.js +77 -77
  45. package/src/common/sdk.js +48 -50
  46. package/src/common/tasks.js +88 -88
  47. package/src/common/utils.js +214 -213
  48. package/src/core/coding.js +35 -33
  49. package/src/core/design.js +268 -0
  50. package/src/core/go.js +264 -264
  51. package/src/core/hooks.js +514 -500
  52. package/src/core/init.js +175 -166
  53. package/src/core/plan.js +194 -188
  54. package/src/core/prompts.js +292 -247
  55. package/src/core/repair.js +36 -36
  56. package/src/core/runner.js +471 -471
  57. package/src/core/scan.js +94 -93
  58. package/src/core/session.js +294 -280
  59. package/src/core/simplify.js +76 -74
  60. package/src/core/state.js +120 -105
  61. package/src/index.js +80 -76
  62. package/templates/{codingSystem.md → coding/system.md} +65 -65
  63. package/templates/{codingUser.md → coding/user.md} +18 -17
  64. package/templates/design/base.md +103 -0
  65. package/templates/design/fixSystem.md +71 -0
  66. package/templates/design/fixUser.md +3 -0
  67. package/templates/design/init.md +304 -0
  68. package/templates/design/system.md +108 -0
  69. package/templates/design/user.md +11 -0
  70. package/templates/{goSystem.md → go/system.md} +130 -130
  71. package/templates/{bash-process.md → other/bash-process.md} +12 -12
  72. package/templates/{coreProtocol.md → other/coreProtocol.md} +30 -29
  73. package/templates/{guidance.json → other/guidance.json} +72 -72
  74. package/templates/{requirements.example.md → other/requirements.example.md} +57 -57
  75. package/templates/{test_rule.md → other/test_rule.md} +192 -194
  76. package/templates/{web-testing.md → other/web-testing.md} +17 -17
  77. package/templates/{planSystem.md → plan/system.md} +78 -78
  78. package/templates/{planUser.md → plan/user.md} +10 -9
  79. package/templates/{scanSystem.md → scan/system.md} +120 -120
  80. package/templates/{scanUser.md → scan/user.md} +10 -10
  81. package/types/index.d.ts +217 -217
@@ -1,14 +1,14 @@
1
- # 标签页
2
-
3
- ## 任务分解指导
4
- 标签页通常作为页面布局的一部分,合并到对应页面的 frontend 任务中。
5
-
6
- ## 实现要点
7
- - Tab 切换:点击切换内容区域
8
- - 路由联动:Tab 与 URL hash/query 同步
9
- - 懒加载:未激活的 Tab 不渲染内容
10
- - 徽标/计数:Tab 标题旁显示数量
11
-
12
- ## 验证策略
13
- - 点击各 Tab → 验证内容切换
14
- - 刷新页面 → 验证 Tab 状态保持(路由联动)
1
+ # 标签页
2
+
3
+ ## 任务分解指导
4
+ 标签页通常作为页面布局的一部分,合并到对应页面的 frontend 任务中。
5
+
6
+ ## 实现要点
7
+ - Tab 切换:点击切换内容区域
8
+ - 路由联动:Tab 与 URL hash/query 同步
9
+ - 懒加载:未激活的 Tab 不渲染内容
10
+ - 徽标/计数:Tab 标题旁显示数量
11
+
12
+ ## 验证策略
13
+ - 点击各 Tab → 验证内容切换
14
+ - 刷新页面 → 验证 Tab 状态保持(路由联动)
@@ -1,15 +1,15 @@
1
- # 树形结构
2
-
3
- ## 任务分解指导
4
- 树形通常与列表替换使用,作为独立 frontend 任务。
5
-
6
- ## 实现要点
7
- - 树形数据格式:id + parentId 或嵌套 children
8
- - 展开/折叠:默认展开第一级
9
- - 懒加载:大数据量时按需加载子节点
10
- - 操作:点击节点 → 右侧显示详情或触发其他交互
11
- - 搜索/过滤:树节点过滤 + 高亮匹配节点
12
-
13
- ## 验证策略
14
- - snapshot 验证树形结构渲染
15
- - 点击展开 → 验证子节点显示
1
+ # 树形结构
2
+
3
+ ## 任务分解指导
4
+ 树形通常与列表替换使用,作为独立 frontend 任务。
5
+
6
+ ## 实现要点
7
+ - 树形数据格式:id + parentId 或嵌套 children
8
+ - 展开/折叠:默认展开第一级
9
+ - 懒加载:大数据量时按需加载子节点
10
+ - 操作:点击节点 → 右侧显示详情或触发其他交互
11
+ - 搜索/过滤:树节点过滤 + 高亮匹配节点
12
+
13
+ ## 验证策略
14
+ - snapshot 验证树形结构渲染
15
+ - 点击展开 → 验证子节点显示
@@ -1,15 +1,15 @@
1
- # 文件上传
2
-
3
- ## 任务分解指导
4
- 文件上传通常嵌入弹窗表单中,不单独拆任务。如上传逻辑较复杂(多文件、进度条、预览),可拆为独立 frontend 任务。
5
-
6
- ## 实现要点
7
- - 文件类型限制:accept 属性 + 前端校验
8
- - 文件大小限制:前端校验 + 后端校验
9
- - 上传进度:progress bar(XMLHttpRequest 或 fetch + ReadableStream)
10
- - 上传成功后:显示文件名/预览图 + 返回 fileId
11
- - 多文件上传:列表展示已上传文件,支持删除
12
-
13
- ## 验证策略
14
- - 选择超限文件 → 验证拒绝提示
15
- - 上传正确文件 → 验证成功提示 + 预览显示
1
+ # 文件上传
2
+
3
+ ## 任务分解指导
4
+ 文件上传通常嵌入弹窗表单中,不单独拆任务。如上传逻辑较复杂(多文件、进度条、预览),可拆为独立 frontend 任务。
5
+
6
+ ## 实现要点
7
+ - 文件类型限制:accept 属性 + 前端校验
8
+ - 文件大小限制:前端校验 + 后端校验
9
+ - 上传进度:progress bar(XMLHttpRequest 或 fetch + ReadableStream)
10
+ - 上传成功后:显示文件名/预览图 + 返回 fileId
11
+ - 多文件上传:列表展示已上传文件,支持删除
12
+
13
+ ## 验证策略
14
+ - 选择超限文件 → 验证拒绝提示
15
+ - 上传正确文件 → 验证成功提示 + 预览显示
@@ -1,24 +1,24 @@
1
- {
2
- "id": "console",
3
- "name": "管理后台",
4
- "description": "企业级管理后台页面开发(搜索、列表、分页、弹窗等 CRUD 场景)",
5
- "base": "base.md",
6
- "components": [
7
- { "id": "search", "label": "搜索框", "description": "关键词搜索、筛选条件、防抖", "file": "components/search.md", "default": true },
8
- { "id": "table", "label": "数据表格", "description": "列定义、排序、行选择、批量操作", "file": "components/table-list.md", "default": true },
9
- { "id": "pagination", "label": "分页", "description": "分页导航、每页条数、总数显示", "file": "components/pagination.md", "default": true },
10
- { "id": "modal", "label": "弹窗/表单", "description": "新建/编辑弹窗、表单校验、提交回填", "file": "components/modal-form.md", "default": true },
11
- { "id": "upload", "label": "文件上传", "description": "文件类型限制、大小限制、上传进度", "file": "components/upload.md", "default": false },
12
- { "id": "tree", "label": "树形结构", "description": "树形数据展示、懒加载、展开折叠", "file": "components/tree.md", "default": false },
13
- { "id": "tabs", "label": "标签页", "description": "多标签切换、路由联动、懒加载", "file": "components/tabs.md", "default": false }
14
- ],
15
- "test": {
16
- "file": "test/crud-e2e.md",
17
- "defaultEnabled": true
18
- },
19
- "defaults": {
20
- "components": ["search", "table", "pagination", "modal"],
21
- "role": "developer",
22
- "test": true
23
- }
24
- }
1
+ {
2
+ "id": "console",
3
+ "name": "管理后台",
4
+ "description": "企业级管理后台页面开发(搜索、列表、分页、弹窗等 CRUD 场景)",
5
+ "base": "base.md",
6
+ "components": [
7
+ { "id": "search", "label": "搜索框", "description": "关键词搜索、筛选条件、防抖", "file": "components/search.md", "default": true },
8
+ { "id": "table", "label": "数据表格", "description": "列定义、排序、行选择、批量操作", "file": "components/table-list.md", "default": true },
9
+ { "id": "pagination", "label": "分页", "description": "分页导航、每页条数、总数显示", "file": "components/pagination.md", "default": true },
10
+ { "id": "modal", "label": "弹窗/表单", "description": "新建/编辑弹窗、表单校验、提交回填", "file": "components/modal-form.md", "default": true },
11
+ { "id": "upload", "label": "文件上传", "description": "文件类型限制、大小限制、上传进度", "file": "components/upload.md", "default": false },
12
+ { "id": "tree", "label": "树形结构", "description": "树形数据展示、懒加载、展开折叠", "file": "components/tree.md", "default": false },
13
+ { "id": "tabs", "label": "标签页", "description": "多标签切换、路由联动、懒加载", "file": "components/tabs.md", "default": false }
14
+ ],
15
+ "test": {
16
+ "file": "test/crud-e2e.md",
17
+ "defaultEnabled": true
18
+ },
19
+ "defaults": {
20
+ "components": ["search", "table", "pagination", "modal"],
21
+ "role": "developer",
22
+ "test": true
23
+ }
24
+ }
@@ -1,47 +1,47 @@
1
- # Console CRUD E2E 测试步骤模板
2
-
3
- ## 任务分解指导
4
- E2E 测试作为独立 test 类任务。steps 用优先级标签标记。
5
-
6
- ## 标准测试用例
7
-
8
- ### 【P0】列表加载
9
- 1. 导航到列表页
10
- 2. Playwright snapshot 验证表格存在
11
- 3. 验证至少有 1 行数据(或空状态文案)
12
-
13
- ### 【P0】搜索功能
14
- 1. 在搜索框输入已知关键词
15
- 2. 等待列表更新(waitForLoadState)
16
- 3. snapshot 验证结果数量变化
17
-
18
- ### 【P1】分页
19
- 1. 点击第 2 页
20
- 2. 验证页码高亮变化
21
- 3. 验证数据不同于第 1 页
22
-
23
- ### 【P0】新建
24
- 1. 点击新建按钮
25
- 2. snapshot 验证弹窗打开
26
- 3. 填写表单各字段
27
- 4. 提交
28
- 5. 验证弹窗关闭 + 列表出现新数据
29
-
30
- ### 【P1】编辑
31
- 1. 点击某行编辑按钮
32
- 2. 验证弹窗打开且回填数据正确
33
- 3. 修改某字段,提交
34
- 4. 验证列表数据更新
35
-
36
- ### 【P1】删除
37
- 1. 点击删除按钮
38
- 2. 验证确认弹窗出现
39
- 3. 确认删除
40
- 4. 验证列表数据减少
41
-
42
- ### 【P2】表单校验
43
- 1. 打开新建弹窗
44
- 2. 不填必填项直接提交
45
- 3. 验证校验提示出现
46
- 4. 填入格式错误的数据(如邮箱格式)
47
- 5. 验证格式校验提示
1
+ # Console CRUD E2E 测试步骤模板
2
+
3
+ ## 任务分解指导
4
+ E2E 测试作为独立 test 类任务。steps 用优先级标签标记。
5
+
6
+ ## 标准测试用例
7
+
8
+ ### 【P0】列表加载
9
+ 1. 导航到列表页
10
+ 2. Playwright snapshot 验证表格存在
11
+ 3. 验证至少有 1 行数据(或空状态文案)
12
+
13
+ ### 【P0】搜索功能
14
+ 1. 在搜索框输入已知关键词
15
+ 2. 等待列表更新(waitForLoadState)
16
+ 3. snapshot 验证结果数量变化
17
+
18
+ ### 【P1】分页
19
+ 1. 点击第 2 页
20
+ 2. 验证页码高亮变化
21
+ 3. 验证数据不同于第 1 页
22
+
23
+ ### 【P0】新建
24
+ 1. 点击新建按钮
25
+ 2. snapshot 验证弹窗打开
26
+ 3. 填写表单各字段
27
+ 4. 提交
28
+ 5. 验证弹窗关闭 + 列表出现新数据
29
+
30
+ ### 【P1】编辑
31
+ 1. 点击某行编辑按钮
32
+ 2. 验证弹窗打开且回填数据正确
33
+ 3. 修改某字段,提交
34
+ 4. 验证列表数据更新
35
+
36
+ ### 【P1】删除
37
+ 1. 点击删除按钮
38
+ 2. 验证确认弹窗出现
39
+ 3. 确认删除
40
+ 4. 验证列表数据减少
41
+
42
+ ### 【P2】表单校验
43
+ 1. 打开新建弹窗
44
+ 2. 不填必填项直接提交
45
+ 3. 验证校验提示出现
46
+ 4. 填入格式错误的数据(如邮箱格式)
47
+ 5. 验证格式校验提示
@@ -1,26 +1,26 @@
1
- # H5 活动页 — 基础食谱
2
-
3
- ## 任务分解模式
4
-
5
- H5 活动页按以下标准拆分:
6
-
7
- 1. **infra**: 项目脚手架(如未有移动端模板,需要初始化)
8
- - steps:脚手架搭建、移动端适配(viewport + rem/vw)、基础样式
9
- - 验证:页面在移动端视口正常显示
10
-
11
- 2. **frontend**: 页面主体(布局 + 核心交互组件)
12
- - steps:页面结构、组件集成、数据对接
13
- - 验证:Playwright 移动端 viewport snapshot
14
-
15
- 3. **frontend**: 分享/营销功能(如需要)
16
- - steps:分享配置、海报生成、统计埋点
17
- - 验证:分享链接正确、海报生成成功
18
-
19
- 4. **test**: 多端兼容测试
20
- - steps:iOS Safari、Android Chrome、微信内置浏览器
21
-
22
- ## 通用规则
23
-
24
- - H5 页面通常较轻量,2-3 个任务即可
25
- - 优先保证移动端适配(viewport meta + 响应式)
26
- - 注意性能:图片懒加载、动画性能、首屏加载速度
1
+ # H5 活动页 — 基础食谱
2
+
3
+ ## 任务分解模式
4
+
5
+ H5 活动页按以下标准拆分:
6
+
7
+ 1. **infra**: 项目脚手架(如未有移动端模板,需要初始化)
8
+ - steps:脚手架搭建、移动端适配(viewport + rem/vw)、基础样式
9
+ - 验证:页面在移动端视口正常显示
10
+
11
+ 2. **frontend**: 页面主体(布局 + 核心交互组件)
12
+ - steps:页面结构、组件集成、数据对接
13
+ - 验证:Playwright 移动端 viewport snapshot
14
+
15
+ 3. **frontend**: 分享/营销功能(如需要)
16
+ - steps:分享配置、海报生成、统计埋点
17
+ - 验证:分享链接正确、海报生成成功
18
+
19
+ 4. **test**: 多端兼容测试
20
+ - steps:iOS Safari、Android Chrome、微信内置浏览器
21
+
22
+ ## 通用规则
23
+
24
+ - H5 页面通常较轻量,2-3 个任务即可
25
+ - 优先保证移动端适配(viewport meta + 响应式)
26
+ - 注意性能:图片懒加载、动画性能、首屏加载速度
@@ -1,11 +1,11 @@
1
- # 动画效果
2
-
3
- ## 实现要点
4
- - 入场动画:元素进入视口时触发(Intersection Observer)
5
- - 滚动动画:视差滚动、进度条等
6
- - 交互动效:点击反馈、状态切换过渡
7
- - 性能:使用 transform/opacity 动画,避免触发 layout
8
-
9
- ## 验证策略
10
- - snapshot 验证动画元素存在
11
- - 滚动页面 → 验证动画触发
1
+ # 动画效果
2
+
3
+ ## 实现要点
4
+ - 入场动画:元素进入视口时触发(Intersection Observer)
5
+ - 滚动动画:视差滚动、进度条等
6
+ - 交互动效:点击反馈、状态切换过渡
7
+ - 性能:使用 transform/opacity 动画,避免触发 layout
8
+
9
+ ## 验证策略
10
+ - snapshot 验证动画元素存在
11
+ - 滚动页面 → 验证动画触发
@@ -1,11 +1,11 @@
1
- # 倒计时组件
2
-
3
- ## 实现要点
4
- - 服务端时间同步(避免客户端时间篡改)
5
- - 天/时/分/秒 格式化显示
6
- - 倒计时结束回调(如切换页面状态)
7
- - requestAnimationFrame 或 setInterval 驱动
8
-
9
- ## 验证策略
10
- - snapshot 验证倒计时数字显示
11
- - 等待数秒 → 验证数字递减
1
+ # 倒计时组件
2
+
3
+ ## 实现要点
4
+ - 服务端时间同步(避免客户端时间篡改)
5
+ - 天/时/分/秒 格式化显示
6
+ - 倒计时结束回调(如切换页面状态)
7
+ - requestAnimationFrame 或 setInterval 驱动
8
+
9
+ ## 验证策略
10
+ - snapshot 验证倒计时数字显示
11
+ - 等待数秒 → 验证数字递减
@@ -1,11 +1,11 @@
1
- # 分享功能
2
-
3
- ## 实现要点
4
- - 微信 JS-SDK 分享配置(标题、描述、图片、链接)
5
- - 浏览器原生 Web Share API 兜底
6
- - 分享海报生成(html2canvas / canvas 绘制)
7
- - 分享统计埋点
8
-
9
- ## 验证策略
10
- - 验证分享按钮可点击
11
- - 验证海报生成成功(如适用)
1
+ # 分享功能
2
+
3
+ ## 实现要点
4
+ - 微信 JS-SDK 分享配置(标题、描述、图片、链接)
5
+ - 浏览器原生 Web Share API 兜底
6
+ - 分享海报生成(html2canvas / canvas 绘制)
7
+ - 分享统计埋点
8
+
9
+ ## 验证策略
10
+ - 验证分享按钮可点击
11
+ - 验证海报生成成功(如适用)
@@ -1,11 +1,11 @@
1
- # 轮播组件
2
-
3
- ## 实现要点
4
- - 图片/卡片横向轮播,支持触摸滑动
5
- - 自动播放 + 手动暂停
6
- - 指示器(圆点或数字)
7
- - 图片懒加载,优化首屏性能
8
-
9
- ## 验证策略
10
- - snapshot 验证轮播容器和指示器存在
11
- - 滑动/点击 → 验证切换到下一张
1
+ # 轮播组件
2
+
3
+ ## 实现要点
4
+ - 图片/卡片横向轮播,支持触摸滑动
5
+ - 自动播放 + 手动暂停
6
+ - 指示器(圆点或数字)
7
+ - 图片懒加载,优化首屏性能
8
+
9
+ ## 验证策略
10
+ - snapshot 验证轮播容器和指示器存在
11
+ - 滑动/点击 → 验证切换到下一张
@@ -1,21 +1,21 @@
1
- {
2
- "id": "h5",
3
- "name": "H5 活动页",
4
- "description": "移动端 H5 活动页面开发(轮播、倒计时、分享、动画等营销场景)",
5
- "base": "base.md",
6
- "components": [
7
- { "id": "swiper", "label": "轮播", "description": "图片/卡片轮播、自动播放、指示器", "file": "components/swiper.md", "default": true },
8
- { "id": "countdown", "label": "倒计时", "description": "活动倒计时、服务端时间同步", "file": "components/countdown.md", "default": false },
9
- { "id": "share", "label": "分享", "description": "微信/浏览器分享、海报生成", "file": "components/share.md", "default": true },
10
- { "id": "animation", "label": "动画效果", "description": "入场动画、滚动动画、交互动效", "file": "components/animation.md", "default": false }
11
- ],
12
- "test": {
13
- "file": "test/h5-e2e.md",
14
- "defaultEnabled": true
15
- },
16
- "defaults": {
17
- "components": ["swiper", "share"],
18
- "role": "developer",
19
- "test": true
20
- }
21
- }
1
+ {
2
+ "id": "h5",
3
+ "name": "H5 活动页",
4
+ "description": "移动端 H5 活动页面开发(轮播、倒计时、分享、动画等营销场景)",
5
+ "base": "base.md",
6
+ "components": [
7
+ { "id": "swiper", "label": "轮播", "description": "图片/卡片轮播、自动播放、指示器", "file": "components/swiper.md", "default": true },
8
+ { "id": "countdown", "label": "倒计时", "description": "活动倒计时、服务端时间同步", "file": "components/countdown.md", "default": false },
9
+ { "id": "share", "label": "分享", "description": "微信/浏览器分享、海报生成", "file": "components/share.md", "default": true },
10
+ { "id": "animation", "label": "动画效果", "description": "入场动画、滚动动画、交互动效", "file": "components/animation.md", "default": false }
11
+ ],
12
+ "test": {
13
+ "file": "test/h5-e2e.md",
14
+ "defaultEnabled": true
15
+ },
16
+ "defaults": {
17
+ "components": ["swiper", "share"],
18
+ "role": "developer",
19
+ "test": true
20
+ }
21
+ }
@@ -1,20 +1,20 @@
1
- # H5 活动页 E2E 测试步骤模板
2
-
3
- ## 标准测试用例
4
-
5
- ### 【P0】页面加载
6
- 1. 使用移动端 viewport 导航到页面
7
- 2. snapshot 验证页面主体内容渲染
8
- 3. 验证无 JS 报错(console.error)
9
-
10
- ### 【P0】核心交互
11
- 1. 操作页面核心功能(如轮播滑动、按钮点击)
12
- 2. 验证交互响应正确
13
-
14
- ### 【P1】分享功能
15
- 1. 点击分享按钮
16
- 2. 验证分享面板/海报出现
17
-
18
- ### 【P1】适配验证
19
- 1. 切换不同 viewport(iPhone SE / iPhone 14 / Android)
20
- 2. 验证布局无溢出、元素无遮挡
1
+ # H5 活动页 E2E 测试步骤模板
2
+
3
+ ## 标准测试用例
4
+
5
+ ### 【P0】页面加载
6
+ 1. 使用移动端 viewport 导航到页面
7
+ 2. snapshot 验证页面主体内容渲染
8
+ 3. 验证无 JS 报错(console.error)
9
+
10
+ ### 【P0】核心交互
11
+ 1. 操作页面核心功能(如轮播滑动、按钮点击)
12
+ 2. 验证交互响应正确
13
+
14
+ ### 【P1】分享功能
15
+ 1. 点击分享按钮
16
+ 2. 验证分享面板/海报出现
17
+
18
+ ### 【P1】适配验证
19
+ 1. 切换不同 viewport(iPhone SE / iPhone 14 / Android)
20
+ 2. 验证布局无溢出、元素无遮挡