Files
ClassIsland Prompt Kit 22c1784bab feat: ClassIsland / ClassHelper 灵动岛提示词套件
- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构)
- ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本)
- 投喂指南、分卷、逐节文件
- 调研记录、一致性基线、生成与质检脚本
2026-11-12 21:59:58 +08:00

92 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 11. 兼容性、性能、平台与测试基线
> 本部分规定「重构不能把原来能用的东西弄坏」,以及如何在不打扰用户的前提下验证。所有验证默认必须无头/离屏执行。
### 11.1 兼容矩阵(必须逐项通过)
| 维度 | 必须保持兼容的内容 | 验证方式 |
|---|---|---|
| 配置 | 旧 `config.json.islandLayout`(`fixed`/`custom`、`residentEnabled`、`schemes`/`rows`/`nodes`/`expandedRows`/`appearance`/`lessonReminders`/`pointerFade*`)无损升级 | 迁移单测 + fixtures 回放 |
| 布局模式 | `fixed` 与 `custom` 均可切换、可保存、可重启恢复;两布局共用一个原生岛窗口,切布局不新开窗口 | 无头集成测试 + 主进程单测 |
| 风格 | `family` 只影响 fixed:`winisland` 保持旧胶囊观感,`classisland` 为默认信息行;`custom` 始终 ClassIsland 规格;切换即时生效、可回退 | 截图(仅 `--visual`)+ 视觉回归 |
| 消息 | 通知/作业/叫人的类型、优先级、id 去重、排序、上课暂存、紧急展开、叫人可点胶囊、已读回执、安静模式、教师/班级端差异不变 | 状态机单测 + 无头消息场景 |
| 课程 | 课表解析结果(`ScheduleDto`/`IslandTimePointDto`)、准备/上课/课间/下课前/课中进度提醒、下课前秒数徽标、当前/下一节/今日时间点显示;**行为变更**:custom 不再临时接管岛显示课程提醒(仅保留 ending 徽标,进度由课程组件显示),fixed 按 ClassIsland 接管 | 时间状态机单测 + 假时钟无头场景 |
| 天气 | Open-Meteo 数据、15 分钟刷新、断网缓存标记"缓存"、无官方预警提示 | 无头 mock 网络 + 快照 |
| 课件 | 课件传输状态优先覆盖岛内容、SHA256 校验、回执、不自动运行文件 | 无头课件场景 |
| 编辑器 | 方案/行/组件/导入导出/预览/重置/新建/复制/删除、12 行/200 节点/6 层/20 方案边界 | 单测 + 组件测试 |
| 窗口/输入 | 透明、置顶、不占任务栏、点击穿透、触摸模式、失焦宽限、固定几何护栏、单实例 | 无头窗口参数断言 + 手工触摸说明 |
| 平台 | Windows 10/11(主目标)、macOS、Linux X11;DPI 100/125/150/200;多显示器与热插拔 | 平台矩阵 + 无头几何断言 |
| 性能 | 启动、空闲 CPU、内存、消息风暴、动画帧率 | 性能脚本 + 采样 |
### 11.2 配置迁移与回滚(硬要求)
1. **版本化**:`IslandLayoutSettings.version` 从 `1`(旧配置缺失视为 1)升级到 `2`;迁移函数必须**幂等**(重复执行结果一致)。
2. **迁移顺序**:读取原始 JSON → 备份到 `config.json.bak.<时间戳>`(或配置目录 `backups/`)→ 应用迁移(只补齐/转换,不删除用户数据)→ `normalizeIslandLayouts()` 校验与夹取 → 原子写(临时文件 + rename)。
3. **必须迁移的字段**:
- 顶层新增 `version`、`appearance.family`(老用户默认 `'winisland'`,新安装 `'classisland'`)、`appearance.theme`(`'fluent'`/`'classic'`)、`strongNotification` 开关与参数、`progressBar` 参数、`rowStyle`(行背景/分隔/圆角覆盖);
- scheme 新增 `rowHeight`(默认 40)、`componentGap`(默认 12,对应单侧 6)、`showProgress`(默认 true)、`hideRules` 扩展(保留旧 `in-class`/`no-message`/`no-class`,新增 `full-screen`/`max-window` 需按 12 部分验收);
- 组件新增字段(如 schedule 的 `display` 扩展、countdown 的 `showProgress`、clock 的 `showSeconds`),旧值必须原样保留。
4. **回滚**:迁移失败或新版启动检测到配置不可用时,必须能恢复备份并启动旧结构(主进程启动早期读 `config.json` 的 `islandLayout` 失败时使用默认值 + 保留原文件为 `.corrupt`),不得清空用户方案。
5. **降级兼容**:若旧版本客户端读到新配置,必须忽略未知字段并使用默认值;禁止因未知字段崩溃。版本号高于当前可识别值时,主进程写日志并走只读模式(不自动覆盖新配置)。
6. **fixtures**:`packages/shared` 测试中必须包含:fixed 默认、custom 多方案/多行/嵌套容器/旧 residentEnabled、极端值(超 12 行/200 节点/6 层/颜色非法/坐标为 null)、旧字段缺失、迁移幂等、迁移失败回滚。
### 11.3 IPC 与契约兼容
- 保留现有通道:`island:get-schedules`、`island:get-time-points`、`island:get-layout`、`island:save-layout`、`island:edit-layout`、`island:get-editing`、`island:get-visible`、`island:resident-control`、`island:resident-touch`、`island:set-editing`、`island:content-size`、`island:remove-notification`、`island:push`、`island:class-state`、`island:alive`、`island:get-state`、`island:set-appearance`、`island:get-appearance`、`island:set-interactive`、`island:set-hit-rect`、`island:set-touch-mode`、`island:action`。
- 新增通道必须遵守:`ipcMain.handle/on` 前校验 `event.sender === island.getWindow()?.webContents`(或主窗口 webContents),payload 必须是纯数据且做类型/范围校验;preload 白名单同步更新 `src/preload/island.ts` 与 `src/types/desktop.d.ts`。
- 新增通道建议(如需要):`island:strong-notification`(主进程→岛/强提醒窗口)、`island:get-metrics`(渲染层上报行/组件度量)、`island:preview-mode`(编辑器预览)。不得把 Vue Proxy/函数/类实例跨 contextBridge 传递。
- 渲染进程心跳、幽灵窗口检测、渲染崩溃自愈(限流 3 次/10 分钟)与恢复逻辑保持不变。
### 11.4 性能预算(超预算必须优化)
- 岛渲染进程启动 ≤ 500ms(从窗口创建到首帧可见);冷启动到岛可见 ≤ 3s(不含网络)。
- 空闲 CPU 平均 ≤ 1%(岛可见、时钟/课程正常刷新);消息到达/展开瞬间峰值 ≤ 15% 且 ≤ 500ms。
- 主进程 + 岛渲染进程内存 ≤ 250MB(不含可选强提醒窗口);连续运行 24h 增长 ≤ 10%。
- 消息风暴:1 分钟 20 条不丢、不重复、不卡顿;队列长度上限与丢弃策略必须有日志。
- 动画:主界面过渡 ≥ 55fps;消息气泡/强提醒 ≥ 50fps;不得因背景页(主窗口隐藏)继续动画。
- 包体:本次重构不得新增 > 200KB 的运行时依赖;不得引入新 UI 库/图标库(图标仍用现有方案)。
### 11.5 平台差异与窗口护栏
- Windows:透明/置顶/点击穿透/`setShape`(若用)只在 Windows 分支;Windows 10 不支持 Mica 时退回纯色;高 DPI 下窗口 bounds 用 DIP。
- macOS:透明窗口、置顶、全屏空间行为;不使用 `setBackgroundMaterial`;点击穿透退化为整窗 `setIgnoreMouseEvents(true,{forward:true})` + 命中通道。
- Linux X11:透明窗口与置顶可用;Wayland 明确不支持并给提示(与 ClassHelper 既有说明一致)。
- 多显示器:`position`/`followCursorDisplay`/停靠偏移语义保持不变;显示器热插拔/DPI 变化必须重算包围盒与锚点,节流 ≥100ms。
- 触摸:触摸模式仍以"窗口贴合岛体 + 始终接收输入"为原则;编辑模式与触摸手势不能互相抢占;失焦宽限(鼠标 500ms / 触摸 1200ms)保持不变。
- 强提醒窗口:无边框、置顶、不抢焦点、`skipTaskbar`、独立渲染入口或复用岛窗口的独立层;关闭后释放;不得在编辑器/预览中创建。
### 11.6 测试基线(无头优先)
1. **单元测试(shared)**:`normalizeIslandLayouts` 边界、迁移幂等、版本识别、颜色/数值夹取、组件树限制(12 行/200 节点/6 层/20 方案)、消息排序/去重、课程状态机(准备/上课/课间/下课前/放学/跨天/跨周)。
2. **主进程测试**:窗口几何计算(6 停靠 × DPI × 多屏)、hit rect/触摸模式切换、消息队列与暂存、课程提醒调度、天气缓存、课件覆盖优先级、配置写入原子性与回滚。
3. **组件测试**:固定数据下 `IslandApp.vue`/`CustomIslandRuntime.vue` 的渲染快照(DOM 结构 + 关键 computed 样式),不创建真实窗口(可用 happy-dom/离屏渲染)。
4. **集成(无头)**:`pnpm verify:desktop` 默认后台快速检查——不得创建可见岛/托盘;覆盖启动、布局切换、消息推送、课程提醒、编辑器保存/读取、迁移。
5. **视觉(显式)**:只有 `pnpm verify:desktop:visual` / `--visual` 才允许真实桌面、动画采样、截图;截图输出目录用临时路径;不得把窗口对照图发布为展示图。
6. **数据纪律**:测试使用临时 SQLite/夹具,禁止使用真实班级、真实密码、真实通知;远控/安装器使用假执行器。
7. **证据**:每次汇报附实际命令输出摘要(通过/失败数量),不得沿用历史数字。
### 11.7 观测与诊断
- 主进程日志必须记录:配置迁移(旧→新字段、备份路径、结果)、窗口几何重算原因、消息队列变化(入队/出队/丢弃/去重)、课程状态切换、天气刷新/失败、强提醒创建/销毁、渲染崩溃/重建(限流计数)。
- 岛渲染进程必须上报心跳与度量(行/组件尺寸、可见性);主进程对"幽灵窗口"(渲染卡死但窗口在)执行重建(限流)。
- 诊断页/日志中不得包含用户密码、令牌、完整数据库路径;日志轮转与大小上限沿用现有 logger。
- 提供 `docs/dev/island-refactor.md` 的排障章节:黑屏/透明失效/点击穿透/闪烁/动画卡顿/消息不弹/课程不刷新/迁移失败的症状 → 排查步骤 → 回滚方法。
### 11.8 文档与交付说明
- 更新 `docs/app/island.md`:新默认观感、风格切换、editor 编辑模式、强提醒、行为表(含 fixed 重定义)。
- 更新 `docs/dev/implementation.md`:岛的新架构入口、schema v2、迁移函数位置。
- 新增 `docs/dev/island-refactor.md`:架构图、文件职责、数据契约、动画表、迁移与回滚、测试命令。
- `docs/` 中的展示截图必须来自显式视觉验收且人工确认;不得使用重构中的对照图/失败截图。
- 交付说明必须包含:与 ClassIsland 的差异清单(技术栈/能力取舍)、未实现项及原因、性能数据、回滚步骤。
### 11.9 本部分验收标准
- [ ] fixtures 覆盖 11.2 全部场景,迁移全部通过且幂等。
- [ ] 旧配置在重构版启动后方案、组件、外观、课程提醒开关全部保留,且可切回 `winisland` 观感。
- [ ] 所有既有 IPC 通道仍可用,新增通道有 sender 校验与类型校验。
- [ ] `pnpm verify:desktop` 无参数运行时**不创建可见岛/托盘/声音**;`--visual` 才创建。
- [ ] 多显示器/DPI 切换后岛位置与尺寸正确,无 1px 抖动。
- [ ] 24h 无内存增长 > 10%、无崩溃、无幽灵窗口。
- [ ] 文档更新完成,含迁移/回滚/差异说明。