feat: add release workflow, packaging script, usage docs and acceptance checklist
This commit is contained in:
1 parent
bd8472f232
commit
8347445f51
9 files changed
+530
-3
No files matched your search
@@ -0,0 +1,102 @@
|
||||
# YKanBan 人工验收清单
|
||||
|
||||
> 对应 PLAN §9 各里程碑的"人工"验证项。按计划 §7.1,窗口、模态、点击流、数据绑定、主题切换、状态页渲染不写自动化测试,一律按本清单人工验证。
|
||||
> 默认在本地 Windows 执行;Linux / macOS 行为验证按 §7.2 推迟至程序完工后,届时用同一清单逐项复核。
|
||||
|
||||
## 准备
|
||||
|
||||
- [ ] `dotnet build` 与 `dotnet test` 通过
|
||||
- [ ] 准备一个空文件夹 `<demo>` 作为演示工作区;以下 `ykanban` 均指 `dotnet run --project YKanBan --` 或发布产物中的可执行文件
|
||||
- [ ] 记下 `app.json` 位置(Windows:`%APPDATA%\YKanBan\app.json`),验收前备份或删除,保证从默认值开始
|
||||
|
||||
## A. 计划指定的四项(M7 必验)
|
||||
|
||||
### A1 语言切换重启生效
|
||||
|
||||
- [ ] 设置 → 语言改为简体中文 → 显示"重启后生效"提示;当前界面**不**变化
|
||||
- [ ] 确认关闭后,退出程序 → `app.json` 中 `Language` 为 `zh-Hans`
|
||||
- [ ] 重启 → 全部界面文本(顶部区、两个 tab、各模态、错误页、排序项、确认对话框)为中文,无残留英文硬编码
|
||||
- [ ] 切回英文 → 重启后恢复英文
|
||||
- [ ] 中文下新初始化的工作区预置列为 待办 / 进行中 / 已完成;切回英文后这些列名**不变**(已是数据)
|
||||
|
||||
### A2 导出语言跟随界面
|
||||
|
||||
- [ ] 英文界面导出:默认文件名 `<工作区名>-export-yyyyMMdd-HHmmss.md`(精确到秒);文件内模板文字为英文,时间格式 `yyyy-MM-dd HH:mm:ss`
|
||||
- [ ] 中文界面导出:默认文件名 `<工作区名>-导出-yyyyMMdd-HHmmss.md`;模板文字为中文,时间格式 `yyyy年M月d日 HH:mm`
|
||||
- [ ] 保存对话框的文件类型名随语言(Markdown document / Markdown 文档)
|
||||
- [ ] 看板处于搜索筛选、非默认排序时导出:文件仍含**全部**列与卡片,列与卡片均按 id 升序;空列保留;无标题卡片为 `### #id`
|
||||
- [ ] 标签总表含全部标签(含未使用的),使用数正确;标签名含 `` ` ``、`|`、换行时转义符合 §5.8
|
||||
- [ ] 文件为 UTF-8 无 BOM;取消保存对话框不写任何文件;保存到无权限位置时弹"导出失败"消息框
|
||||
|
||||
### A3 主题三态切换
|
||||
|
||||
- [ ] 设置 → 主题 亮色 / 暗色 / 跟随系统 依次切换:**即时生效**,无重启提示
|
||||
- [ ] 每种主题下检查:主窗口、看板列与卡片、标签 tab、全部模态、全部错误页颜色完整切换,无亮底暗字/暗底亮字残留
|
||||
- [ ] 标签徽章在两种主题下均显示原色(§5.9 例外),文字颜色保持可读
|
||||
- [ ] 跟随系统:程序运行中切换 Windows 深浅色 → 程序跟随变化
|
||||
- [ ] 重启后主题保持上次选择
|
||||
|
||||
### A4 app.json 多实例脏写
|
||||
|
||||
- [ ] 同时打开两个实例(不同工作区)。实例 1 改排序,实例 2 改列宽;先关实例 1、后关实例 2 → `app.json` 为实例 2 的完整设置(后退出者覆盖,实例 1 的排序改动丢失——已接受)
|
||||
- [ ] 打开两个实例,只在实例 1 改设置;先关实例 1,再关**未改过设置**的实例 2 → `app.json` 保持实例 1 写入的内容(未改设置的实例不写盘)
|
||||
- [ ] 处于错误页(例如参数错误页)的实例退出时不写 `app.json`(可先删除 `app.json`,退出后确认文件未被创建)
|
||||
- [ ] `app.json` 写成非法 JSON → 启动正常、使用默认值,生成 `app.json.bak`;改一次设置退出后 `app.json` 恢复为合法内容
|
||||
- [ ] `app.json` 中单个字段非法(如 `"Theme": "pink"`、列宽 `9999`)→ 仅该字段回退默认,其余设置保留,不生成 `.bak`
|
||||
|
||||
## B. 启动与错误页(M4 / M4R)
|
||||
|
||||
- [ ] 无参数、两个参数、`--help`、`-x`、空字符串参数 → 参数错误页,显示 `Usage: ykanban <path>`
|
||||
- [ ] 不存在的路径、指向文件的路径 → 目录不存在页
|
||||
- [ ] 相对路径(如 `ykanban .`)按当前目录解析
|
||||
- [ ] 无 `.ykanban` 的文件夹 → 未初始化页;点"初始化"后进入看板,预置三列
|
||||
- [ ] 初始化失败(如只读文件夹)→ 工作区打开失败页
|
||||
- [ ] 同一工作区开第二个实例 → 锁冲突页,无任何操作按钮;关闭第一个实例后可正常打开
|
||||
- [ ] 工作区数据库 `user_version` 改为更高值 → 打开失败页,提示版本过新,英文详情可选中复制
|
||||
- [ ] 把 `ykanban.db` 换成垃圾内容 → 打开失败页(数据库无法打开/损坏)
|
||||
- [ ] 窗口标题:正常时 `工作区名 - YKanBan`,错误页时仅 `YKanBan`
|
||||
- [ ] 顶部区:工作区名 + 小一号完整路径;右侧 导出 / 设置 / 关于 同排
|
||||
|
||||
## C. 看板 tab(M5)
|
||||
|
||||
- [ ] 新建列、编辑列(标题 + 描述);空标题、重名(含仅大小写不同,如 `Done` / `done`)→ 模态内提示错误,模态不关、输入保留
|
||||
- [ ] 删除列:确认框提示将删除 N 张卡片;确认后列与卡片一并删除
|
||||
- [ ] 新建卡片、点击卡片编辑:标题可空;内容多行;`#id` / 创建时间 / 修改时间只读显示(新建时不显示)
|
||||
- [ ] 编辑确认但内容未变 → 修改时间不变;改动后确认 → 修改时间刷新
|
||||
- [ ] 有未保存改动时取消或点标题栏关闭 → 丢弃确认(开关开启时)
|
||||
- [ ] 卡片菜单"移动到列":卡片移动,修改时间**不**变
|
||||
- [ ] 删除卡片:确认框(开关开启时)
|
||||
- [ ] 卡片条目:`#id` 加粗与标题同行;无标题只显示 `#id`;内容约 200 字截断;标签彩色徽章;不显示时间
|
||||
- [ ] 标签区:× 移除;"添加标签"嵌套模态可筛选、选中即添加、可反复打开;嵌套模态中新建标签**立即写库**——外层取消后该标签仍出现在标签 tab
|
||||
- [ ] 列宽:窄 240 / 标准 320 / 宽 480 / 手动 160–720;全局生效,重启保持
|
||||
- [ ] 排序:id 升序 / 最后修改时间降序 / 标题升序(空标题在前);只影响卡片,列始终 id 序;重启保持
|
||||
- [ ] 大数据量:用脚本向一列灌入约 10000 张卡片,滚动流畅、打开工作区无明显卡顿(虚拟化)
|
||||
- [ ] 所有模态在父窗口居中;使用系统原生标题栏
|
||||
- [ ] 打开带输入框的模态时,第一个输入框自动获得焦点并全选
|
||||
|
||||
## D. 标签 tab 与搜索(M6)
|
||||
|
||||
- [ ] 标签 tab 条目:颜色徽章 + 名称 + 描述 + 使用数;顶部显示标签总数;无标签时显示空状态文字
|
||||
- [ ] 新建标签:预置色块或手输 `#RRGGBB`;非法颜色、空名、重名(仅大小写不同也算)→ 模态内提示
|
||||
- [ ] 重命名、改色、改描述后,看板上的徽章同步更新
|
||||
- [ ] 删除标签:确认框提示"将从 N 张卡片移除该标签";删除后卡片保留、只是去掉该标签
|
||||
- [ ] 看板写库(编辑/移动/删除卡片等)后切到标签 tab,使用数已更新
|
||||
- [ ] 搜索仅在点"搜索"或按回车时执行;输入过程中不执行、不报错
|
||||
- [ ] 筛选后空列保留显示;× 清空并显示全部;空白表达式 = 全部
|
||||
- [ ] 非法表达式(如 `bug AND`、`tag:`、`(a`、`id:0`)→ 错误对话框"查询表达式有误,详情:…"+ 英文详情,父窗口居中;关闭后搜索框保留原文,看板保持上次结果
|
||||
- [ ] 筛选状态下写库:按**上次成功**的表达式刷新(即使搜索框已改成别的文字);新建但不匹配的卡片不显示
|
||||
- [ ] USAGE.md 搜索语法示例表逐条实测结果与文档一致
|
||||
|
||||
## E. 设置与关于(M4)
|
||||
|
||||
- [ ] 四个确认开关分别关闭后,对应操作不再弹确认;重启保持
|
||||
- [ ] 关于:应用名、版本号、仓库链接(可点击打开浏览器)、许可证
|
||||
|
||||
## F. 发布(M7,视网络条件推迟)
|
||||
|
||||
- [ ] 在代码托管平台手动触发 `Build` workflow;四个 RID 作业均 build → test → 上传产物
|
||||
- [ ] 产物:`YKanBan-<版本>-win-x64.zip`、`-linux-x64.tar.gz`、`-osx-x64.tar.gz`、`-osx-arm64.tar.gz`
|
||||
- [ ] Windows:解压后 `YKanBan.exe <path>` 可直接运行(自包含,无需安装 .NET)
|
||||
- [ ] Linux:解压后 `./YKanBan <path>` 可运行(可执行位保留)
|
||||
- [ ] macOS:解除隔离后 `open -a YKanBan --args <path>` 与直接运行包内可执行文件均可用;双击 `.app` 只显示参数错误页
|
||||
- [ ] 故意让某平台测试失败 → 该 RID 无产物,其余 RID 不受影响
|
||||
+1
-1
@@ -375,7 +375,7 @@ phrase := '"' 任意文本 '"' (内部支持转义:\" → 字面引号,
|
||||
| **M4R v1.9 回补** | 已完成 | 见下方清单 | 本地 Windows build + test 通过;新增页面人工 |
|
||||
| M5 看板界面 | 已完成(待人工验收) | 看板 tab 全部交互与模态(含约束冲突模态内提示、卡片列表虚拟化、嵌套模态新建标签立即写库、写库后按最近成功表达式刷新) | 人工 |
|
||||
| M6 标签与搜索集成 | 已完成(待人工验收) | 标签 tab、搜索执行与空列保留、导出接线(含文件名/时间戳 i18n 模式) | 人工 |
|
||||
| M7 发布与文档 | 待办 | 单一 workflow(4 RID 矩阵 build→test→artifact,osx-x64 用 Intel 运行器)文件就绪(结构自查)、根目录 USAGE.md、README(引用 USAGE.md)、人工验收清单(含语言切换重启生效、导出语言跟随界面、主题三态切换、app.json 多实例脏写四项) | workflow 结构自查通过;实际触发与产物验证视网络条件推迟 |
|
||||
| M7 发布与文档 | 已完成(待人工验收;workflow 实际触发推迟) | 单一 workflow(4 RID 矩阵 build→test→artifact,osx-x64 用 Intel 运行器)文件就绪(结构自查)、根目录 USAGE.md、README(引用 USAGE.md)、人工验收清单(含语言切换重启生效、导出语言跟随界面、主题三态切换、app.json 多实例脏写四项) | workflow 结构自查通过;实际触发与产物验证视网络条件推迟 |
|
||||
|
||||
**M4R 清单**(v1.9 对已完成里程碑的回补,进入 M5 前完成):
|
||||
|
||||
|
||||
Reference in new issue
Block a user