Files
YKanBan/docs/ACCEPTANCE.md
T
doyaGu c12408d2e3 fix(storage): refuse to open a workspace whose database file is missing
With .ykanban present but ykanban.db gone, opening used to create an empty
database and show an empty board without any hint. It now throws
WorkspaceDatabaseMissingException and shows the open-failed page, telling the
user to restore a backup or delete .ykanban and initialize again.
2026-10-03 08:12:53 -04:00

8.3 KiB
Raw Blame History

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.db(及 -wal / -shm)→ 打开失败页,提示数据库缺失;.ykanban 中不会出现新建的空库
  • 窗口标题:正常时 工作区名 - 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 -n -a YKanBan --args <绝对路径> 与直接运行包内可执行文件均可用;双击 .app 只显示参数错误页
  • 故意让某平台测试失败 → 该 RID 无产物,其余 RID 不受影响