lcap-frontend-library 0.0.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.
Files changed (84) hide show
  1. package/README.md +271 -0
  2. package/bin/lcap-frontend-library.mjs +3 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +27 -0
  5. package/dist/init.d.ts +6 -0
  6. package/dist/init.js +79 -0
  7. package/dist/sync.d.ts +4 -0
  8. package/dist/sync.js +70 -0
  9. package/dist/utils.d.ts +19 -0
  10. package/dist/utils.js +101 -0
  11. package/package.json +34 -0
  12. package/packages/lcap-frontend-library/LEARNINGS.md +11 -0
  13. package/packages/lcap-frontend-library/SKILL.md +86 -0
  14. package/packages/lcap-frontend-library/commands/migrate.check.md +287 -0
  15. package/packages/lcap-frontend-library/commands/migrate.green.md +190 -0
  16. package/packages/lcap-frontend-library/commands/migrate.plan.md +169 -0
  17. package/packages/lcap-frontend-library/commands/migrate.red.md +160 -0
  18. package/packages/lcap-frontend-library/commands/migrate.scan.md +151 -0
  19. package/packages/lcap-frontend-library/commands/migrate.spec.md +144 -0
  20. package/packages/lcap-frontend-library/commands/migrate.tasks.md +179 -0
  21. package/packages/lcap-frontend-library/commands/speckit.create.md +201 -0
  22. package/packages/lcap-frontend-library/commands/speckit.implement.md +88 -0
  23. package/packages/lcap-frontend-library/commands/speckit.plan.md +79 -0
  24. package/packages/lcap-frontend-library/commands/speckit.self-check.md +177 -0
  25. package/packages/lcap-frontend-library/commands/speckit.specify.md +91 -0
  26. package/packages/lcap-frontend-library/commands/speckit.tasks.md +61 -0
  27. package/packages/lcap-frontend-library/references/frontend-design/LICENSE.txt +177 -0
  28. package/packages/lcap-frontend-library/references/frontend-design/SKILL.md +42 -0
  29. package/packages/lcap-frontend-library/references/lcap-extension-component/SKILL.md +360 -0
  30. package/packages/lcap-frontend-library/references/lcap-extension-component/api.md +331 -0
  31. package/packages/lcap-frontend-library/references/lcap-extension-component/block.md +160 -0
  32. package/packages/lcap-frontend-library/references/lcap-extension-component/i18n.md +95 -0
  33. package/packages/lcap-frontend-library/references/lcap-extension-component/icon.md +27 -0
  34. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/container.md +728 -0
  35. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/element.md +312 -0
  36. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/expression.md +154 -0
  37. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/index.md +113 -0
  38. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/modal.md +189 -0
  39. package/packages/lcap-frontend-library/references/lcap-extension-component/ide/popover.md +171 -0
  40. package/packages/lcap-frontend-library/references/lcap-extension-component/ide.md +799 -0
  41. package/packages/lcap-frontend-library/references/lcap-extension-component/implementation-rules.md +242 -0
  42. package/packages/lcap-frontend-library/references/lcap-extension-component/index.md +27 -0
  43. package/packages/lcap-frontend-library/references/lcap-extension-component/nasl-view-component.md +895 -0
  44. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/accessibility.md +185 -0
  45. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/child.md +82 -0
  46. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/data-source.md +261 -0
  47. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/event.md +171 -0
  48. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/form.md +266 -0
  49. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/function.md +80 -0
  50. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/link.md +137 -0
  51. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/slot.md +128 -0
  52. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-ant-design.md +1470 -0
  53. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-cloud-ui.md +259 -0
  54. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-element-plus.md +580 -0
  55. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-element-ui.md +1007 -0
  56. package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-mobile-ui.md +85 -0
  57. package/packages/lcap-frontend-library/references/lcap-extension-component/theme.md +234 -0
  58. package/packages/lcap-frontend-library/references/lcap-extension-component/workflow-guardrails.md +328 -0
  59. package/packages/lcap-frontend-library/references/nasl-logic-authoring/SKILL.md +201 -0
  60. package/packages/lcap-frontend-library/scripts/bash/create-component-files.sh +95 -0
  61. package/packages/lcap-frontend-library/scripts/bash/create-extension-project.sh +109 -0
  62. package/packages/lcap-frontend-library/scripts/bash/create-logic-files.sh +149 -0
  63. package/packages/lcap-frontend-library/scripts/bash/create-spec.sh +109 -0
  64. package/packages/lcap-frontend-library/scripts/bash/get-available-port.sh +35 -0
  65. package/packages/lcap-frontend-library/scripts/bash/list-specs.sh +19 -0
  66. package/packages/lcap-frontend-library/scripts/node/setup-extension-project.mjs +166 -0
  67. package/packages/lcap-frontend-library/templates/component-self-check.md +31 -0
  68. package/packages/lcap-frontend-library/templates/component-template.md +96 -0
  69. package/packages/lcap-frontend-library/templates/library-report-template.md +52 -0
  70. package/packages/lcap-frontend-library/templates/logic-template.md +44 -0
  71. package/packages/lcap-frontend-library/templates/migration-manifest-template.md +84 -0
  72. package/packages/lcap-frontend-library/templates/migration-plan-template.md +138 -0
  73. package/packages/lcap-frontend-library/templates/migration-report-template.md +227 -0
  74. package/packages/lcap-frontend-library/templates/migration-spec-template.md +135 -0
  75. package/packages/lcap-frontend-library/templates/migration-tasks-template.md +129 -0
  76. package/packages/lcap-frontend-library/templates/plan-template.md +299 -0
  77. package/packages/lcap-frontend-library/templates/self-check-report-template.md +148 -0
  78. package/packages/lcap-frontend-library/templates/tasks-template.md +81 -0
  79. package/packages/lcap-frontend-library/workflows/create/flow.md +199 -0
  80. package/packages/lcap-frontend-library/workflows/evolve/flow.md +249 -0
  81. package/packages/lcap-frontend-library/workflows/generate/flow.md +10 -0
  82. package/packages/lcap-frontend-library/workflows/harness/flow.md +82 -0
  83. package/packages/lcap-frontend-library/workflows/migrate/flow.md +302 -0
  84. package/packages/lcap-frontend-library/workflows/migrate/knowledge-base.md +564 -0
@@ -0,0 +1,227 @@
1
+ # [资产名] — 迁移验证报告
2
+
3
+ **自检时间**:[DATE]
4
+ **资产**:[组件目录名]
5
+ **资产类型**:component / logic / shared-composable
6
+ **状态**:✅ PASS / ⚠️ CONDITIONAL PASS / ❌ FAIL
7
+ **输入**:`specs/<NN>-<资产名>/spec.md`(行为真值)+ `specs/<NN>-<资产名>/tasks.md`(行为等价矩阵)
8
+
9
+ ---
10
+
11
+ > **审计维分支**:component 使用维度 1–5(下文);logic 使用 L1–L3(→ migrate.check.md);shared-composable 使用 S1–S3(方法对齐 / 副作用清理 / 测试覆盖)。非 component 跳过 Storybook 维与 api.ts 覆盖表。
12
+
13
+ ## §B 等价审计
14
+
15
+ **资产类型**:<!-- component | logic | shared-composable -->
16
+
17
+ ### component — 维度 1
18
+
19
+ 按 **`knowledge-base.md` §alignment-checklist** 逐项勾选(24 条)。结论列:PASS / FAIL / N/A + 证据。
20
+
21
+ ### logic — L1–L3
22
+
23
+ 按 `migrate.check.md` 定义填写 L1 签名 / L2 测试覆盖 / L3 NASL 合规。**禁止**使用 §alignment-checklist。
24
+
25
+ ### shared-composable — S1–S3
26
+
27
+ 按 `migrate.check.md` 定义填写 S1 行为等价 / S2 副作用清理 / S3 调用契约。
28
+
29
+ **维度 1 / L1–L3 / S1–S3 结论**:PASS / FAIL
30
+ **发现与修复记录**:
31
+ - [如有修复,记录修改内容]
32
+
33
+ ---
34
+
35
+ ## 维度 2:API 覆盖矩阵
36
+
37
+ > 从 api.ts 提取所有 Props(展示/交互相关)、Methods、Events,逐一核对测试覆盖。
38
+
39
+ | API 项 | 类型 | Vitest 覆盖 | E2E 覆盖 | 覆盖状态 |
40
+ |:---|:---|:---|:---|:---|
41
+ | value | Prop | ✓ 响应式 | ✓ 渲染 | PASS |
42
+ | onPlay | Event | ✓ emit | ✗ | 需补 E2E |
43
+ | reload | Method | ✗ | ✗ | 需补两层 |
44
+
45
+ **未覆盖项修复**:
46
+ - [补充的测试描述 + 验证结果]
47
+
48
+ **维度 2 结论**:PASS / FAIL
49
+
50
+ ---
51
+
52
+ ## 维度 3:平台合规扫描
53
+
54
+ ### 3.1 硬编码颜色/间距
55
+
56
+ | 文件 | 位置 | 当前值 | 应替换为 | 状态 |
57
+ |:---|:---|:---|:---|:---|
58
+ | index.vue | .toolbar | #f5f7fa | var(--el-fill-color-light) | 已修复 / 待修复 |
59
+
60
+ ### 3.2 CSS 变量合法性
61
+
62
+ | 使用的变量 | 是否在 theme-variables-element-plus.md 中定义 | 备注 |
63
+ |:---|:---|:---|
64
+ | var(--el-color-primary) | ✓ | — |
65
+
66
+ ### 3.3 NASL 类型检查
67
+
68
+ | api.ts 位置 | 当前类型 | 应修改为 | 状态 |
69
+ |:---|:---|:---|:---|
70
+ | [如有 Object/any] | Object | nasl.core.String | 已修复 |
71
+
72
+ ### 3.4 Vue2 残留检查
73
+
74
+ | 残留模式 | 文件/位置 | 状态 |
75
+ |:---|:---|:---|
76
+ | this.$emit | — | 无残留 ✓ |
77
+ | this.$refs | — | 无残留 ✓ |
78
+ | Options API | — | 无残留 ✓ |
79
+ | process.env | — | 无残留 ✓ |
80
+ | export * from | — | 无残留 ✓ |
81
+
82
+ ### 3.5 样式隔离检查
83
+
84
+ | 文件 | 当前样式标签 | 是否合规 | 状态 |
85
+ |:---|:---|:---|:---|
86
+ | index.vue | `<style scoped>` | ✓ | PASS |
87
+
88
+ **维度 3 结论**:PASS / FAIL
89
+
90
+ ---
91
+
92
+ ## 维度 4:Storybook 运行时证据
93
+
94
+ ### 执行记录
95
+
96
+ | 项 | 内容 |
97
+ |:---|:---|
98
+ | 退出码 | 0 |
99
+ | 检查 story 数 | N |
100
+ | 结果 | ✅ 全部通过 / ❌ x/N 失败 |
101
+
102
+ ### Storybook 迭代记录(来自 migrate.exec + 本次复检)
103
+
104
+ #### 轮次 1
105
+
106
+ | 字段 | 内容 |
107
+ |:---|:---|
108
+ | 轮次 | 第 1 次 |
109
+ | 时间 | [ISO 时间] |
110
+ | 脚本/命令 | [完整命令] |
111
+ | 结果 | ❌ x/y 失败 / ✅ 全部通过 |
112
+ | 分类码 | GLOBAL_DEP / IMPORT_ORDER / HMR / ELEMENT_NOT_REG / ... |
113
+ | 错误详情 | [按 story 列出 console.error / pageerror] |
114
+ | 根因分析 | [为什么出错] |
115
+ | 修复描述 | [改了什么文件,怎么改] |
116
+ | 复检状态 | → 轮次 2 / ✅ 最终通过 |
117
+
118
+ #### 轮次 N(最终)
119
+
120
+ | 字段 | 内容 |
121
+ |:---|:---|
122
+ | 轮次 | 第 N 次 |
123
+ | 结果 | ✅ 全部通过 |
124
+ | 通过 story 数 | M/M |
125
+
126
+ **维度 4 结论**:PASS / FAIL
127
+
128
+ ---
129
+
130
+ ## 维度 5:机制差异标注
131
+
132
+ > 记录 Vue3 实现与 Vue2 行为之间的**有意差异**(维度 1 中标注 ⚠️ 的项汇总于此)。
133
+
134
+ | 差异项 | 分类 | Vue2 行为 | Vue3 行为 | 原因 |
135
+ |:---|:---|:---|:---|:---|
136
+ | beforeDestroy | 框架差异 | beforeDestroy hook | onBeforeUnmount | Vue3 重命名 |
137
+ | $listeners | 框架差异 | 透传事件监听器 | 合并到 $attrs | Vue3 移除 |
138
+
139
+ **分类说明**:
140
+ - `框架差异`:Vue3 框架本身的变化(不可避免)
141
+ - `优化`:利用 Vue3 新能力的改进
142
+ - `简化`:移除不再需要的兼容代码
143
+ - `限制`:Vue3 不支持的能力(需标注替代方案)
144
+
145
+ **维度 5 结论**:PASS(机制差异已标注且合理)
146
+
147
+ ---
148
+
149
+ ## 行为等价矩阵验证
150
+
151
+ > 从 tasks.md 复制矩阵最终状态。矩阵有 ❌ 行则 FAIL。
152
+
153
+ | # | 行为描述 | 维度 | RED 测试编码 | GREEN 实现 | 等价状态 |
154
+ |:--|:---|:---|:---|:---|:---|
155
+ | 1 | [行为] | [维度] | [文件:行号] | [文件:函数] | ✅/⚠️/❌ |
156
+
157
+ **矩阵统计**:
158
+ - ✅ 等价:X 项
159
+ - ⚠️ 有意差异:Y 项(详见维度 5)
160
+ - ❌ 缺失:Z 项(必须为 0)
161
+
162
+ **矩阵结论**:PASS(无 ❌ 行)/ FAIL(存在 ❌ 行)
163
+
164
+ ---
165
+
166
+ ## 产物验证(migrate.check §C)
167
+
168
+ > component:build 成功后逐项检查;logic/shared:仅 build exit 0。
169
+
170
+ | # | 检查项 | 结果 | 证据 |
171
+ |:--|:---|:---|:---|
172
+ | 1 | package.json name/version 非空 | PASS/FAIL/N/A | |
173
+ | 2 | nasl.extension.json 存在 | PASS/FAIL/N/A | |
174
+ | 3 | {package}@{version}.zip 存在 | PASS/FAIL/N/A | |
175
+ | 4 | viewComponents 含本资产组件名 | PASS/FAIL/N/A | |
176
+
177
+ **§C 结论**:PASS / FAIL / N/A(logic/shared 为 N/A 除 build 外)
178
+
179
+ ---
180
+
181
+ ## 跨资产回归证据(migrate.check §D)
182
+
183
+ | 命令 | 退出码 | 结果摘要 |
184
+ |:---|:---|:---|
185
+ | `npm run test`(全量) | | |
186
+ | `npm run test:e2e`(全量,component 库) | | N/A |
187
+
188
+ ---
189
+
190
+ ## 测试运行证据(终端证据,必填)
191
+
192
+ > **铁律**:每个 PASS 声明必须有终端执行证据。禁止「应该通过」「看起来正确」。
193
+
194
+ | 命令 | 是否执行 | 退出码 | 结果摘要 |
195
+ |:---|:---|:---|:---|
196
+ | `npm run test` | 是 | 0 | vitest: N passed |
197
+ | `npm run build` | 是 | 0 | 编译成功 |
198
+ | `npm run test:e2e` | 是 | 0 | playwright: N passed |
199
+
200
+ ---
201
+
202
+ ## 总体结论
203
+
204
+ | 维度 | 结论 |
205
+ |:---|:---|
206
+ | 行为等价矩阵 | PASS / FAIL |
207
+ | 1. 对齐验证 | PASS / FAIL |
208
+ | 2. API 覆盖矩阵 | PASS / FAIL |
209
+ | 3. 平台合规扫描 | PASS / FAIL |
210
+ | 4. Storybook 运行时 | PASS / FAIL |
211
+ | 5. 机制差异标注 | PASS |
212
+ | 产物验证 §C | PASS / FAIL / N/A |
213
+ | 跨资产回归 §D | PASS / FAIL / N/A |
214
+
215
+ **最终判定**:
216
+ - **✅ PASS** — 矩阵无 ❌ + 五维度全部通过 + 三门禁 exit 0
217
+ - **⚠️ CONDITIONAL PASS** — 通过但有已标注的机制差异(⚠️ 项)
218
+ - **❌ FAIL** — 矩阵有 ❌ 行或维度未通过(禁止标记 verified)
219
+
220
+ ---
221
+
222
+ ## 待用户处理(仅 FAIL 时填写)
223
+
224
+ - [未解决问题列表]
225
+ - [建议操作]
226
+
227
+ **经验沉淀**(可选):如需将本次迁移经验写入 LEARNINGS,请用户主动执行「归因回流」。
@@ -0,0 +1,135 @@
1
+ # [资产名] — Vue2 行为规格
2
+
3
+ **提取时间**:[DATE]
4
+ **源码路径**:[Vue2 源码目录路径]
5
+
6
+ **资产类型**:component / logic / shared-composable(与 manifest 一致)
7
+
8
+ - component:填写 Props/Events/Stories/Mixin/第三方 等节
9
+ - logic:填写 @NaslLogic 元数据、参数、返回值、边界;Stories/api 节标 N/A
10
+ - shared-composable:填写 Mixin 方法、副作用、调用契约;Stories/api 节标 N/A
11
+
12
+ ---
13
+
14
+ ## 概述
15
+
16
+ | 项 | 内容 |
17
+ |:---|:---|
18
+ | **组件目录名** | [如 cw_audio_view] |
19
+ | **组件标签** | [如 `<cw-audio-view>`] |
20
+ | **中文名称** | [如 音频播放器] |
21
+ | **核心职责** | [一句话描述] |
22
+ | **第三方依赖** | [如 howler.js 2.x、moment.js] |
23
+ | **Mixin 依赖** | [列出所有引用的 Mixin 文件名] |
24
+ | **Stories 真值来源** | Vite 工程:`block.stories.js` / 旧工程:`docs/blocks.md` |
25
+
26
+ ---
27
+
28
+ ## Props
29
+
30
+ | 属性名 | 类型(nasl.*) | 默认值(以 api.yaml 为准) | 是否双向绑定 | 验证规则 | 说明 |
31
+ |:---|:---|:---|:---|:---|:---|
32
+ | value | nasl.core.String | `''` | 是(update:value) | — | 音频 URL |
33
+
34
+ ---
35
+
36
+ ## Events
37
+
38
+ | 事件名(on+PascalCase) | 参数签名 | 触发条件 |
39
+ |:---|:---|:---|
40
+ | onPlay | `{ currentTime: nasl.core.Decimal }` | 播放开始时 |
41
+
42
+ ---
43
+
44
+ ## Methods(defineExpose 暴露)
45
+
46
+ | 方法名 | 参数 | 返回值 | 副作用描述 |
47
+ |:---|:---|:---|:---|
48
+ | reload | — | void | 重新加载音频源 |
49
+
50
+ ---
51
+
52
+ ## Slots
53
+
54
+ | 插槽名 | 作用域变量 | 用途 |
55
+ |:---|:---|:---|
56
+ | slotDefault | — | 默认内容 |
57
+ | slotItem | `:item` `:index`(Current<T>) | 列表项 |
58
+
59
+ ---
60
+
61
+ ## 响应式状态
62
+
63
+ | 状态 | 来源(data/computed) | 依赖链 | 说明 |
64
+ |:---|:---|:---|:---|
65
+ | isPlaying | data → ref | — | 播放状态标识 |
66
+ | duration | computed | value prop → howler.duration() | 总时长 |
67
+
68
+ ---
69
+
70
+ ## 生命周期行为
71
+
72
+ | 生命周期 | 行为描述 |
73
+ |:---|:---|
74
+ | mounted | 初始化第三方实例(注意:是否在 ready 回调内) |
75
+ | beforeDestroy | 销毁第三方实例、移除 DOM 监听 |
76
+ | watch(哪些) | `value` → deep:false, immediate:true → 重新加载 |
77
+
78
+ ---
79
+
80
+ ## Mixin 调用点分析
81
+
82
+ > 规则(→ §mixin-to-composable):无调用不迁移。
83
+
84
+ | Mixin 文件 | 方法/属性 | 本组件是否调用 | 调用位置 | 迁移目标 |
85
+ |:---|:---|:---|:---|:---|
86
+ | emitter.js | $emitPrevent | ✓ | methods.handleUpload | emitPrevent 工具函数 |
87
+ | emitter.js | $on / $off | ✗ | — | 不迁移 |
88
+ | support.js | formatDuration | ✓ | computed.displayTime | useAudio composable |
89
+
90
+ ---
91
+
92
+ ## 第三方集成
93
+
94
+ | 库名 | 版本 | 初始化方式 | 配置项 | 销毁方式 |
95
+ |:---|:---|:---|:---|:---|
96
+ | howler.js | ^2.2.0 | `new Howl({...})` 在 ready 回调内 | src, volume, format | howl.unload() |
97
+
98
+ ---
99
+
100
+ ## 全局注册
101
+
102
+ | 组件名(app.component 键) | 对应导出 | 来源 |
103
+ |:---|:---|:---|
104
+ | CwAudioView | `export { default as CwAudioView }` | src/components/index.ts |
105
+
106
+ ---
107
+
108
+ ## Block Stories 真值
109
+
110
+ ```javascript
111
+ // 来源:[文件路径]
112
+ export const Default = {
113
+ name: '默认',
114
+ render: () => ({ template: `<cw-audio-view value="..."></cw-audio-view>` })
115
+ };
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Example Stories 真值
121
+
122
+ ```javascript
123
+ // 来源:[文件路径]
124
+ // 每个 story 对应一个主要功能
125
+ export const BasicPlayback = { ... };
126
+ export const VolumeControl = { ... };
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 注意事项
132
+
133
+ - [从 Vue2 源码中发现的特殊行为、边界条件、已知 hack]
134
+ - [CSS 属性选择器依赖的 prop(如 `[display="inline"]`)]
135
+ - [Vue2 中未在 props 声明但通过 $attrs 透传的属性]
@@ -0,0 +1,129 @@
1
+ # [资产名] — TDD 执行编排
2
+
3
+ **Date**:[YYYY-MM-DD]
4
+ **Input**:`specs/<NN>-<资产名>/plan.md`(迁移方案)
5
+ **资产类型**:component / logic / shared-composable
6
+ **复杂度**:HIGH / MEDIUM / LOW
7
+
8
+ ---
9
+
10
+ ## 行为等价矩阵
11
+
12
+ > 每行 = spec.md 中一个可测试行为。矩阵是迁移完成度的唯一判定依据。
13
+ > - **RED 测试编码**列:由 migrate.red 填充(测试文件路径 + 行号)
14
+ > - **GREEN 实现**列:由 migrate.green 填充(实现文件路径 + 函数名)
15
+ > - **等价状态**列:由 migrate.check 填充(最终验证)
16
+
17
+ | # | 行为描述(来自 spec.md) | 维度 | RED 测试编码 | GREEN 实现 | 等价状态 |
18
+ |:--|:---|:---|:---|:---|:---|
19
+ | 1 | [如:Props.value 接收 URL 并渲染] | Props | — | — | — |
20
+ | 2 | [如:Events.onPlay 在播放开始时触发] | Events | — | — | — |
21
+ | 3 | [如:Methods.reload 重新加载音频源] | Methods | — | — | — |
22
+ | 4 | [如:Slots.slotItem 传递 :item :index] | Slots | — | — | — |
23
+ | 5 | [如:响应式状态 isPlaying 跟踪播放] | State | — | — | — |
24
+ | 6 | [如:mounted 时初始化 Howl 实例] | Lifecycle | — | — | — |
25
+ | 7 | [如:beforeDestroy 时销毁实例] | Lifecycle | — | — | — |
26
+
27
+ **等价状态值**:
28
+ - ✅ 等价 — 测试通过,实现与 spec 行为一致
29
+ - ⚠️ 有意差异 — Vue3 框架限制导致(须记录原因,归入 report 维度 5)
30
+ - ❌ 缺失 — 无测试 / 测试未通过 / 实现遗漏(必须修复)
31
+ - `—` — 尚未填充
32
+
33
+ <!-- logic 资产示例行 -->
34
+ <!-- | 1 | 参数 date 接受 nasl.core.DateTime | Params | — | — | — | -->
35
+ <!-- | 2 | 返回值格式 YYYY-MM-DD | Return | — | — | — | -->
36
+ <!-- shared-composable 示例行 -->
37
+ <!-- | 1 | emitPrevent 返回 cancel 布尔 | Methods | — | — | — | -->
38
+
39
+ ---
40
+
41
+ ## Phase RED 任务组
42
+
43
+ > 目标:将 spec.md 行为编码为测试。完成后所有测试 FAIL(证明测试有意义)。
44
+
45
+ ### Vitest 单元/交互测试
46
+
47
+ | 序号 | 任务 | 对应矩阵行 | 测试层 | 状态 |
48
+ |:--|:---|:---|:---|:---|
49
+ | R1 | Props 响应性测试(默认值 + 类型 + 双向绑定) | #1 | Vitest(DOM) | [ ] |
50
+ | R2 | Events 触发测试(参数 + 触发条件) | #2 | Vitest(emit) | [ ] |
51
+ | R3 | Methods expose 测试(调用 + 返回值) | #3 | Vitest(返回值) | [ ] |
52
+ | R4 | Slots 渲染测试(作用域变量传递) | #4 | Vitest(DOM) | [ ] |
53
+ | R5 | 响应式状态测试(computed/watch 链路) | #5 | Vitest(返回值) | [ ] |
54
+ | R6 | 生命周期行为测试(初始化/销毁) | #6, #7 | Vitest(调用参数) | [ ] |
55
+
56
+ ### E2E 测试
57
+
58
+ | 序号 | 任务 | 对应矩阵行 | Story ID | 状态 |
59
+ |:--|:---|:---|:---|:---|
60
+ | RE1 | 基础渲染 + 零 console error | 全部 | `<name>--default` | [ ] |
61
+ | RE2 | [主要交互功能] | #2 | `<name>--<story>` | [ ] |
62
+
63
+ ### RED 完成标准
64
+
65
+ - [ ] `npm run test` exit ≠ 0(测试存在且 FAIL)
66
+ - [ ] 矩阵"RED 测试编码"列无空行
67
+ - [ ] 每个 describe/it 可追溯到矩阵行号
68
+
69
+ ---
70
+
71
+ ## Phase GREEN 任务组
72
+
73
+ > 目标:实现代码让测试从 FAIL 收敛到 PASS。禁止修改测试。
74
+
75
+ ### 实现步骤
76
+
77
+ > **资产类型分支**:component → G1 使用 `create-component-files.sh`;logic → `create-logic-files.sh`;shared-composable → 按 plan 路径 Edit 创建(无 scaffold)。
78
+
79
+ | 序号 | 任务 | 产出文件(plan.md 路径表) | 验收 | 状态 |
80
+ |:--|:---|:---|:---|:---|
81
+ | G1 | 创建组件骨架 | `create-component-files.sh` | 文件存在 | [ ] |
82
+ | G2 | 编写 api.ts | `src/components/<name>/api.ts` | 类型正确 | [ ] |
83
+ | G3 | 编写 ideusage.json | `src/components/<name>/ideusage.json` | 与 api.ts 一致 | [ ] |
84
+ | G4 | 迁移模板 + 逻辑 | `src/components/<name>/index.vue` + composables | — | [ ] |
85
+ | G5 | 编写 block.stories | `src/components/<name>/stories/block.stories.js` | 1:1 静态 | [ ] |
86
+ | G6 | 编写 example.stories | `src/components/<name>/stories/example.stories.js` | 功能 demo | [ ] |
87
+ | G7 | CSS/主题适配 | scoped style | 无硬编码 | [ ] |
88
+ | G8 | 桶文件导出 | `src/components/<name>/index.ts` | 具名导出 | [ ] |
89
+ | G9 | 迭代修复至测试全过 | — | `npm run test` exit 0 | [ ] |
90
+
91
+ ### GREEN 完成标准
92
+
93
+ - [ ] `npm run test` exit 0
94
+ - [ ] 矩阵"GREEN 实现"列已填充
95
+ - [ ] 无修改测试文件的 git diff
96
+
97
+ ---
98
+
99
+ ## Phase CHECK 执行清单(由 migrate.check 执行,非独立命令)
100
+
101
+ > migrate.check = 等价审计 + 产物验证。本节供 tasks 内追溯,不在 RED/GREEN 阶段执行。
102
+
103
+ | 序号 | 验证项 | component | logic | shared-composable |
104
+ |:--|:---|:---|:---|:---|
105
+ | V1 | 单测门禁 | `npm run test` exit 0 | 同左 | 同左 |
106
+ | V2 | 构建门禁 | `npm run build` exit 0 | 同左 | 同左 |
107
+ | V3 | E2E 门禁 | `npm run test:e2e` exit 0 | N/A | N/A |
108
+ | V4 | 行为等价矩阵 | 无 ❌ 行 | 同左 | 同左 |
109
+ | V5 | 等价审计维 | 五维(对齐/API/合规/Storybook/机制差异) | 三维 L1–L3(→ migrate.check) | 三维 S1–S3 |
110
+ | V6 | 产物验证 | 4 项清单(→ migrate.check §C) | build only | build only |
111
+ | V7 | 跨资产回归 | 全量 test + e2e | 全量 test | 全量 test |
112
+
113
+ ---
114
+
115
+ ## 复杂度自适应说明
116
+
117
+ 根据 plan.md 复杂度评估调整粒度:
118
+
119
+ - **LOW**:R1-R6 可合并为 2-3 个任务;G4 一步到位
120
+ - **MEDIUM**:按上表标准粒度执行
121
+ - **HIGH**:R 和 G 任务进一步拆分(如 Mixin 多时按 composable 拆)
122
+
123
+ ---
124
+
125
+ ## 断路器记录(如触发)
126
+
127
+ | 触发时间 | 错误模式 | 已尝试方案 | 决策 |
128
+ |:---|:---|:---|:---|
129
+ | — | — | — | — |