- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构) - ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本) - 投喂指南、分卷、逐节文件 - 调研记录、一致性基线、生成与质检脚本
77 lines
6.5 KiB
Markdown
77 lines
6.5 KiB
Markdown
## 13. 重构里程碑(M0–M7)
|
||
|
||
> 必须按顺序推进;每个里程碑结束都要「可无头运行 + 通过该阶段验收 + 既有功能不回归」。禁止先大改 UI 再补架构与测试。
|
||
|
||
### M0 基线固化与安全网(0.5–1 天)
|
||
- 交付:
|
||
- 读通现状并输出文件级计划(第 4 部分)与迁移计划(第 5 部分)。
|
||
- 为现有行为建立无头基线:`normalizeIslandLayouts` 边界用例、消息排序/去重、课程状态机、窗口几何计算、旧配置 fixtures(fixed/custom/嵌套/极端值)。
|
||
- 记录性能基线:启动耗时、空闲 CPU、内存、消息风暴耗时。
|
||
- 在 `verify:desktop` 中补充"不创建可见窗口/托盘"的断言。
|
||
- 验证:`pnpm typecheck`、`pnpm verify:desktop`(无头)通过;fixtures 全部可回放。
|
||
- 完成标准:没有行为改动;所有基线用例通过;性能数字记录在 `docs/dev/island-refactor.md` 草案。
|
||
|
||
### M1 共享层 v2:schema、常量、迁移、tokens(1–2 天)
|
||
- 交付:
|
||
- `packages/shared/src/island-layout.ts`:`version=2`、`appearance.family`、`appearance.theme`、`strongNotification`、`progressBar`、`rowStyle`、scheme 的 `rowHeight/componentGap/showProgress`、组件新字段;`normalizeIslandLayouts()` 迁移+校验(12 行/200 节点/6 层/20 方案、颜色/数值夹取)。
|
||
- 常量/token:ClassIsland 行高 40、内边距 12、行距 5、圆角 8、透明度 0.5、字号 14/16/18/20、进度条 3px 等;`winisland` 兼容值保留。
|
||
- 迁移函数(幂等)+ 备份/回滚;单元测试覆盖全部 fixtures。
|
||
- 验证:单测(迁移、夹取、边界、幂等);`typecheck`。
|
||
- 完成标准:旧配置升级后数据无损;新 schema 能被现有代码读取(旧渲染仍可运行);迁移失败可回滚。
|
||
|
||
### M2 渲染引擎:行/组件/tokens(2–3 天)
|
||
- 交付:
|
||
- 统一行/组件渲染模型:fixed 与 custom 共用行结构、背景、进度条、选中框、隐藏规则、淡出、圆角/阴影。
|
||
- `IslandApp.vue` 重构为 ClassIsland 信息行(默认日期+课程表),`CustomIslandRuntime.vue` 行/组件按新规格;`ComponentNode.vue` 11 类组件默认样式/空数据/布局约束。
|
||
- `family` 双轨渲染仅作用于 fixed(classisland 信息行 / winisland 旧胶囊);custom 统一 ClassIsland 规格;默认按用户升级策略选择;设置页可切换。
|
||
- DOM/CSS token 结构(第 6/7 部分)落地;旧 `winisland` 视觉保持。
|
||
- 验证:组件快照测试(关键 computed 样式/DOM 结构);无头启动渲染;`--visual` 像素基准(1920×1080、深/浅色、两风格)。
|
||
- 完成标准:两风格可切换且互不污染;行/组件像素值达标;旧观感无回归。
|
||
|
||
### M3 消息、课程提醒、强提醒、天气、课件(2–3 天)
|
||
- 交付:
|
||
- 气泡两阶段(遮罩斜切 360/120ms、文字 260/250ms、scale 1.1→1.0/750ms、退出 200ms)与队列/去重/暂存/紧急/叫人规则。
|
||
- 课程提醒五类 + 下课前蓝色秒数徽标 + 课程进度条。
|
||
- 强提醒(Topmost)独立透明窗口:全屏/大区域、超时关闭、不抢焦点、多显示器、仅在强调提醒开启时出现;编辑/预览不创建。
|
||
- 天气显示/缓存标记;课件覆盖优先与进度。
|
||
- 验证:消息/课程单测(假时钟、假队列);无头推送场景;`--visual` 气泡/强提醒动画采样。
|
||
- 完成标准:ClassHelper 既有消息/课程规则逐条不变;视觉/动画达标;强提醒不影响其他应用。
|
||
|
||
### M4 设置页与编辑器重构(2–3 天)
|
||
- 交付:
|
||
- `IslandSettingsView.vue`:经典/自定义切换、风格切换、外观参数(字号阶梯/行距/进度条/强提醒)、课程提醒、指针避让、动画开关;即时保存、校验、回显。
|
||
- `IslandEditorView.vue`:方案栏、组件库、行/容器、拖拽、组件设置抽屉、编辑模式预览、预览缩放、退出保存/失败重试;与 ClassIsland 编辑模式对齐(选中框、行设置、添加行、组件边距)。
|
||
- `IslandComponentSettings.vue`:字段与第 7 部分一一对应;未知字段保留。
|
||
- 验证:组件测试 + 无头保存/读取 + 迁移后旧方案编辑;`--visual` 编辑器截图。
|
||
- 完成标准:所有设置即时生效;编辑器可用、保存可靠、退出不丢;12 行/200 节点/6 层/20 方案边界提示。
|
||
|
||
### M5 动画、主题、细节打磨(1–2 天)
|
||
- 交付:
|
||
- 第 10 部分动画表逐项;60fps;可打断;`animations=false`/减少动画/失焦/隐藏页暂停。
|
||
- Fluent/Classic 两套岛主题;`winisland` 玻璃/纯黑/渐变保持;主题切换无闪烁。
|
||
- 交互细节:点击区域、悬停、触摸、键盘、拖拽阈值、选中/取消、右键(如适用)。
|
||
- 验证:DevTools/帧采样;逐项动画检查;像素 diff;无头回归。
|
||
- 完成标准:动画误差 ≤16ms、帧率达标;主题/风格切换无残留;减少动画生效。
|
||
|
||
### M6 迁移、兼容与回归(1–2 天)
|
||
- 交付:
|
||
- 迁移 fixtures 全量回放(fixed/custom/旧 residentEnabled/嵌套容器/极端值/非法数据);回滚演练。
|
||
- `winisland` 观感对照基线;旧交互逐条回归(消息/课程/天气/课件/编辑器/触摸/多屏)。
|
||
- 旧版本读新配置的兼容处理;日志/诊断/文档更新。
|
||
- 验证:迁移单测 + 回滚测试 + `pnpm verify:desktop` + `--visual` 对照。
|
||
- 完成标准:旧配置 100% 无损;回滚可用;旧观感/旧交互无回归。
|
||
|
||
### M7 全量验收与交付(1–2 天)
|
||
- 交付:
|
||
- 第 12 部分逐项勾选;性能数据(启动/CPU/内存/帧率/消息风暴);差异说明;回滚说明。
|
||
- `pnpm lint`、`pnpm typecheck`、`pnpm build:desktop`、`pnpm verify:desktop`(无头)、`--visual` 视觉验收记录。
|
||
- `docs/app/island.md`、`docs/dev/implementation.md`、`docs/dev/island-refactor.md` 完成。
|
||
- 验证:按第 12 部分执行;未通过项必须列出原因与修复计划。
|
||
- 完成标准:第 12 部分全通过(或明确标注例外并获得确认);无可见窗口打扰的默认验证可重复通过。
|
||
|
||
### 里程碑风险提示
|
||
- M1 迁移必须先于任何渲染改动,否则旧配置会在开发中损坏。
|
||
- M2/M3 必须保留 feature flag(`family` 与内部开关),确保随时可回退到旧渲染。
|
||
- M4 编辑器依赖 M1 的 schema 与 M2 的渲染组件;不得并行乱改。
|
||
- M5/M6 的像素/动画验收需要稳定的基准图与固定测试数据,禁止用真实班级数据。
|