Skip to content

Commit ebac6ef

Browse files
committed
chore(open-spec): 归档 refactor-keytone-album-component 变更并更新 keytone-album-editor 规范
- 将 refactor-keytone-album-component 变更移动到 archive/2026-01-01-refactor-keytone-album-component - 使用组件重构的新要求更新 openspec/specs/keytone-album-editor/spec.md - 规范更新:+0 添加,~6 修改,-0 删除,→0 重命名
1 parent ec0ee02 commit ebac6ef

File tree

5 files changed

+101
-0
lines changed

5 files changed

+101
-0
lines changed

openspec/changes/refactor-keytone-album-component/design.md renamed to openspec/changes/archive/2026-01-01-refactor-keytone-album-component/design.md

File renamed without changes.

openspec/changes/refactor-keytone-album-component/proposal.md renamed to openspec/changes/archive/2026-01-01-refactor-keytone-album-component/proposal.md

File renamed without changes.

openspec/changes/refactor-keytone-album-component/specs/keytone-album-editor/spec.md renamed to openspec/changes/archive/2026-01-01-refactor-keytone-album-component/specs/keytone-album-editor/spec.md

File renamed without changes.

openspec/changes/refactor-keytone-album-component/tasks.md renamed to openspec/changes/archive/2026-01-01-refactor-keytone-album-component/tasks.md

File renamed without changes.
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# keytone-album-editor Specification
2+
3+
## Purpose
4+
TBD - created by archiving change refactor-keytone-album-component. Update Purpose after archive.
5+
## Requirements
6+
### Requirement: 键音专辑编辑器行为保持不变
7+
8+
Normative: 在进行组件拆分重构后,键音专辑编辑器(KeyTone Album Editor)在用户侧的视觉、交互与配置读写行为 SHALL 与重构前保持一致。
9+
10+
#### Scenario: Stepper 折叠/展开行为不变
11+
12+
- **GIVEN** 编辑器使用 `q-stepper` 组织多个步骤
13+
- **WHEN** 用户点击某个 step 的 header
14+
- **THEN** step SHALL 在“展开该 step”与“折叠为 step=99”之间切换
15+
16+
#### Scenario: Continue/Back 导航行为不变
17+
18+
- **GIVEN** 用户位于任意步骤
19+
- **WHEN** 用户点击 Continue / Back
20+
- **THEN** step 值切换与原实现一致,且不会引入额外的导航路径
21+
22+
#### Scenario: SSE → UI 状态映射不变
23+
24+
- **GIVEN** 前端通过 `messageAudioPackage` 事件接收来自后端的键音包配置数据
25+
- **WHEN** 配置数据发生变化
26+
- **THEN** UI 中与以下领域相关的数据映射与排序 SHALL 与重构前一致:
27+
- audio_files → soundFileList
28+
- sounds → soundList
29+
- key_sounds → keySoundList
30+
- key_tone(global/single/is_enable_embedded_test_sound)相关字段
31+
32+
#### Scenario: UI → Config 写回闭环不变
33+
34+
- **GIVEN** 用户在 UI 中修改名称/声音/键音/联动设置等配置
35+
- **WHEN** watch/按钮触发写回
36+
- **THEN** `ConfigSet`/`ConfigDelete` 的 key 路径、触发时机、以及通知提示 SHALL 与重构前一致
37+
38+
---
39+
40+
### Requirement: 对话框可复用且可被跨步骤直接拉起
41+
42+
Normative: 拆分后的对话框组件 SHALL 支持被任意步骤直接拉起使用(例如在某一步中打开另一领域的配置对话框),并保持与原行为一致。
43+
44+
#### Scenario: 在 Step4 拉起全局设置对话框
45+
46+
- **GIVEN** 用户处于联动声效步骤
47+
- **WHEN** 用户点击“全局设置”按钮
48+
- **THEN** 全局设置对话框打开,且其字段绑定/保存行为与重构前一致
49+
50+
#### Scenario: 在 Step4 拉起单键设置对话框
51+
52+
- **GIVEN** 用户处于联动声效步骤
53+
- **WHEN** 用户点击“单键设置”按钮
54+
- **THEN** 单键设置对话框打开,且以下行为 SHALL 与重构前一致:
55+
- 添加单键声效:按键多选/搜索/录制、声效选择、保存后的提示与状态重置
56+
- 编辑单键声效:切换不同按键时的初始化逻辑、保存/删除提示、无改动提示
57+
58+
> 实现说明:父组件中原先用于对照回滚的 `v-if="false"` 旧单键对话框模板已移除;当前以 `SingleKeyEffectDialog` 作为唯一实现入口。
59+
60+
---
61+
62+
### Requirement: 组件边界与目录结构清晰
63+
64+
Normative: 为降低单文件复杂度,键音专辑编辑器前端实现 SHALL 采用清晰的目录结构将步骤、对话框与逻辑域拆分管理,并保持对外入口兼容。
65+
66+
#### Scenario: 保持外部引用入口兼容
67+
68+
- **GIVEN** 其他页面/组件可能引用 `frontend/src/components/Keytone_album.vue`
69+
- **WHEN** 本次重构落地
70+
- **THEN** 外部引用 SHALL 继续可用(通过薄壳组件或兼容导出),无需调用方修改行为
71+
72+
### Requirement: 新增拆分文件具备可读性说明
73+
74+
Normative: 本次重构新增的 step/dialog/composable/mapper 文件 SHALL 在文件头部包含说明注释,用于降低 review 与排错成本。
75+
76+
#### Scenario: 排查行为回归时的定位成本可控
77+
78+
- **GIVEN** 用户在重构后遇到行为回归或数据不同步
79+
- **WHEN** 开发者打开新增的拆分文件
80+
- **THEN** 文件头部注释 SHOULD 明确:文件职责边界、关联的调用方文件、关键行为不变约束、以及首选的 Debug 切入点
81+
82+
### Requirement: 映射逻辑统一复用纯函数
83+
84+
Normative: `initData()``watch(audioFiles)` 与 SSE 更新 三条路径 SHALL 复用 `keytoneAlbumMappers` 中的纯函数,以确保映射行为一致、避免重复代码与行为漂移。
85+
86+
#### Scenario: 初始化与 SSE 更新的列表排序行为一致
87+
88+
- **GIVEN** 用户加载键音包配置(初始化)或接收 SSE 更新
89+
- **WHEN** 配置数据被映射为 `soundFileList` / `soundList` / `keysWithSoundEffect`
90+
- **THEN** 三条路径的映射结果 SHALL 一致(通过调用同一纯函数实现)
91+
92+
### Requirement: Step4(联动声效)以子组件承载 UI
93+
94+
Normative: 联动声效步骤(Step4)的 UI 模板 SHALL 从父组件中拆出到 `steps/StepLinkageEffects.vue`,并通过 inject 使用父组件 provide 的 Context,以降低父组件模板复杂度且保持行为不变。
95+
96+
#### Scenario: Step4 的 done/disable 与对话框打开行为保持一致
97+
98+
- **GIVEN** 用户处于 Step4(联动声效)
99+
- **WHEN** 用户切换内嵌测试音开关,或点击“全局设置/单键设置”打开对应对话框
100+
- **THEN** Step4 的 done/disable 逻辑、以及对话框打开/关闭状态字段 SHALL 与重构前一致
101+

0 commit comments

Comments
 (0)