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

113 lines
9.3 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.
## 12. 验收清单(逐项勾选,不得跳过)
> 所有自动验证默认无头/离屏;`--visual` 才允许真实桌面。任一项未通过都不得声称完成。
### 12.1 工程门禁
- [ ] `pnpm lint` 0 error(warning 需列出)。
- [ ] `pnpm typecheck` 0 error(先构建 shared)。
- [ ] `pnpm build:desktop` 成功;`island.html` 与主窗口产物分别可加载。
- [ ] 未新增 UI 框架/状态库/图标库;新增依赖(若有)≤ 200KB 且说明不可替代性。
- [ ] 只改 `packages/shared`、`packages/desktop-client`、`packages/ui`(如需)与 docs;服务端/Web 管理端零改动。
- [ ] 所有新增 IPC 通道有 sender 校验、payload 类型校验;preload 白名单与 `desktop.d.ts` 同步。
- [ ] 无 `console.log` 残留;日志走统一 logger。
### 12.2 视觉验收(像素级)
在 1920×1080@100%、2560×1440@125%、深色/浅色、`family=classisland`/`winisland`、Fluent/Classic 主题下截取离屏基准图,逐项比对(颜色 ±2/255、尺寸/位置 ±1px、透明度 ±1%):
**fixed(classisland 风格)**
- [ ] fixed 窗口包围盒固定:宽 = min(工作区宽, 960)、高 = 40 + 2×pad(pad 默认 20);消息到达/展开/多条列表均不改变窗口尺寸。
- [ ] 可见行高 40px,行内容左右内边距 12px,最小内容宽 20px;行间距 5px。
- [ ] 行背景:圆角 8px、背景不透明度 0.5、1px 描边、阴影 `0 4 8 2 #48000000`(Fluent)。
- [ ] 字号:次要 14 / 主体 16 / 强调 18 / 超大 20;字重 Medium;正文 `line-height: 1.25`。
- [ ] 进度条:高 3px、贴底、圆角 1.5px、颜色为强调色、按设置精度更新。
- [ ] 默认 1 行 = 日期 + 课程表;无课表时显示占位文本("今天没有课程。"/"今日课程已全部结束。")。
- [ ] 课程表显示当前/下一节/今日时间点模式,当前项展开显示起止时间,其余折叠;课间与"默认隐藏"时间点折叠时隐藏,分割线显示竖线,行动不显示。
- [ ] 下课前秒数徽标:蓝色圆形、显示在课程名右侧、剩余 1 秒显示 `-1`、不显示"即将下课"遮罩、不替换常态组件。
- [ ] 消息气泡:遮罩 5 区权重 `[0,0.1,0.2,0.4,0.2,0.1]`、60° 斜切、区段 360ms + 错峰 120ms、开 QuarticEaseOut / 关 QuadraticEaseIn;文字延迟 260/250ms、scale 1.1→1.0/750ms;退出 200ms `(0.5,0,0.75,0)`;行高 40。
- [ ] 强提醒:全屏/大区域遮罩、超时关闭、不抢焦点、在岛所在显示器出现;关闭后无残影。
- [ ] `winisland` 风格:胶囊 268×44(默认值可配置 220–420 × 36–72)、连续圆角(超椭圆 4.2/14 段)、弹簧形变、纯黑/毛玻璃/主题色渐变、阴影常驻;不得与 classisland 风格混用。
**custom(始终 ClassIsland 规格,family 不影响 custom)**
- [ ] 行高 40、行间距 5、组件外边距 6/6、行背景圆角 8、背景不透明度 0.5。
- [ ] 行结构:`Auto, *, Auto` 三列(左拖动把手 20px / 中组件 / 右行操作区);选中框 1.5px 虚线 `1,1.5`、Opacity 0.75、圆角同背景。
- [ ] 多行、分体岛(separated)、主行标记、允许提醒标记、隐藏规则、组件外观覆盖(字号/前景/背景/圆角/透明度/宽度/对齐)逐项与设置一致。
- [ ] 编辑器中的组件库、行、容器嵌套、选中态、抽屉尺寸与间距符合第 9 部分。
- [ ] 所有组件的默认样式/空数据兜底/超长文本截断/滚动行为符合第 7 部分。
**窗口与层级**
- [ ] 岛窗口无边框、透明、置顶、默认不占任务栏、默认不抢焦点;`winisland` 与 `classisland` 风格均不出现白底/黑边/窗口阴影残影。
- [ ] 6 个停靠位 × 偏移(X/Y)× 多显示器索引正确;`followCursorDisplay` 行为保持。
- [ ] 编辑模式窗口/画布尺寸正确:屏宽 ×(屏高−1px)、四边 60px 内缩、开启命中。
- [ ] 深浅色/主题切换无残留样式;岛动画由 `appearance.animations` 开关控制(系统 `prefers-reduced-motion` 不强制关闭岛动画,遵循 ClassHelper 既有文档约定)。
### 12.3 功能验收
**消息与提醒**
- [ ] 通知/作业/叫人三类消息的图标、标题、正文、优先级、时间显示符合第 8 部分。
- [ ] id 去重;同批消息按"优先级 → 时间"排序;列表"展开更多"与"超出工作区提示"正确。
- [ ] 上课期间普通通知/作业暂存、下课补弹;普通叫人保留可点胶囊;紧急通知/紧急叫人立即展开;与 ClassHelper 现有规则逐条一致。
- [ ] 已读/知道了/标为已读/批处理的语义与通知中心状态一致;本机新录作业指纹去重。
- [ ] 自动收起超时:胶囊 15s、展开 20s、紧急 45s、叫人 90s(按现有常量),可打断、可重入。
- [ ] 强提醒仅对开启"强调提醒"的消息出现;关闭后不出现;超时自动关闭;不阻塞岛与其他应用。
- [ ] 消息风暴 20 条/分钟:不丢、不重复、不卡顿、队列上限有日志。
**课程与天气**
- [ ] 准备/上课/课间/下课前倒数/课中进度五类提醒按设置触发,阈值默认 60s 可调。
- [ ] 课程状态机跨天、跨周、临时课表、预定课表、调课场景正确(与 ClassHelper 现有解析结果一致)。
- [ ] 课程提醒接管:fixed(classisland)按 ClassIsland 行内容接管显示 prepare/on-class/break;custom 不再临时接管整岛(移除 `resident-lesson-page`),进度由课程组件显示,ending 只保留课程名右侧 30×30 蓝色圆形秒数徽标。
- [ ] 天气:Open-Meteo 15 分钟刷新、断网缓存并显示"缓存"、失败重试与降级、无官方气象预警措辞。
- [ ] 课件传输:传输中覆盖岛内容,显示文件名/类型/教师/字节/进度,完成后校验并回执;不自动运行文件。
**编辑器与设置**
- [ ] 设置页:经典/自定义切换、风格切换、外观参数、课程提醒开关、指针避让、动画开关、强提醒开关全部即时保存并生效。
- [ ] 编辑器:方案栏(新建/复制/删除/重命名/导入导出/重置)、组件库 11 类、行(新增/排序/主行/允许提醒/删除)、容器嵌套、拖拽(行内/跨行/库→行/库→容器)、选中与组件设置(内容/外观/尺寸/隐藏条件)、编辑模式预览、预览缩放、退出保存/失败重试。
- [ ] 边界:12 行/200 节点/6 层/20 方案;超限拒绝并提示;非法颜色/数值被夹取;未知组件/未知 Kind 不崩溃。
- [ ] 旧方案导入后可直接渲染(迁移测试)。
### 12.4 动画验收
- [ ] 第 10 部分动画表逐项实现;时长误差 ≤ 16ms,曲线一致(DevTools Animations 或逐帧截图验证)。
- [ ] 岛出现/隐藏、行展开/折叠、行宽/高度、进度条、消息气泡两阶段、强提醒、课程徽标、滚动/轮播、主题切换全部流畅(≥55fps)。
- [ ] 不可打断的动画可被新状态覆盖(不排队、不闪回)。
- [ ] `animations=false` 生效(唯一岛动画开关);`speed` 统一缩放时长;失焦/隐藏页暂停;恢复后不补播。
- [ ] 动画结束无残留 `will-change`、定时器、rAF。
### 12.5 兼容与迁移验收
- [ ] 旧 `fixed`/`custom` 配置 fixtures 升级后:方案、行、组件、外观、课程提醒、指针避让、`residentEnabled` 全部保留;迁移幂等。
- [ ] 升级失败可回滚(备份恢复);不可用时保留原文件为 `.corrupt` 并启动默认配置,不得清空。
- [ ] 新配置被旧客户端读取时忽略未知字段、不崩溃(如能构造旧客户端则测;否则单测模拟)。
- [ ] `winisland` 风格下旧观感/旧交互无回归(对照基线图)。
- [ ] 切换 fixed↔custom、风格切换、方案切换均不新开窗口、不丢配置。
### 12.6 无头与不打扰验收
- [ ] `pnpm verify:desktop`(不带 `--visual`)全程不创建可见岛、托盘气泡、系统通知、声音;测试结束无残留进程/窗口。
- [ ] 使用独立 userData;不触碰真实配置/真实班级/真实通知。
- [ ] `--visual` 仅在显式允许时运行,且截图输出到临时目录;不自动发布。
- [ ] 崩溃自愈限流有效:1 分钟内最多重建 3 次,超过进入安全模式/停止重建。
- [ ] 日志无密码/令牌/敏感路径。
### 12.7 性能验收
- [ ] 岛渲染进程启动 ≤ 500ms;冷启动到岛可见 ≤ 3s。
- [ ] 空闲 CPU ≤ 1%;消息风暴峰值 ≤ 15% 且 ≤ 500ms。
- [ ] 主进程 + 岛渲染进程内存 ≤ 250MB;24h 增长 ≤ 10%;无句柄泄漏。
- [ ] 包体增量 ≤ 200KB(除说明的例外);无新增大图标/字体文件。
### 12.8 文档与交付物
- [ ] `docs/app/island.md`、`docs/dev/implementation.md` 更新;新增 `docs/dev/island-refactor.md`。
- [ ] 架构图、数据契约、动画表、迁移与回滚、测试命令齐全。
- [ ] 交付说明:与 ClassIsland 差异、未实现项、性能数据、回滚步骤。
- [ ] 第 12 部分本清单逐项勾选并附验证输出摘要;未验证项标注原因。
### 12.9 禁止事项(验收时再次确认)
- [ ] 未通过修改验收标准/删除测试来"通过"。
- [ ] 未因重构删除既有功能(消息、课程、天气、课件、编辑、导入导出、指针避让、触摸)。
- [ ] 未引入需要联网/登录的新依赖。
- [ ] 未把 ClassIsland 的 C#/XAML/本地档案代码复制进 ClassHelper。